背景:

nextcloud的mysql数据库被黑,删库勒索。参考:记一次mysql数据库被勒索(上)

mysql数据库恢复成功,nextcloud还是无法连接。参考:记一次mysql数据库被勒索(中)

正文:

经过一番研究,发现nextcloud在第一次数据库配置成功后,会创建一个oc_root的帐号,之后就会使用oc_root帐号来连接数据库。

而oc_root的密码,并不是在配置的时候设置的管理员root的密码,貌似是nextcloud自己生成的。

加密算法应该跟这里面的passwordsalt 有关系,重新配置数据库,这个盐值就会变化。

而之前手贱,想通过配置新数据库,来恢复nextcloud,又没有把config.php文件备份下来。

结果,现在的nextcloud所用的密码,无法连接原来的mysql数据库了。。T_T

以上结论是经过反复试验得出的,不一定严谨~~

于是,就想到一个方法:

1, 使用nextcloud连接新的数据库,重新生成oc_root帐号和config.php文件;

2,从新的数据库里面,获取oc_root创建的SQL,导入到旧数据库里面;

3,手动修改config.php文件,将dbhost指向旧数据库;

※ 这个方法能行的通,前提就是加盐算法,只用于oc_root连接数据库,其他数据表里面没有使用这个盐,赌一把了~~

试验过程:

1,启动新mysql的docker容器;

2,删除nextcloud的config.php文件,并在configh目录下touch CAN_INSTALL 文件;

3,浏览器刷新nextcloud,输入新的mysql容器IP,其他配置保持与旧数据库一致;

※ 需要提前将nextcloud管理员帐号对应的目录重命名,否则会提示用户名已经存在。

4,等nextcloud的数据库配置完成,查看创建oc_root用户的SQL文:

还是通过binlog来:

# mysqlbinlog /var/lib/mysql/binlog.000002 > /var/lib/mysql/2.sql

找到创建帐号、设置权限的SQL语句

5, 在旧的数据库中执行以下操作

删除原来的oc_root帐号:delete from user where user='oc_root';

创建新的oc_root帐号:

在创建oc_root@%时,会报 ERROR 1396 (HY000): Operation CREATE USER failed for 'oc_root'@'%' 的错误。

需要,先进行drop user 操作:

mysql> drop user 'oc_root'@'%';
Query OK, 0 rows affected (0.14 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

再进行权限设置(也是从binlog里面拷贝出来的):

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `nextcloud`.* TO 'oc_root'@'%';

改完权限,记得要flush privileges,才可以生效。

6,修改nextcloud 的config.php文件,将dbhost改为旧数据的IP

浏览器中刷新一下nextcloud页面,终于出现久违的登陆框。

用之前的帐号登陆,也可以显示之前的文件内容了,大功告成!

========================================================================

这次勒索事件,给我上了很重要一课:

1,公网是很危险的地方,随时有各种人用各种工具在扫描你的机器;

2,密码设置复杂一些,防火墙不能关闭,端口能不开放就不开放;

3,数据库、重要文件,及时做备份;

记一次mysql数据库被勒索(下)的更多相关文章

  1. 记一次mysql数据库被勒索(中)

    背景在上一篇文章里面已经提过了. 现在面临的问题是nextcloud没有mysql数据库,用不起来了. 因为文件没丢,一种方法是启动新的mysql数据库,把文件重新提交一次. 为了程序员的面子,没有选 ...

  2. 记一次mysql数据库被勒索(上)

    家里搞了台旧电脑做NAS,安装了nextcloud,选择了mysql做为数据库. 当时也没有想太多,mysql数据库密码随便设置了个123456,用的一切正常. 然后,听说可以找电信申请换个公网IP的 ...

  3. MySQL数据库InnoDB引擎下服务器断电数据恢复

    说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...

  4. 初码-Azure系列-记一次MySQL数据库向Azure的迁移

    初码Azure系列文章目录 还在继续给客户迁移不同的系统到Azure,这一次是一个系统的MySQL数据库要迁移,将迁移过程记录一下 原系统环境 数据库版本:MySQL Community Editio ...

  5. mysql数据库在Linux下安装与配置

      mysql是一种开放源代码的关系型数据库系统(RDBMS),使用最常用的数据库管理语言--结构化查询语句(SQL)进行数据库管理. 由于mysql的开源,因此任何人都可以在General Publ ...

  6. MySQL 数据库在 Windows 下修复 only_full_group_by 的错误

    本机上新安装了个MySQL数据库,在插入数据的时候一直提示这个错误: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY ...

  7. 记一次mysql数据库失而复得过程

    背景: 由于是自己买的vps搭建的博客,用的是军哥的一键lnmp源码编译安装的,文章也就几篇,对备份并不太重视,想着等服务器快到期的时候备份一下不就行了. 后来在该服务器上测试lnmp分别编译编译安装 ...

  8. 记一次Mysql数据库Kill完之后启动不起来的解决方案

    在Mysql运行的时候,有时候会stop不了,这时候我们就会想直接把他的进程kill掉. 但是,有时候kill完了之后,在去start它就会直接抛异常了... ERROR! The server qu ...

  9. mysql数据库在linux下的导出和导入及每天的备份

    mysql数据库的导出,导入 1. 导出数据库为sql文件 mysqldump 数据库名 -uroot -p > xxx.sql 导出数据表结构和数据 eg.   mysqldump cloud ...

随机推荐

  1. 04 . Filebeat简介原理及配置文件和一些案例

    简介 Beats轻量型数据采集器 Beats 平台集合了多种单一用途数据采集器.它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据. Beats系列 全 ...

  2. 将一个Linux系统中的文件或文件夹复制到另一台Linux服务器上(scp的使用)

    一.复制文件: (1)将本地文件拷贝到远程scp 文件名 用户名@计算机IP或者计算机名称:远程路径(2)从远程将文件拷回本地scp 用户名@计算机IP或者计算机名称:文件名 本地路径 二.复制文件夹 ...

  3. 使用SQL语句建表,插入数据

    --选中数据库,点击新建查询,然后执行即可--这是SQL中的注释信息,使用两个减号来注释. drop table Book --删除表Book create table Book --创建表Book ...

  4. 前端学习(二):head标签

    进击のpython ***** 前端学习--head标签 head标签中的相关标签,是看不见摸不着的,仅仅是对应用于网页的一些基础信息(元信息) 前面说的是青春版,完整的head应该是这样的 !< ...

  5. 分布式系统中幂等性、at least once 和 at most once 问题

    讨论一下分布式系统传输过程中常见的at least once 还是 at most once 问题.一般在一次传输过程中,失败与否是使用最大等待时间(记为time out)来判断是否传输成功,如果超过 ...

  6. 常见的HTTP返回状态值

    200 (成功) 服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 301 (永久移动) 请求的网页已永久移动到新位置. 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自 ...

  7. Python之filter、map、reduce函数

    简介三函数: 高阶函数:一个函数可以接收另一个函数作为参数,这种函数称之为高阶函数. filter.map.reduce三个函数都是高阶函数,且语法都一致:filter/map/reduce(func ...

  8. c语言大小写转化函数(包括字母和字符串)

    本憨憨忘了好几次了,这次一定记住他们! 首先大小写相差32.转换的话自己写函数也是可以写出来的. 1.字母 如果是字母转的话,用toupper(),tolower() 头文件是<ctype.h& ...

  9. lemon使用方法

    1.打开lemon,点击文件--新建比赛 2.输入比赛标题.保存文件名.比赛目录,点击确定 3.打开主文件夹,找到刚才创建的目录,双击打开 4.进入文件夹\(data\) 5.建立一个名为T1的文件夹 ...

  10. JavaScript高级程序设计(第三版) 5/25

    第三章 基本概念 1.任何语言的核心都必然会描述这门语言最基本的工作原理.而描述的内容通常都要涉及这门语言的语法.操作符.数据类型.内置功能等用于构建复杂解决方案的基本概念. 2.浮点数值,该数值中必 ...