数据库权限管理是运维、开发、DBA必备核心技能,核心包含用户创建、授权、查权、回收权限、用户管理五大核心操作。本文整理 MySQL、Oracle 两大主流数据库的权限命令,附带可直接执行的实操示例,排版清晰、适配落地,可直接用于学习和工作备查。
核心前置说明
-
所有命令均为标准生产环境语法,兼容主流版本
-
区分全局权限、库级权限、表级权限,精准管控权限粒度
-
附带生产最佳实践与避坑注意事项
一、MySQL 权限管理(最常用)
1.1 创建数据库用户
语法格式
CREATE USER '用户名'@'访问地址' IDENTIFIED BY '密码';
参数说明
-
localhost:仅本机登录 -
%:允许任意IP远程登录 -
192.168.%:指定网段登录
实操示例
# 仅本地登录用户
CREATE USER 'test'@'localhost' IDENTIFIED BY 'Test@123';
# 全网远程登录用户(生产常用)
CREATE USER 'test'@'%' IDENTIFIED BY 'Test@123';
# 限定内网网段登录
CREATE USER 'test'@'192.168.%' IDENTIFIED BY 'Test@123';
1.2 权限授权 GRANT(核心)
通用语法
GRANT 权限列表 ON 数据库.表 TO '用户名'@'访问地址' [WITH GRANT OPTION];
权限粒度分级:全局(*.*) > 库级(库名.*) > 表级(库名.表名)
实操示例
# 1. 单表精准授权(仅查询)
GRANT SELECT ON db_user.tb_user TO 'test'@'%';
# 2. 库级读写权限(开发常用)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER ON db_user.* TO 'test'@'%';
# 3. 库级全部权限(不含转授权限)
GRANT ALL PRIVILEGES ON db_user.* TO 'test'@'%';
# 4. 全局最高权限(管理员账号)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
关键字说明:WITH GRANT OPTION表示该用户可将自身权限转授给其他用户,生产环境非管理员禁止开启。
1.3 刷新权限
MySQL修改用户、授权、回收权限后,必须刷新权限生效
FLUSH PRIVILEGES;
1.4 查看用户权限
# 查看指定用户权限
SHOW GRANTS FOR 'test'@'%';
# 查看当前登录用户权限
SHOW GRANTS;
# 查看所有数据库用户
SELECT user,host FROM mysql.user;
1.5 回收权限 REVOKE
语法格式
REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'访问地址';
实操示例
# 回收删除权限
REVOKE DELETE ON db_user.* FROM 'test'@'%';
# 回收用户所有权限
REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'test'@'%';
# 刷新权限生效
FLUSH PRIVILEGES;
1.6 用户密码修改与删除
# 修改用户密码
ALTER USER 'test'@'%' IDENTIFIED BY 'New@456';
FLUSH PRIVILEGES;
# 删除用户
DROP USER IF EXISTS 'test'@'%';
1.7 MySQL 常用权限清单
| 权限关键字 | 权限作用 |
|---|---|
| SELECT | 查询数据 |
| INSERT | 插入数据 |
| UPDATE | 更新数据 |
| DELETE | 删除数据 |
| CREATE/DROP | 创建/删除库、表 |
| ALTER | 修改表结构 |
| INDEX | 创建、删除索引 |
| ALL PRIVILEGES | 所有权限 |
二、Oracle 权限管理
Oracle权限分为 系统权限(登录、建表等系统操作)和 对象权限(操作其他用户表/视图),支持角色批量授权,更适合企业级精细化管控。
2.1 创建用户(指定表空间)
生产环境必须指定表空间、临时表空间和存储配额
CREATE USER test
IDENTIFIED BY Test123
DEFAULT TABLESPACE USERS -- 默认表空间
TEMPORARY TABLESPACE TEMP -- 临时表空间
QUOTA 100M ON USERS; -- 最大使用100M存储空间
2.2 系统权限授权
系统权限:控制用户登录、创建数据库对象等系统级操作
# 基础登录权限(必备)
GRANT CREATE SESSION TO test;
# 开发常用权限(建表、视图、序列)
GRANT CREATE TABLE,CREATE VIEW,CREATE SEQUENCE TO test;
# 管理员最高权限
GRANT DBA TO test WITH ADMIN OPTION;
关键字说明:WITH ADMIN OPTION 允许转授系统权限
2.3 对象权限授权
对象权限:控制用户操作其他用户的表、视图等数据对象
# 授予查询、修改 scott 用户 emp 表的权限,可转授他人
GRANT SELECT,UPDATE ON scott.emp TO test WITH GRANT OPTION;
# 授予单表全部操作权限
GRANT ALL ON scott.emp TO test;
2.4 角色授权(Oracle核心特性)
角色用于批量打包权限,统一授权用户,简化权限管理
系统内置常用角色
-
CONNECT:基础登录权限 -
RESOURCE:开发人员建表、建对象权限 -
DBA:数据库管理员全权限
实操示例
# 给用户分配开发角色(生产开发标配)
GRANT CONNECT,RESOURCE TO test;
# 自定义角色(精细化权限分组)
CREATE ROLE dev_role;
GRANT SELECT,INSERT,UPDATE ON scott.emp TO dev_role;
GRANT dev_role TO test;
2.5 查看用户权限
# 查看系统权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE='TEST';
# 查看对象权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='TEST';
# 查看角色权限
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE='TEST';
2.6 回收权限与角色
# 回收系统权限
REVOKE CREATE TABLE FROM test;
# 回收对象权限
REVOKE UPDATE ON scott.emp FROM test;
# 回收角色权限
REVOKE RESOURCE FROM test;
2.7 用户管理(修改/删除/锁定)
# 修改用户密码
ALTER USER test IDENTIFIED BY New456;
# 锁定账号(禁用用户)
ALTER USER test ACCOUNT LOCK;
# 解锁账号
ALTER USER test ACCOUNT UNLOCK;
# 删除用户(CASCADE 强制删除用户所有对象)
DROP USER test CASCADE;
三、生产环境完整实操案例
3.1 MySQL 开发账号标准配置
# 1. 创建远程开发账号
CREATE USER 'dev'@'%' IDENTIFIED BY 'Dev@2026';
# 2. 授予业务库读写权限(禁止授予删除、改结构高危权限)
GRANT SELECT,INSERT,UPDATE ON business.* TO 'dev'@'%';
# 3. 刷新权限
FLUSH PRIVILEGES;
# 4. 查看权限确认
SHOW GRANTS FOR 'dev'@'%';
3.2 Oracle 开发账号标准配置
# 1. 创建用户并分配表空间
CREATE USER dev IDENTIFIED BY Dev2026
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP
QUOTA 500M ON USERS;
# 2. 分配开发基础角色
GRANT CONNECT,RESOURCE TO dev;
# 3. 授权业务表操作权限
GRANT SELECT,INSERT,UPDATE,DELETE ON scott.order_info TO dev;
四、生产环境权限最佳实践
-
最小权限原则:开发账号禁止授予
DBA、ALL PRIVILEGES高危权限,按需分配 -
禁止随意开启转授权限:
WITH GRANT OPTION、WITH ADMIN OPTION仅管理员使用 -
权限粒度精细化:优先表级授权,其次库级,尽量不使用全局授权
-
定期清理冗余账号:下线离职人员、废弃测试账号,规避安全风险
-
MySQL必刷权限:所有权限变更后必须执行
FLUSH PRIVILEGES
posted on
浙公网安备 33010602011771号