You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

方法一:撤销非管理员用户的目标数据库权限

这是最精准的方式,仅限制用户对指定数据库的访问,不影响其他权限:

  1. 查询拥有目标数据库权限的用户:
SELECT user, host FROM mysql.db WHERE db = 'your_target_db';
  1. 逐个撤销用户权限:
REVOKE ALL PRIVILEGES ON your_target_db.* FROM 'user_name'@'host_name';
  1. 刷新权限生效:
FLUSH PRIVILEGES;

如果有多个目标数据库,可循环执行上述命令;多服务器可编写shell脚本批量处理。


方法二:锁定关联用户账户

如果某些用户仅访问目标数据库,可直接锁定其账户,彻底禁止登录:

  1. 锁定账户:
ALTER USER 'user_name'@'host_name' ACCOUNT LOCK;
  1. 后续恢复时解锁:
ALTER USER 'user_name'@'host_name' ACCOUNT UNLOCK;

方法三:移走数据库文件(兼顾空间释放)

如果目标数据库占用大量空间,可将文件移至临时存储,既限制访问又节省服务器空间:

  1. 停止MySQL服务:
systemctl stop mysqld
  1. 备份数据库文件:
cp -r /var/lib/mysql/your_target_db /backup/storage/
  1. 移走原数据库文件:
mv /var/lib/mysql/your_target_db /tmp/
  1. 重启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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:10:09