首页 > 数据库 >服务器上的数据库被删了

服务器上的数据库被删了

时间:2023-03-01 19:45:28浏览次数:48  
标签:被删 -- 数据库 mysql 用户 sql 服务器 root

一、发现问题:


近期访问我的网站的时候登录报错,到主机上查看了一下日志才发现系统找不到指定数据库,

慌张的我赶紧连接了一下数据库看看,发现真的是数据库被黑了,只留下了我看不懂的英文hh

text
All your data was backed up from your server. You need to email us at [email protected] to recover your data. If you dont contact us we will reach the General Data Protection Regulation, GDPR, and notify them that you store user data in an open form that is not safe. Under the rules of the law, you face a heavy fine or arrest and your database dump will be deleted from our server forever!

翻译了一下:

​ 您的所有数据都从您的服务器备份。您需要发送电子邮件给我们 [email protected] 以恢复您的数据。如果您不联系我们,我们将联系通用数据保护条例 GDPR,并通知他们您以不安全的开放形式存储用户数据。根据法律规定,您将面临巨额罚款或逮捕,您的数据库转储将从我们的服务器中永久删除!

wc,好害怕!!!

二、分析一波:

​ 原因可能就是黑客扫描到公网的主机,发现开放了3306端口,并通过破解密码进入,进行一系列操作,然后跑路

我们可以通过查看Mysql中的binlog日志看看它到底干了些什么:

# 登录到mysql,执行以下命令,后面代表的是要查看的日志的文件名
show binlog events in "binlog.000005";

* 删除了数据库
* 创建了一个新的数据库 README_TO_RECOVER_A
* 在这个数据库里建了张表 RECOVER_YOUR_DATA
* 插入了一条数据,“提醒我们”
* 删除root用户对于所有数据库的权限

也可在终端中查看:

mysqlbinlog "binlog.000005"  # 能够查看更详细的信息,比如时间等

在此还是提醒大家的数据库不要设置成太简单的密码,root(比如我hh),123等等,很容易被暴力破解

三、数据库恢复:

既然已经发生了,就要想办法恢复数据库

通过查看binlog日志发现,删库的日期是在26号,所以直接恢复该日期之前的sql操作即可

由于我的删库操作记录在 binlog.000005 中,所以我们需要恢复binlog.000001~4以及 binlog.000005中的26号之前的sql操作

写一个python脚本生成恢复的sql文件:

#coding: utf-8
import os

os.chdir("/var/lib/mysql")
files = os.listdir(".")

for file in files:
	if file.startswith("binlog.0"):
		num = int(file[len(file)-1])
		if num > 5:
			continue
		elif num == 5:
			os.system("mysqlbinlog --no-defaults -v --base64-output=decode-rows {}  --stop-datetime='2023-02-26 00:00:00' >> /home/recover.sql".format(file))
		else: 
			os.system("mysqlbinlog --no-defaults -v --base64-output=decode-rows {} >> /home/recover.sql".format(file))


执行完该脚本之后会在 /home目录下生成 recover.sql 文件

登录到mysql中,根据该sql文件恢复数据

source /home/recover.sql

运行过程中会出现以下错误:

原因就是入侵者将root用户的权限全部收回了

去赋予root用户权限也没用:

解决方案:

查看root用户是否有所有的权限:

SELECT * FROM mysql.user WHERE USER="root"

可以发现有一些是 No, 所以我们要全部改成 Y,不用全改也可以,但是 Grant 权限必须是 Yes:

执行下面的命令来恢复root用户权限:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

再次执行恢复数据库:

source /home/recover.sql

成功恢复~~

四、问题规避:

  1. 避免mysql的root用户密码太简单:

    -- 用root用户登录到mysql后执行
    set password="xxx";  -- xxx表示root用户密码
    
  2. 可以考虑更换一下mysql的服务端口,(但是好像也没什么用hh,因为可以通过扫描得出监听该端口的应用程序,即使不是3306端口,监听的应用程序是mysql也可以判断是数据库服务)

  3. 尽量不要让root用户host是 % ,改成特定ip地址, (但网站还是要让所有人访问的,也是没办法)

  4. 尽量不要使用root用户连接数据库, 有的应用程序会将root用户的密码在配置文件中体现,不利于安全性:

-- 创建一个新用户
create user "client"@'%' identified by "xxx";
-- 给这个用户赋予项目数据库的所有权限
grant all privileges on homesystem.* to client;

在项目中让client这个用户去连接数据库,这样就能避免root用户密码暴露的问题

标签:被删,--,数据库,mysql,用户,sql,服务器,root
From: https://www.cnblogs.com/junlin623/p/17169437.html

相关文章

  • 模拟浏览器与服务器交互(简易TomCat框架)
    模拟浏览器发送请求到服务器获取资源的思想和代码实现浏览器发送请求到服务器获取资源的流程和概念日常我们使用的浏览器,底层都是帮我们做了很多事情,我们只需要用,比如......
  • 记录一个mongo数据库TreeMap结构导致数据异常的BUG
    BUG:mongo入库丢失了某些字段,没报错场景:java代码调用mongo入库,一个嵌套结构体,在内部某一层嵌套增加一个对象结构,有几个常量和嵌套对象,2个Map<String,String>,1个Map<String,......
  • Unit Test下使用H2内存数据库
    1.Maven引入包<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</version></dependency>2.在项目的sr......
  • TSBS 是什么?为什么时序数据库 TDengine 会选择它作为性能对比测试平台?
    去年8月我们在TDengine开发者大会上正式发布了TDengine3.0,TDengine也由此升级成为了一款云原生时序数据库(TimeSeriesDatabase,TSDB)。为了客观、准确、有效地评估......
  • 数据库常用sql
    1.创建表createtable表名(字段名类型约束,字段名类型约束...)如:createtablestudents(idintunsignedprimarykeyauto_increment,namevarchar(20......
  • 什么是数据库?
    数据库概述数据库是一个以某种有组织的方式存储的数据集合,通常是一个文件或一组文件数据库软件也称为DBMS(数据库管理系统),数据库是通过DBMS创建和操纵的容器在现实......
  • jmeter测试数据库死锁问题
    场景:    多人同时操作同一对病人不同业务的保存操作,例如:有人修改保存病人资料,有人修改保存病人的治疗方案,有人修改保存病人的B超信息测试步骤:不是为了压测登录操......
  • MySQL数据库架构&SQL注入漏洞
    查找zblog数据库中有哪些表SELECTTABLE_SCHEMA,TABLE_NAMEFROMinformation_schema.`TABLES`WHERETABLE_SCHEMA='zblog';查找目标表(zbp_category)中的字段SELECT6,COLU......
  • 数据库笔记
    第二讲数据库系统的结构抽象与演变1.数据库系统的标准结构(1)数据库系统的分层抽象?DBMS管理数据的三个层次外部层次(ExternalLevel)=用户层次(UserLevel)某一用户能够......
  • 利用python操作数据库MySQL
    一、python操作MySQL的库(包)1.PythonDatabasAPI   Python操作数据库的标准接口为PythonDatabasAPISpecificationV2.0,其定义了在python中操作数据库的方法......