服务器上数据库被删优化办法
1、最近在写一个小项目,MySQL 数据库使用 Docker 安装部署在租的服务器上,然后使用 Navicat 连接数据库时,发现:ERROR 1045 (28000): Access denied for user ‘root‘@‘x.x.x.x‘ (using password: YES/NO)之前一直是能连上的,并且最近开发一直在使用,开发过程中编写过 sql 执行都是没问题的。2、百度发现
1、最近在写一个小项目,MySQL 数据库使用 Docker 安装部署在租的服务器上,然后使用 Navicat 连接数据库时,发现:
ERROR 1045 (28000): Access denied for user ‘root‘@‘x.x.x.x‘ (using password: YES/NO)
之前一直是能连上的,并且最近开发一直在使用,开发过程中编写过 sql 执行都是没问题的。
2、百度发现这个错误是因为 root 账户没有远程访问权限(参考),即跨 ip 访问权限,但是之前安装部署时是打开了这个设置的(安装过程),支持远程访问的,而且最近使用也没有什么问题。
3、但是抱着试一试的心态,还是重新执行了授权的命令
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option; #这里第一个root是用户名,第二个是密码,% 代表对所有 IP 开放权限,也可以设置单独的 IP
flush privileges;
执行完之后,发现确实可以登陆了。
4、登录之后,发现 mysql 数据库中的 user 表里面多了条 root,访问权限 Host 为localhost (也可能是之前就有的),另一条 root,访问权限 Host 为 %,这样就所有的 IP 都可以访问了。
5、然后启动微服务。数据库能够连接成功了,但是有出现了找不到数据,查看数据库发现上面的表都被人删掉了,而且多了一张 README 表,打开表发现里面内容如下:
以下数据库已被删除:xxx。 我们有一个完整的备份。 要恢复它,您必须将0.006比特币(BTC)支付给我们的比特币地址xxxxxx。 有关说明,请通过xxx@xxx.com通过电子邮件联系我们。 任何与付款无关的邮件都将被忽略!
原来是被黑客攻击了,提示要付款才能找回被删除的数据。
6、在仔细查看用户
mysql>select host,user,authentication_string from mysql.user;
发现多了一个mysqld不限ip的用户,将它删除。
删除用户:
mysql>drop user mysqld@'%';
查看授权:
mysql>show grants;
对固定ip授权:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'x.x.x.x' IDENTIFIED BY 'xxx';
不使用%对所有ip授权,仅对固定ip授权,减少可能的恶意访问。
刷新授权:
mysql>flush privileges;
7、默认 root 账户的密码是 root,比较简单为了提高安全性,防止再次被黑客破解,需要修改密码。
然后尝试去 user 表找密码的字段进行更新,按照传统改密码方式发现没有 password这个字段。
mysql> update user set password=password('123') where user='root';
ERROR 1054 (42S22): Unknown column ‘password’ in ‘field list’
网上查了一下据说5.7 版本password 字段改成 authentication_string password 函数还是原来的password函数。可以看到密码是加密的,所以说,如果设置过密码但是忘记了,那不好意思了,是不能进行查看密码的,只能查看用户名,因为mysql密码是动态md5加密,是不可逆向查询的。
mysql> update user set authentication_string=password('123') where user='root';
8、开启 binlog 方便恢复数据
在开启binlog遇到个问题记录下:
1)配置my.cnf
2)将mysqld中config: /etc/my.cnf 放开
参考:
更多推荐
所有评论(0)