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>CONNU_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>CONNU_ROLE/U_PASSWORD
ERROR:
ORA-28031: maximum of 148 enabled roles exceeded
警告:您不再连接到ORACLE。
oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html
转载于:https://blog.51cto.com/19880614/1223508