如何在RHEL环境下临时限制MySQL 8.0数据库仅本人可访问?
临时限制MySQL数据库访问的实操方案(仅保留管理员权限)
前置准备
操作前务必备份权限相关表,避免误操作导致权限混乱:
mysqldump mysql user db tables_priv columns_priv > /backup/mysql_permissions_$(date +%Y%m%d).sql
同时建议备份目标数据库的结构和数据,防止后续需要恢复:
mysqldump --databases your_target_db > /backup/your_target_db_$(date +%Y%m%d).sql
方法一:撤销非管理员用户的目标数据库权限
这是最精准的方式,仅限制用户对指定数据库的访问,不影响其他权限:
- 查询拥有目标数据库权限的用户:
SELECT user, host FROM mysql.db WHERE db = 'your_target_db';
- 逐个撤销用户权限:
REVOKE ALL PRIVILEGES ON your_target_db.* FROM 'user_name'@'host_name';
- 刷新权限生效:
FLUSH PRIVILEGES;
如果有多个目标数据库,可循环执行上述命令;多服务器可编写shell脚本批量处理。
方法二:锁定关联用户账户
如果某些用户仅访问目标数据库,可直接锁定其账户,彻底禁止登录:
- 锁定账户:
ALTER USER 'user_name'@'host_name' ACCOUNT LOCK;
- 后续恢复时解锁:
ALTER USER 'user_name'@'host_name' ACCOUNT UNLOCK;
方法三:移走数据库文件(兼顾空间释放)
如果目标数据库占用大量空间,可将文件移至临时存储,既限制访问又节省服务器空间:
- 停止MySQL服务:
systemctl stop mysqld
- 备份数据库文件:
cp -r /var/lib/mysql/your_target_db /backup/storage/
- 移走原数据库文件:
mv /var/lib/mysql/your_target_db /tmp/
- 重启MySQL服务:
systemctl start mysqld
此时其他用户访问该数据库会报错,你需要访问时,可停止MySQL,将文件移回原目录后重启即可。
验证与监控
- 验证自身权限:登录管理员账户,执行
USE your_target_db;和查询操作,确认正常访问。 - 监控访问请求:开启通用日志排查是否有访问需求:
SET GLOBAL general_log = ON; SHOW VARIABLES LIKE 'general_log_file';
查看日志文件,若发现有合法访问请求,及时恢复对应权限或数据库。
恢复操作
- 若使用方法一恢复:重新授予权限
GRANT ALL PRIVILEGES ON your_target_db.* TO 'user_name'@'host_name'; FLUSH PRIVILEGES;
- 若使用方法二恢复:解锁账户(见方法二步骤2)
- 若使用方法三恢复:停止MySQL,将备份的数据库文件移回
/var/lib/mysql/目录,重启服务即可。
内容的提问来源于stack exchange,提问作者mia
相关产品推荐
相关产品推荐

