Oracle视图授权(with grant option)

本文详细介绍了Oracle数据库中的权限管理机制,特别是如何通过WITH GRANT OPTION实现权限传递,以及WITH ADMIN OPTION的区别。通过具体实例展示了如何避免因权限设置不当导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


模拟如下
create user a identified by a;
create user b identified by b;
create user c identified by c;

grant connect,resource to a;
grant connect,resource to b;
grant connect,resource to c;
grant create view to b;

conn a/a
create table t1 as select rownum rn from dual connect by level<10;
grant select on t1 to b;

conn b/b
create table t2 as select rownum rn from dual connect by level<10;
create view v1 as select * from a.t1 union all select * from t2;
grant select on v1 to c;

conn c/c
select * from b.v1;

用户a有一个基表,
用户b有用户a基表的查询权限,并创建了一个视图,
现在需要把用户b创建的视图,授权给用户c.

实际上grant select on v1 to c;命令执行会报错(ORA-01720).
那是因为a.t1的查询授权不能传递.

解决这个问题也很容易,在给b用户a.t1的授权中增加with grant option
create user a identified by a;
create user b identified by b;
create user c identified by c;

grant connect,resource to a;
grant connect,resource to b;
grant connect,resource to c;
grant create view to b;

conn a/a
create table t1 as select rownum rn from dual connect by level<10;
grant select on t1 to b with grant option;

conn b/b
create table t2 as select rownum rn from dual connect by level<10;
create view v1 as select * from a.t1 union all select * from t2;
grant select on v1 to c;

conn c/c

select * from b.v1;


【2】

虽然“授人以鱼,不如授之以渔”出自中国古语,但却不影响oracle精之其髓。oracle中授权使用:

grant create session to testuser;
  • 1

如果说这里被授予的权限“create session”是鱼,那“testuser”只能说是饿不死,还不能说吃得饱,或者说只修了身还没有养家经营的手段。

oracle授权中也有“渔”,这个渔决定了被授权用户是否能将权限继续授权给其他用户。只不过这里的oracle把“渔”细化了,分为两个:

with admin option

使用with admin option,被授权用户可将所获得的权限再次授予其它用户或角色,而且取消授权时不级联。例如:

grant create session to user_a with admin option;
  • 1

则用户user_a用户拥有了“create session”权限,然后用户user_a操作:

grant create session to user_b;
  • 1

则user_b也拥有了“create session”权限。 
如果系统管理员要回收user_a的权限,则user_b的权限仍然保留,但管理员可以显式回收user_b的权限:

revoke create session from user_b;
  • 1

with grant option

使用with grant option。被授权用户可将所获得的权限再次授予其它用户或角色,并且权限的取消是级联的。级联的意思是,如果user_a使用“with grant option”语句将权限又授予了user_b,当管理员回收user_a的权限时,则user_b的权限也会被回收。但管理员不可以显式回收用户user_b的权限。


<think>好的,用户想了解Oracle数据库中与管理员选项相关的权限或命令。首先,我需要回忆一下Oracle中的权限管理机制,特别是管理员选项(ADMIN OPTION)的作用。管理员选项允许被授予权限的用户进一步将权限授予其他用户或角色,这在权限管理中非常重要。 接下来,用户可能想知道具体的命令,比如如何授予带有管理员选项的权限。例如,使用GRANT命令时加上WITH ADMIN OPTION子句。需要给出具体的SQL示例,比如GRANT CREATE SESSION TO user1 WITH ADMIN OPTION;,这样用户能清楚语法结构。 然后,用户可能关心如何撤销带有管理员选项的权限。这时候需要使用REVOKE命令,但要注意级联撤销的问题。需要解释当使用ADMIN OPTION授予的权限被撤销时,不会级联影响其他被授予的用户,这与WITH GRANT OPTION不同。 此外,系统权限和角色管理也是重点。比如常见的DBA、SYSDBA和SYSOPER角色,这些角色的权限范围和区别需要明确说明。例如,SYSDBA拥有最高权限,可以执行启动、关闭数据库等操作,而SYSOPER权限较低,主要用于日常维护。 用户可能还需要了解如何查询已授予管理员选项的权限,这时候可以介绍数据字典视图如DBA_SYS_PRIVS和ROLE_SYS_PRIVS,并提供查询示例,帮助用户实际操作。 另外,权限管理的注意事项也很重要。比如管理员权限的分配需谨慎,避免权限扩散,以及定期审计权限使用情况。这些最佳实践能帮助用户避免安全风险。 最后,结合用户提供的引用内容,引用[1]和[2]提到了Oracle的安装、克隆和ORADIM命令,虽然与权限管理不直接相关,但可能需要考虑在管理权限时如何与这些工具结合使用。例如,ORADIM用于创建和管理Windows上的Oracle实例,可能与权限配置有关联,但具体细节可能需要参考相应文档。 综合以上内容,需要组织成一个结构清晰的回答,涵盖权限授予、撤销、角色管理、查询命令和注意事项,同时确保使用正确的LaTeX格式和引用标识。</think>### Oracle数据库管理员权限及命令详解 #### 一、管理员权限的核心概念 1. **ADMIN OPTION** 在Oracle中,当使用`WITH ADMIN OPTION`授予系统权限或角色时,被授权用户可将该权限/角色再次授予其他用户。例如: ```sql GRANT CREATE SESSION TO user1 WITH ADMIN OPTION; -- 允许user1将此权限授予他人 ``` 此权限常用于分布式权限管理场景[^1]。 2. **系统权限分类** - **DBA角色**:包含大多数数据库管理权限(如`CREATE TABLE`、`ALTER DATABASE`) - **SYSDBA/SYSOPER**: - `SYSDBA`:最高权限,可执行`STARTUP`、`SHUTDOWN`及所有DBA操作 - `SYSOPER`:受限管理权限,仅允许基础维护操作(如备份、日志切换) #### 二、关键操作命令 1. **权限授予与撤销** ```sql -- 授予系统权限并允许传播 GRANT CREATE ANY TRIGGER TO admin_user WITH ADMIN OPTION; -- 撤销权限(不级联) REVOKE CREATE ANY TRIGGER FROM admin_user; ``` 注意:使用`ADMIN OPTION`授予的权限被撤销时,不会影响被转授的用户[^2]。 2. **角色管理** ```sql -- 创建角色并分配权限 CREATE ROLE audit_admin; GRANT SELECT ANY TABLE, INSERT ANY TABLE TO audit_admin; -- 将角色赋予用户并允许转授 GRANT audit_admin TO user2 WITH ADMIN OPTION; ``` #### 三、权限查询方法 1. **查看用户权限** ```sql SELECT * FROM DBA_SYS_PRIVS WHERE grantee = 'USER1'; SELECT * FROM DBA_ROLE_PRIVS WHERE grantee = 'USER1'; ``` 2. **追踪权限授予链** ```sql SELECT * FROM DBA_TAB_PRIVS WHERE grantor = 'ADMIN_USER' AND grantable = 'YES'; ``` #### 四、操作注意事项 1. **权限最小化原则** - 仅对必要用户分配`WITH ADMIN OPTION` - 定期执行权限审计: ```sql SELECT * FROM DBA_SYS_PRIVS WHERE admin_option = 'YES'; ``` 2. **高危权限示例** | 权限名称 | 风险等级 | 典型应用场景 | |------------------------|----------|-----------------------| | `ALTER DATABASE` | 高危 | 数据库结构变更 | | `GRANT ANY PRIVILEGE` | 极高危 | 权限管理系统 | | `DROP ANY TABLE` | 高危 | 数据清理操作 | 3. **与系统工具集成** 在Windows平台使用`ORADIM`管理实例时,需注意权限继承关系: ```bat ORADIM -NEW -SID ORCL -SYSPWD <password> -STARTMODE auto ``` 该命令创建的实例会继承执行用户的权限配置[^2]。 #### 五、典型应用场景 1. **多租户环境** 在CDB/PDB架构中,通过`COMMON_USER`分配跨容器管理权限: ```sql CREATE USER c##admin IDENTIFIED BY pass CONTAINER=ALL; GRANT SET CONTAINER TO c##admin WITH ADMIN OPTION; ``` 2. **自动化运维** 结合`DBMS_SCHEDULER`创建作业时,需确保执行用户具有`CREATE JOB`权限: ```sql BEGIN DBMS_SCHEDULER.create_job( job_name => 'nightly_export', job_type => 'EXECUTABLE', job_action => '/scripts/export.sh'); END; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值