sql权限管理遵循最小权限原则,需按场景创建用户、限制登录源、细粒度授权、角色化管理及定期审计。

sql权限管理的核心是“最小权限原则”——只给用户完成任务所必需的权限,不多不少。直接用GRANT ALL或长期保留root权限操作,是生产环境最常见也最危险的疏忽。
创建用户并限制登录来源
新建用户时就应明确其使用场景,避免泛用'%'通配符开放所有IP访问。
- 本地管理账号(如运维):
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'strong_pass123'; - 应用连接账号(如java服务):
CREATE USER 'app_user'@'192.168.10.%' IDENTIFIED BY 'app_secret456'; - 禁止匿名用户:
DROP USER ''@'localhost';(mysql默认可能有空用户名)
按需授权:表级、列级与动态权限控制
权限粒度越细,风险越可控。优先用表级授权,必要时再细化到列或使用行级策略(需结合视图或条件注释)。
- 只读报表账号:
GRANT select ON sales_db.reports TO 'reporter'@'%'; - 写入但不可删数据:
GRANT INSERT, UPDATE ON app_db.logs TO 'logger'@'10.0.2.%'; - 敏感字段隔离(如手机号):
GRANT SELECT(id, name, created_at) ON users TO 'frontend'@'%'; - 回收权限不手软:
REVOKE delete ON *.* FROM 'dev_user'@'%';
角色化管理简化权限维护
MySQL 8.0+ 支持角色(ROLE),适合团队协作场景。把权限打包成角色,再分配给用户,后续调整只需改角色,不用逐个用户操作。
企业管理系统2.0
0
本系统有两种操作用户,一种为普通用户,一种为管理员。普通用户可以查看公告、查看规章制度、更改个人密码、查看部门信息、查看员工信息、发表留言、进行工作总结等等;管理员可以对规章制度管理、系统权限设置、操作记录查看、部门管理、员工管理、任务分配、留言管理、工资管理、合同管理等登录帐号admin 密码 admin
0 - 创建角色:
CREATE ROLE 'analyst_role', 'etl_role'; - 赋予权限:
GRANT SELECT, SHOW VIEW ON dw.* TO 'analyst_role'; - 分配角色:
GRANT 'analyst_role' TO 'alice'@'%'; - 激活角色(会话级):
SET ROLE 'analyst_role';或设为默认:SET default ROLE 'analyst_role' TO 'alice'@'%';
定期审计与权限清理
权限不是一劳永逸的配置。建议每季度执行一次检查,重点看三类风险点。
- 查闲置账号:
SELECT user, host, account_locked, password_last_changed FROM mysql.user WHERE password_last_changed - 查高危权限:
SELECT * FROM mysql.role_edges WHERE role IN ('root', 'dba');(或查SELECT_priv='Y'等全局权限) - 查未授权库:
SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql','performance_schema','sys');确保每个业务库都有明确归属
基本上就这些。权限管理不复杂,但容易忽略细节。关键不是“能不能做”,而是“该不该做”和“谁来做”。每次授权前多问一句:这个权限今天必要吗?下周还必要吗?