目录
[2.2 验证权限:](#2.2 验证权限:)
[2.3 安全建议:](#2.3 安全建议:)
前言:工作过程当中,如果开放你数据库的读写权限,怕引起安全问题或者数据被篡改。对方又要你数据库访问的读权限。


要在MySQL中创建一个只能进行查询(SELECT)的用户,请使用以下脚本。根据你的MySQL版本和需求,有两种常见方法:
1、方法1:创建用户并授予特定数据库的只读权限(推荐)
-- 创建新用户(替换 'readonly_user' 和 'YourPassword123!')
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'YourPassword123!';
-- 授予对指定数据库的 SELECT 权限(替换 your_database_name)
GRANT SELECT ON your_database_name.* TO 'readonly_user'@'%';
-- 刷新权限使更改生效
FLUSH PRIVILEGES;
2、方法2:创建用户并授予所有数据库的只读权限(谨慎使用)
-- 创建新用户(替换凭证)
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'YourPassword123!';
-- 授予全局 SELECT 权限
GRANT SELECT ON *.* TO 'readonly_user'@'localhost';
FLUSH PRIVILEGES;
2.1关键参数说明:
参数 | 说明 |
---|---|
'readonly_user'@'%' |
用户名 + 访问来源(% 允许任意IP访问,localhost 仅限本地) |
IDENTIFIED BY |
设置强密码(需包含字母、数字、特殊字符) |
your_database_name.* |
权限作用范围(替换为实际数据库名,如 sales_db.* ) |
GRANT SELECT |
仅授权查询权限(无INSERT/UPDATE/DELETE等写权限) |
2.2 验证权限:
-- 查看用户权限
SHOW GRANTS FOR 'readonly_user'@'%';
输出应类似:
GRANT SELECT ON `your_database_name`.* TO `readonly_user`@`%`
2.3 安全建议:
-
最小权限原则:只授予必要的数据库权限
-
访问限制:
-
生产环境建议用
'user'@'192.168.1.%'
限制IP段 -
远程访问时用
'user'@'%'
但需配置防火墙
-
-
密码策略:
ALTER USER 'readonly_user'@'%' WITH PASSWORD EXPIRE INTERVAL 90 DAY; -- 强制90天修改密码
-
撤销权限(如果需要):
REVOKE SELECT ON your_database_name.* FROM 'readonly_user'@'%'; DROP USER 'readonly_user'@'%';
⚠️ 注意:执行脚本需具有
CREATE USER
和GRANT OPTION
权限的管理员账户。