一、问题说明
除了常见的情况,例如没有实现数据挂载,导致数据丢失外,还需要考虑数据库是否被攻击,下图 REVOVER_YOUR_DATA 就代表被勒索了,这种情况通常是数据库端口使用了默认端口(3306)且密码设置简单导致, 当前情况系统不安全了,不建议您继续使用当前系统环境。
二、解决方法
2.1、密码方面
- 使用强密码策略,要求用户设置复杂且难以猜测的密码。
请注意,如果您使用的是MySQL 5.7及以上版本,并且在安装时使用了强密码策略插件(如validate_password),您可能需要设置一个更安全的密码。
以下是一个示例代码,展示了如何在MySQL命令行中执行这些步骤:
# 以管理员权限登录MySQL服务
mysql -u root -p
-- 选择MySQL数据库
use mysql;
-- 更新root用户的密码
UPDATE user SET authentication_string=PASSWORD('新密码') WHERE user='root';
-- 刷新权限使修改立即生效
flush privileges;
-- 退出MySQL
EXIT;
- 定期更换密码,降低密码被破解的风险。
在MySQL中,定期更换密码可以通过定时任务来实现,例如使用cron
工具来定时执行更换密码的命令。
以下是一个简单的例子:
① 编辑crontab文件以添加定时任务。
crontab -e
② 添加以下行来设置定时任务,比如每月的第一天凌晨1点更换密码。
0 1 1 * ? /usr/bin/mysqladmin -u root -p'oldpassword' password 'newpassword'
确保将oldpassword
替换为当前的MySQL root 用户密码,将newpassword
替换为你想要设定的新密码。
注意:
确保
mysqladmin
的路径正确。如果当前MySQL root 密码为空,可以省略
-p'oldpassword'
部分。新密码应该遵循安全最佳实践,包括使用复杂度和随机性的要求。
更改密码可能需要相应的权限,如果是在多用户系统上,请确保当前用户有执行这些操作的权限。
如果你使用的是MySQL 5.7或更新版本,可以使用
ALTER USER
语句来更改密码,例如:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
确保使用正确的SQL语法来匹配你的MySQL版本。
- 禁用或限制默认的管理员账户,避免使用通用的或已知的管理员用户名root。
要在MySQL中禁用或限制默认的管理员账户(如 root 用户),你可以创建一个新的管理员账户并授予适当的权限,然后禁用或删除默认的 root 账户。
以下是一个简化的步骤和示例代码:
① 创建一个新的管理员账户。
② 授予新账户足够的权限。
③ 禁用或删除默认的root账户。
示例代码:
-- 创建一个新的管理员账户
CREATE USER 'new_admin'@'localhost' IDENTIFIED BY 'StrongPassword!';
-- 授予新账户所有权限
GRANT ALL PRIVILEGES ON *.* TO 'new_admin'@'localhost' WITH GRANT OPTION;
-- 刷新权限使更改生效
FLUSH PRIVILEGES;
-- 禁用root账户(可选)
RENAME USER 'root'@'localhost' TO 'root'@'localhost' DISABLE;
-- 或者删除root账户(如果安全)
-- DROP USER 'root'@'localhost';
在实际操作中,你应该选择一个安全的密码为新用户设置密码,并考虑是否需要删除默认的 root 账户。禁用 root 账户可以增加一层安全性,但同时也可能导致你无法从 root 账户访问服务器,除非你有其他的备用方式。记得在操作前备份相关的配置信息。
2.2、访问授权与权限管理
- 阿里云服务器的安全组只允许特定的ip访问。
https://jingyan.baidu.com/article/c275f6ba101c72e33c75676e.html
- mysql给用户分配地址权限:只允许特定的IP地址或网络段进行访问。
在MySQL中,您可以通过GRANT
语句来给用户分配特定的访问权限,包括IP地址权限。
以下是一个示例代码,展示如何仅允许特定的IP地址或网段访问数据库服务器:
-- 假设您已经有一个用户'myuser'@'%',并希望限制其只能从特定的IP地址或网段访问
-- 从单独的IP地址(例如192.168.1.100)授予权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'192.168.1.100';
-- 从整个子网段(例如192.168.1.0/24)授予权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'192.168.1.%';
-- 刷新权限使变更生效
FLUSH PRIVILEGES;
请确保替换mydatabase
为您想要授权的数据库名,myuser
为您的用户名,以及IP地址或网段为您想要允许的地址。
注意:在实际操作中,应该避免使用GRANT ALL PRIVILEGES
,而应该只授予必要的最小权限,以保持安全性。
2.3、备份方面
- 将数据库的数据进行定期备,并且放到一个安全的地方。
为了定期备份MySQL数据库并将其放在一个安全的地方,你可以使用mysqldump
命令行工具来创建数据库的SQL备份文件,然后使用rsync
或其他文件同步工具将其同步到安全的服务器或位置。
以下是一个简单的脚本示例,展示如何自动执行这些步骤:
#!/bin/bash
# 配置变量
BACKUP_DIR="/path/to/your/backup/directory"
DB_USER="your_db_username"
DB_PASSWORD="your_db_password"
DB_NAME="your_database_name"
# 创建备份
mkdir -p "$BACKUP_DIR"
mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_DIR/$DB_NAME-$(date +%Y%m%d%H%M%S).sql"
# 将备份文件同步到安全的地方(请替换以下命令中的[security_server]为你的安全服务器地址)
rsync -avz --delete "$BACKUP_DIR" [security_server]:/path/to/your/backup/directory
# 删除旧的备份(保留最新的3个备份)
cd "$BACKUP_DIR"
ls -t | tail -n +4 | xargs rm -f
确保将脚本中的变量(BACKUP_DIR
, DB_USER
, DB_PASSWORD
, DB_NAME
)替换为你的实际配置。
这个脚本首先创建了一个包含当前日期时间的备份文件,然后使用rsync
将备份同步到安全的服务器。最后,它删除除最新的3个备份文件以外的所有旧备份文件。
你可以将这个脚本添加到你的crontab
中以定期执行备份:
crontab -e
然后添加一行以设置你的备份计划,例如每天凌晨1点执行:
0 1 * * * /path/to/your/backup/script.sh
确保给脚本可执行权限:
chmod +x /path/to/your/backup/script.sh
请注意,你需要根据你的实际环境调整这些命令,并确保rsync
和mysqldump
在你的系统上可用。同时,保护好你的数据库凭证,并确保只有授权的人可以访问你的安全服务器。
参考链接:https://blog.csdn.net/mynameisghr/article/details/137072228