zhanghong 发表于 2018-9-26 10:40:01

Oracle ROLE启用个数限制

  Oracle在启用用户的角色时,最多允许启用148个。
  其实这个限制比较奇怪,因为148与2的幂相差较大,不知道Oracle出于什么原因确定的这个值:

  SQL> CREATE USER U_ROLE>  用户已创建。
  SQL> GRANT CREATE ROLE TO U_ROLE;
  授权成功。
  SQL> GRANT CREATE SESSION TO U_ROLE;
  授权成功。
  SQL> CONN U_ROLE/U_PASSWORD
  已连接。
  SQL> BEGIN
  2FOR I IN 1..148 LOOP
  3EXECUTE IMMEDIATE 'CREATE ROLE R_' || I;
  4END LOOP;
  5END;
  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

页: [1]
查看完整版本: Oracle ROLE启用个数限制