ROLE启用个数限制

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

 

 

其实这个限制比较奇怪,因为1482的幂相差较大,不知道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

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-676078/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-676078/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值