GRANT 系统权限 TO 用户/角色 [WITH ADMIN OPTION];
WITH ADMIN OPTION:允许被授权者把该系统权限继续转授其他用户。
| 权限 | 说明 | 风险等级 |
|---|---|---|
| CREATE SESSION | 登录数据库会话必备权限,新建用户必须授予 | 低 |
| CREATE TABLE | 在自己的模式下创建表 | 低 |
| CREATE VIEW / CREATE PROCEDURE | 自建模式创建视图、存储过程 | 低 |
| CREATE USER | 创建数据库用户 | 高 |
| SELECT ANY TABLE | 查询实例内所有模式全部表 | 极高,业务账号禁止授予 |
| ALTER ANY TABLE | 修改任意模式下任意表结构 | 极高 |
| DROP ANY TABLE | 删除全库任意表,高危 | 极高 |
| CREATE ANY TABLE | 任意模式下创建表 | 高 |
| BACKUP DATABASE | 执行数据库备份 | 高 |
示例:SYSDBA授权testuser001创建表的权限,并且可以转授权给其他用户(WITH ADMIN OPTION)。
在testuser001可以查询到创建表和转授权。
使用testuser001授权创建表给testuser002。
在testuser002可以查询到创建表的权限。
示例:SYSDBA收回testuser001创建表的转授权限。
在testuser001可以查询到已经没有转授创建表的权限。
SYSDBA收回testuser002创建表的权限。
在testuser002可以查询到已经没有创建表的权限。
示例:SYSDBA把SYSDBA.test表的全部权限授给用户testuser001。
在testuser001用户下可以查询到SYSDBA.test表中内容。
示例:SYSDBA把SYSDBA.test表的全部权限从用户testuser001回收。
在testuser001用户没有查询权限,无法查询到SYSDBA.test表中内容。
| 角色 | 权限说明 | 适用分配场景 |
|---|---|---|
| DBA | 最高权限,几乎全部系统权限、ANY 权限,可建用户、建表空间、备份恢复 | 只给专职 DBA 运维账号;严禁业务应用账号 |
| RESOURCE | 允许在自己的模式创建表、视图、存储过程、索引;不能创建用户、不能操作其他模式对象 | 业务系统账号,需要自己建业务对象时分配 |
| PUBLIC | 所有新建用户自动被授予 PUBLIC 角色;包含基础公共对象访问权限;不建议回收 PUBLIC 角色;GRANT xxx TO PUBLIC会把权限给到全库所有用户,谨慎使用 | 默认自带,一般不用手动授予 |
| VTI | 查询 V$ 开头动态性能视图(会话、等待事件、实例状态监控视图) | 运维、监控采集账号;普通业务程序不给 |
| SOI | 查询 SYS 开头非安全审计类系统字典表 | 运维开发人员,查看元数据;业务应用不需要 |
| SVI | 基础 V 类系统视图查询权限 | 运维人员,普通业务账号不分配 |
创建角色test_role1:CREATE ROLE test_role1;
授予查询SYSDBA.test权限:GRANT SELECT ON SYSDBA.test TO test_role1;
删除角色test_role1:DROP ROLE test_role1;
禁用角色:SP_SET_ROLE(‘TEST_ROLE1’,0);
启用角色:SP_SET_ROLE(‘TEST_ROLE1’,1);
将角色TEST_ROLE1的权限授予testuser001
将角色TEST_ROLE1的权限从testuser001回收
首先再dm.ini文件中将GRANT_SCHEMA设置为1。
将testuser001模式下所有表的查询权限授予testuser002;
创建表test_schema,并插入测试数据。
从testuser002可以查询到插入数据。
收回testuser002对testuser001模式下所有表的查询权限。
在testuser002下无法查询testuser001模式下表。
| 项目 | 三权分立 | 四权分立 |
|---|---|---|
| 管理角色 | DBA、SSO、AUDITOR | DBA、DBO、SSO、AUDITOR |
| DBA 权限 | 系统运维 + 创建对象 + 数据增删改查,拥有 ANY 权限 | 仅系统运维;取消 ANY 权限,不能操作业务对象和业务数据 |
| 对象/数据操作 | DBA 完成 | 交给新增 DBO 对象操作员完成 |
| SSO、AUDITOR | 负责安全策略、审计 | 职责完全不变 |
| 启用条件 | 默认,普通版本可用 | DM 安全版本,PRIV_FLAG=1 |
CREATE USER USER001 IDENTIFIED BY "Dameng123";
GRANT CREATE SESSION TO USER001; --登录会话权限
GRANT RESOURCE TO USER001; --允许在自己模式创建业务对象
GRANT SELECT ON V$DM_INI TO USER001;
CREATE USER USER002 IDENTIFIED BY "Dameng123";
GRANT CREATE SESSION TO USER002;
--按需授予对象权限
GRANT SELECT,INSERT,UPDATE,DELETE ON biz_user.t1 TO USER002;
迁移时需要导出源库用户、角色、系统权限、对象权限、模式权限,再在目标端执行。
# 导出所有用户、角色、权限元数据
dexp USERID=SYSDBA/SYSDBA FILE=user_priv.dmp LOG=user_priv.log FULL=N OWNER=ALL ROLES=Y PERMISSION=Y
# 在目标端 dimp 导入,就会重建用户、角色、授予对应系统权限与角色。
SELECT 'GRANT '||PRIVILEGE||' TO '||USERNAME||';' FROM USER_SYS_PRIVS;
(2)查询用户拥有的角色
SELECT 'GRANT '||GRANTED_ROLE||' TO '||USERNAME||';' FROM USER_ROLE_PRIVS;
(3)查询用户拥有的对象权限
SELECT 'GRANT '||PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME||' TO '||GRANTEE||';'
FROM USER_TAB_PRIVS;
文章
阅读量
获赞
