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

MySQL默认权限用户可执行CREATE DATABASE问题及只读用户创建咨询

MySQL只读用户创建与权限问题排查

权限异常原因澄清

MySQL 8.0及后续版本中,CREATE USER语句仅完成用户创建操作,新用户默认无任何权限——既没有SELECT权限,也没有CREATE DATABASE权限。你遇到的异常情况,大概率是以下原因之一:

  • 误操作给该用户授予了全局CREATE权限(例如执行过GRANT CREATE ON *.* TO 'reader'@'%';)
  • 自定义了MySQL实例的权限配置模板(官方Docker镜像默认无此设置)
  • 操作时混淆了root账号与新建用户的身份

创建仅读取information_schema/sys库的只读用户

按以下步骤操作,可创建严格只读的限定用户:

  1. 创建用户(若未创建):
CREATE USER 'reader'@'%' IDENTIFIED BY 'reader_password';
-- 如需限制登录IP,将'%'替换为具体IP,例如'192.168.1.100'
  1. 授予只读权限:
-- 授予information_schema所有表的SELECT权限
GRANT SELECT ON information_schema.* TO 'reader'@'%';
-- 授予sys库所有表的SELECT权限
GRANT SELECT ON sys.* TO 'reader'@'%';
  1. 刷新权限使配置生效:
FLUSH PRIVILEGES;
  1. 验证权限有效性:
    切换至reader用户后执行以下语句:
-- 查看当前用户权限列表
SHOW GRANTS FOR CURRENT_USER;
-- 尝试创建数据库,应返回权限错误
CREATE DATABASE test_db;
-- 尝试读取目标库表,应正常返回结果
SELECT * FROM information_schema.tables LIMIT 10;

额外注意事项

  • 优先限制用户登录IP,避免@'%'的宽泛授权,提升安全性
  • MySQL 8.0+版本无需使用PASSWORD()函数,直接用IDENTIFIED BY设置密码即可
  • 禁止给该用户授予任何全局权限(ON *.*的授权),防止越权操作

内容的提问来源于stack exchange,提问作者michal.kyjovsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:02:36