oracle授权范围,理解 Oracle 多租户体系中(12c,18c,19c)Grant授权作用域范围

目录

1. CDB 授权不带 container 默认

2. CDB 授权带 container=all

3. CDB 授权带 container=current

4. PDB 授权不带 container 默认

5. PDB 授权带 container=all

6. PDB 授权带 container=current

1. CDB 授权不带 container 默认

CDB创建测试用户

SQL> create user c##admin identified byadmin;Usercreated.

# 需要注意:CDB级别中这个语句和带 container=all 语句效果一样

SQL> select username,common,con_id from cdb_users where username='C##ADMIN';

USERNAME COMMON CON_ID--------------- ------ ----------

C##ADMIN YES 1C##ADMIN YES3

对该用户进行授权,不带 container 子句

SQL> grant create session toc##admin;Grantsucceeded.

# 授权成功后,请问 c##admin 用户能否登陆CDB?能否登陆PDB?

验证该用户是否可以登录CDB和PDB

SQL> conn c##admin/admin@cdb18cConnected.

# CDB可以进行登录

SQL> conn c##admin/admin@ordersERROR:

ORA-01045: user C##ADMIN lacks CREATESESSION privilege; logon denied

Warning: You are no longer connectedtoORACLE.

# PDB无法进行登录

结论:公共用户在进行授权不带 container 子句,默认仅作用于CDB级别。

2. CDB 授权带 container=all

CDB创建测试用户

SQL> conn / assysdba

Connected.

SQL> create user c##admin1 identified byadmin1;User created.

该语句创建的用户,将作用于CDB和所有PDB。

SQL> select username,common,con_id from cdb_users where username='C##ADMIN1';

USERNAME COMMON CON_ID--------------- ------ ----------

C##ADMIN1 YES 1C##ADMIN1 YES3

对该用户进行授权,带 container=all 子句

SQL> grant create session to c##admin1 container=all;Grant succeeded.

验证该用户是否可以登录CDB和PDB

SQL> conn c##admin1/admin1@cdb18cConnected.

# CDB可以进行登录

SQL> conn c##admin1/admin1@ordersConnected.

# PDB可以进行登录

结论:公共用户在进行授权带 container=all 子句,默认作用于CDB和所有PDB。

3. CDB 授权带 container=current

CDB创建测试用户

SQL> conn / assysdba

Connected.

SQL> create user c##admin2 identified byadmin2;User created.

该语句创建的用户,将作用于CDB和所有PDB。

SQL> select username,common,con_id from cdb_users where username='C##ADMIN2';

USERNAME COMMON CON_ID--------------- ------ ----------

C##ADMIN2 YES 1C##ADMIN2 YES3

对该用户进行授权,带 container=current 子句

SQL> grant create session to c##admin2 container=current;Grant succeeded.

验证该用户是否可以登录CDB和PDB

SQL> conn c##admin2/admin2@cdb18cConnected.

# CDB可以进行登录

SQL> conn c##admin2/admin2@ordersERROR:

ORA-01045: user C##ADMIN2 lacks CREATESESSION privilege; logon denied

Warning: You are no longer connectedtoORACLE.

# PDB无法进行登录

结论:公共用户在进行授权带 container=current 子句,默认仅作用于CDB级别,和不带container子句效果一致。

4. PDB 授权不带 container 默认

PDB创建测试用户

SQL> conn sys/oracle@orders assysdba

Connected.

SQL>show pdbs

CON_ID CON_NAMEOPENMODE RESTRICTED---------- ------------------- ---------- ----------

3    ORDERS READWRITE NO

SQL> create user padmin identified bypadmin;User created.

该语句创建的用户,将作用于当前PDB。

SQL> select username,common,con_id from cdb_users where username='PADMIN';

USERNAME COMMON CON_ID--------------- ------ ----------

PADMIN NO 3

对该用户进行授权,不带 container 子句

SQL> grant create session topadmin;Grant succeeded.

验证该用户是否可以登录当前PDB

SQL> conn padmin/padmin@ordersConnected.

# PDB可以进行登录

结论:本地用户在进行授权不带 container 子句,默认仅作用于当前PDB级别。

5. PDB 授权带 container=all

PDB创建测试用户

SQL> create user padmin1 identified bypadmin1;User created.

该语句创建的用户,将作用于当前PDB。

SQL> select username,common,con_id from cdb_users where username='PADMIN1';

USERNAME COMMON CON_ID---------- ------ ----------

PADMIN1 NO 3

对该用户进行授权,带 container=all 子句

SQL> grant create session to padmin1 container=all;grant create session to padmin1 container=all

*ERROR at line1:

ORA-65030: cannot grant a privilege commonly to a local user orrole

# 报错,无法进行本地用户的 container=all 授权

结论:本地用户在进行权限授权时,无法使用 container=all 子句。

6. PDB 授权带 container=current

针对上面PDB用户 padmin1 能否使用 container=current 子句进行授权?

SQL> grant create session to padmin1 container=current;Grantsucceeded.

SQL> conn padmin1/padmin1@ordersConnected.

结论:本地用户在进行权限授权时,使用container=current子句,作用域为当前PDB。

综上:

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值