首页 > 数据库 >如何设置用户默认角色_ALTER USER DEFAULT ROLE ALL

如何设置用户默认角色_ALTER USER DEFAULT ROLE ALL

来源:互联网 2026-04-15 18:14:32

ORA-01955错误:误用ALL作为角色名及其正确解决方案 ALTER USER DEFAULT ROLE ALL 报错 ORA-01955 的原因 许多用户在设置默认角色时,常因误解 ALL 关键字而遇到错误。Oracle 数据库中的 ALL 并非一个实际存在的角色对象,而是一个保留关键字。当执

ORA-01955错误:误用ALL作为角色名及其正确解决方案

ALTER USER DEFAULT ROLE ALL 报错 ORA-01955 的原因

许多用户在设置默认角色时,常因误解 ALL 关键字而遇到错误。Oracle 数据库中的 ALL 并非一个实际存在的角色对象,而是一个保留关键字。当执行 ALTER USER ... DEFAULT ROLE ALL 命令时,数据库会尝试查找名为“ALL”的角色,因无法找到而报错“ORA-01955: default role ‘ALL’ does not exist”。

设置默认角色的正确方法

要正确设置用户的默认角色,应使用以下两种方式之一:

长期稳定更新的攒劲资源: >>>点此立即查看<<<

  • 显式列出角色名:例如 ALTER USER scott DEFAULT ROLE CONNECT, RESOURCE;。这是最可靠的方法,需明确指定已授予该用户的具体角色。
  • 使用 ALL PRIVILEGES 语法(12.2及以上版本):例如 ALTER USER scott DEFAULT ROLE ALL PRIVILEGES;。此命令会将所有已通过 GRANT 语句授予该用户的角色设为默认。但需注意,通过 ADMIN OPTION 获得的角色不会被包含在内。

错误示例如下:ALTER USER scott DEFAULT ROLE ALL; 此写法无效,因为 ALL 不是角色名。

DEFAULT ROLE 的生效时机与限制

默认角色的设置仅对新建立的会话生效,当前已存在的会话不受影响。用户需要重新登录才能使新配置生效。

此外,默认角色功能存在以下限制:

  • 角色必须已通过 GRANT role_name TO user_name 授予用户,才能被设为默认角色。
  • DEFAULT ROLE 仅控制用户登录时自动激活哪些角色,不涉及角色嵌套权限或 WITH ADMIN OPTION 等管理选项。
  • 若用户配置了 OS_AUTHENT_PREFIX 或使用外部认证,DEFAULT ROLE 机制可能被绕过或失效。

还需注意,若用户曾执行 SET ROLE NONEALTER USER ... DEFAULT ROLE NONE 清空默认设置,则后续登录时不会有角色自动激活。

ALTER USER ... DEFAULT ROLE ALL 被误用的常见原因

此错误常源于对文档语句的片面理解。文档中“ALL — specifies that all roles granted to the user are enabled”的描述,易被误解为 ALL 可直接用作通配符。

实际上,ALL 关键字仅在特定语法环境中有效,例如 SET ROLE ALLALTER USER ... DEFAULT ROLE ALL PRIVILEGES。不同 Oracle 版本的行为差异如下:

  • 11g 及更早版本:不支持 ALL PRIVILEGES 语法,必须显式列出所有角色名。
  • 12cR1:开始支持 ALL PRIVILEGES,但行为可能不稳定,不建议在此版本依赖此功能。
  • 12cR2+ALL PRIVILEGES 行为稳定,但仍不包含通过 ADMIN OPTION 获得的角色及未激活的外部标识角色。

如何检查当前用户的默认角色配置

通过查询系统视图可准确确认默认角色状态:

SELECT granted_role, default_role FROM dba_role_privs WHERE grantee = 'SCOTT';

查询结果中,DEFAULT_ROLE 列为 YES 表示该角色已设为默认,登录时自动启用;为 NO 则表示需手动执行 SET ROLE 激活。

  • 查询 dba_role_privs 通常需要 DBA 权限。普通用户可查询 user_role_privs 视图查看自身角色信息。
  • 若希望将 DEFAULT_ROLE = NO 的角色改为默认启用,需重新执行 ALTER USER ... DEFAULT ROLE ... 命令并包含该角色名。
  • 角色名大小写敏感。若角色使用双引号创建(如 "MyRole"),在命令中必须严格匹配。

总结而言,最常见的错误是将 ALL 当作通配符使用,尤其在 Oracle 11g 环境或遗漏 PRIVILEGES 关键字时。理解版本差异并正确使用语法,可有效避免 ORA-01955 错误。

侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述

热游推荐

更多
湘ICP备14008430号-1 湘公网安备 43070302000280号
All Rights Reserved
本站为非盈利网站,不接受任何广告。本站所有软件,都由网友
上传,如有侵犯你的版权,请发邮件给xiayx666@163.com
抵制不良色情、反动、暴力游戏。注意自我保护,谨防受骗上当。
适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。