oracle角色数达到上限,ROLE启用个数限制

Oracle在启用用户的角色时,最多允许启用148个。

其实这个限制比较奇怪,因为148与2的幂相差较大,不知道Oracle出于什么原因确定的这个值:

SQL> CREATE USER U_ROLE IDENTIFIED BY U_PASSWORD;

用户已创建。

SQL> GRANT CREATE ROLE TO U_ROLE;

授权成功。

SQL> GRANT CREATE SESSION TO U_ROLE;

授权成功。

SQL> CONN U_ROLE/U_PASSWORD已连接。SQL> BEGIN

2  FOR I IN 1..148 LOOP

3  EXECUTE IMMEDIATE 'CREATE ROLE R_' || I;

4  END LOOP;

5  END;

6  /

PL/SQL过程已成功完成。

SQL> SELECT * FROM SESSION_ROLES;

未选定行

SQL> CONN U_ROLE/U_PASSWORD已连接。SQL> SELECT COUNT(*) FROM SESSION_ROLES;

COUNT(*)

----------

148

SQL> CREATE ROLE R_149;

角色已创建。

SQL> CONN U_ROLE/U_PASSWORD

ERROR:

ORA-28031: maximum of 148 enabled roles exceeded

警告:您不再连接到ORACLE。

由于角色的启用是在会话登陆时确定,因此创建完148个角色后,从SESSION_ROLES中查询不到记录。而创建了第149个角色,当再次登陆的时候,Oracle报错。

SQL> CONN / AS SYSDBA已连接。SQL> DROP ROLE R_149;

角色已删除。

SQL> CONN U_ROLE/U_PASSWORD已连接。SQL> CREATE ROLE R_149;

角色已创建。

SQL> SET ROLE ALL;

SET ROLE ALL

*第1行出现错误:

ORA-28031:超出启用角色的最大数148

需要注意,授权角色总数限制包括直接授权的角色和授权给角色的角色的数量:

SQL> DROP ROLE R_149;

角色已删除。

SQL> DROP ROLE R_148;

角色已删除。

SQL> CONN / AS SYSDBA已连接。SQL> CREATE ROLE R_148;

角色已创建。

SQL> GRANT R_148 TO U_ROLE;

授权成功。

SQL> CONN U_ROLE/U_PASSWORD已连接。SQL> CONN / AS SYSDBA已连接。SQL> CREATE ROLE R_149;

角色已创建。

SQL> GRANT R_149 TO R_148;

授权成功。

SQL> CONN U_ROLE/U_PASSWORD

ERROR:

ORA-28031: maximum of 148 enabled roles exceeded

警告:您不再连接到ORACLE。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值