MySQL原生账号权限管理
MySQL 个人账号规划
权限组及用户信息描述
在新的用户规划中,将会创建读权限与读写权限的账号,适应不同的用户,新的权限账号分组:
| 权限组 | 涉及数据库 | 权限描述 | 权限人群 |
|---|---|---|---|
| group_readonly | 读 gk-prod、kcc-prod、xxl_job 库 | 只读权限组 | 开发、测试、审计人员 |
| group_readwrite | 读 gk-prod、kcc-prod、xxl_job 库,不能更改表结构 | 读写权限组 | 应用支持、DevOps |
更改步骤将会从PreProd环境开始测试,测试没有问题之后再应用到Prod环境上.
创建权限组及权限
A) 创建权限组
-- A.1 创建只读组 (group_readonly)
CREATE ROLE IF NOT EXISTS `group_readonly`;
-- A.2 创建读写组 (group_readwrite)
CREATE ROLE IF NOT EXISTS `group_readwrite`;
B)为“权限组”分配权限
-- B.1 分配 'group_readonly' 权限
-- 授予对三个业务库的只读权限
GRANT SELECT ON `gk-prod`.* TO `group_readonly`;
GRANT SELECT ON `kcc-prod`.* TO `group_readonly`;
GRANT SELECT ON `xxl_job`.* TO `group_readonly`;
-- 授予查看系统状态和慢查询的权限
GRANT SELECT ON `performance_schema`.* TO `group_readonly`;
GRANT SELECT ON `sys`.* TO `group_readonly`;
GRANT PROCESS ON *.* TO `group_readonly`; -- 允许 SHOW PROCESSLIST-- B.2 分配 'group_readwrite' 权限
-- (最佳实践) 首先,让 'group_readwrite' 继承 'group_readonly' 的所有权限
GRANT `group_readonly` TO `group_readwrite`;-- 在只读的基础上,额外添加 DML(写)权限
-- (注意:这里不包含 CREATE, ALTER, DROP 等 DDL 权限)
GRANT INSERT, UPDATE, DELETE ON `gk-prod`.* TO `group_readwrite`;
GRANT INSERT, UPDATE, DELETE ON `kcc-prod`.* TO `group_readwrite`;
GRANT INSERT, UPDATE, DELETE ON `xxl_job`.* TO `group_readwrite`;
C)创建用户并分配到“只读组” (group_readonly)
-- 用户: fu.bai
CREATE USER 'fu.bai'@'%' IDENTIFIED BY 'REPLACE_WITH_A_SECURE_PASSWORD_1';
GRANT `group_readonly` TO 'fu.bai'@'%';
SET DEFAULT ROLE `group_readonly` TO 'fu.bai'@'%';
D)创建用户并分配到“读写组” (group_readwrite)
-- 用户: lubao.xu
CREATE USER 'lubao.xu'@'%' IDENTIFIED BY 'REPLACE_WITH_A_SECURE_PASSWORD_7';
GRANT `group_readwrite` TO 'lubao.xu'@'%';
SET DEFAULT ROLE `group_readwrite` TO 'lubao.xu'@'%';FLUSH PRIVILEGES;
E)授予管理员管理权限
让 admin 和 sys_admin 账号有权将这些“组”分配给未来的新成员。
-- 授予 admin 角色管理权限
GRANT `group_readonly`, `group_readwrite` TO 'admin'@'%' WITH ADMIN OPTION;
-- 授予 sys_admin 角色管理权限
GRANT `group_readonly`, `group_readwrite` TO 'prod_rds'@'%' WITH ADMIN OPTION;-- 刷新权限
FLUSH PRIVILEGES;
维护方式(新成员&授权新库)
在有新成员加入或者需要调整用户的权限时候,使用如下方式进行调整.
A. 当有新开发入职时 (只读):
CREATE USER 'new_dev_user'@'%' IDENTIFIED BY 'REPLACE_WITH_A_SECURE_PASSWORD';
GRANT `group_readonly` TO 'new_dev_user'@'%';
SET DEFAULT ROLE `group_readonly` TO 'new_dev_user'@'%';
B. 需要访问新的数据库
GRANT SELECT ON `new_db`.* TO `group_readonly`;
