创建只读用户需先创建用户并授予select权限,如create user 'readonly_user'@'%' identified by 'password'; grant select on database_name.* to 'readonly_user'@'%'; flush privileges; 可限制特定表或ip,避免赋予insert、update等权限,测试登录后查询正常且写操作被拒即成功。

在 MySQL 中配置只读用户,主要是通过创建一个新用户或修改现有用户权限,授予其对指定数据库或表的 SELECT 权限,同时不赋予任何写操作权限(如 INSERT、UPDATE、DELETE、DROP 等)。以下是具体操作步骤。
创建只读用户并授权
登录 MySQL 管理员账户(如 root),执行以下命令:
1. 创建用户(可选):
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'your_password';说明:创建用户名为 readonly_user,允许从任意主机连接。如果只允许本地访问,可将 '%' 改为 'localhost'。
2. 授予只读权限:
GRANT SELECT ON database_name.* TO 'readonly_user'@'%';说明:将 database_name 替换为目标数据库名,该命令授予用户对该数据库下所有表的查询权限。
3. 刷新权限:
FLUSH PRIVILEGES;确保权限立即生效。
限制用户权限范围
若需更精细控制,可针对特定表设置只读:
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
也可批量对多个数据库授权,重复执行 GRANT 命令即可。
注意:不要执行如下赋权操作,以免破坏只读属性:
- INSERT
- UPDATE
- DELETE
- ALTER
- DROP
- CREATE
验证只读用户权限
使用新用户登录测试:
mysql -u readonly_user -p进入后尝试执行 SELECT 查询,确认可以正常读取数据;再尝试 INSERT 或 UPDATE 操作,应提示“ERROR 1142 (42000): SELECT, INSERT, UPDATE command denied”等权限拒绝信息,表示配置成功。
常见问题与建议
1. 权限未生效?检查是否执行了 FLUSH PRIVILEGES。
2. 远程无法连接?确认用户 host 是否为 % 或对应 IP,并检查 MySQL 是否绑定远程访问端口(bind-address)及防火墙设置。
3. 安全建议:避免使用弱密码,生产环境建议限制用户仅从可信 IP 登录,例如 'readonly_user'@'192.168.1.100'。
基本上就这些,配置 MySQL 只读用户核心在于精准授权,只给 SELECT,不额外开放写权限,就能有效保障数据安全。










