In your multitenant container database (CDB) containing pluggable database (PDBs), you granted the CREATE TABLE privilege to the common user C # # A_ADMIN in root and all PDBs. You execute the following command from the root container:
SQL > REVOKE create table FROM C # # A_ADMIN;
What is the result?
A. It executes successfully and the CREATE TABLE privilege is revoked from C # # A_ADMIN in root only.
B. It fails and reports an error because the CONTAINER=ALL clause is not used.
C. It excludes successfully and the CREATE TABLE privilege is revoked from C # # A_ADMIN in root and all PDBs.
D. It fails and reports an error because the CONTAINER=CURRENT clause is not used.
E. It executes successfully and the CREATE TABLE privilege is revoked from C # # A_ADMIN in all PDBs.
Correct Answer: B
在cdb下创建用户默认是container=all,不能设置container=current
在pdb下创建用户默认是container=current,不能设置container=all
SQL> create user c##admin identified by stipsi container=all;
User created.
SQL> grant create table to c##admin container=all;
Grant succeeded.
SQL> revoke create table from c##admin;
revoke create table from c##admin
*
ERROR at line 1:
ORA-65092: system privilege granted with a different scope to 'C##ADMIN'
权限回收,针对的是授权,我们回顾下授权的作用域范围:需要注意的是,在考试中,经常考到在CDB级别授权及回收权限的作用域。
1. 在CDB级别中对用户进行授权,不带 container 子句的效果: 仅作用于当前CDB
2. 在CDB级别中对用户进行授权,带 container=all 子句的效果:作用于当前CDB和所有PDB
3. 在CDB级别中对用户进行授权,带 container=current 子句的效果:仅作用于当前CDB
4. 在PDB级别中对用户进行授权,不带 container 子句的效果:仅作用于当前PDB
5. 在PDB级别中对用户进行授权,带 container=all 子句的效果:X错误X PDB级别不能使用 ALL
6. 在PDB级别中对用户进行授权,带 container=current 子句的效果:仅作用于当前PDB
对于授权作用域,我们总结成三句话:也就是授权一共3种情况,仅作用于CDB,作用于全局,仅作用于PDB
仅作用于CDB:CDB级别不带子句或带了 current 都只作用于当前CDB
作用于全局:CDB级别如果带了 ALL,将作用于CDB和所有PDB全局
仅作用于PDB:PDB级别不带子句或带了 current 都只作用于当前PDB,无法带 ALL
注意:以上3种情况的授权,分别又对应3种回收选项(不带子句,带 all,带 current),所以共计9种情况,逐个讨论。
在包含可插入数据库(pdb)的多租户容器数据库(CDB)中,您将CREATE TABLE特权授予了根用户c# # A_ADMIN和所有pdb。在根容器中执行如下命令:
SQL > REVOKE create table FROM c# # # A_ADMIN;
结果如何?
A.它执行成功,并且CREATE TABLE权限只在根目录下的c# # A_ADMIN被撤销。
B。它失败并报告一个错误,因为CONTAINER=ALL子句没有被使用。
C.成功排除,并且从root和所有pdb的c# # # A_ADMIN中撤销CREATE TABLE特权。
它失败并报告一个错误,因为CONTAINER=CURRENT子句没有被使用。
E.它会成功执行,并且在所有pdb中从c# # A_ADMIN撤销CREATE TABLE权限。