坑向: 关于对Oracle数据库新建用户后,进行角色授予GRANT "CONNECT", "RESOURCE"后,用户仍然没有指定角色的相关权限,致拒绝登录ORA-01045问题的探究
1 环境介绍
windows 7 操作系统
Oracle 11g
2 问题描述
在Oracle数据库连接后,自定义新建用户(BAO)后(此时该用户没有登录数据库的权限),使用 所谓的
GRANT "CONNECT", "RESOURCE" TO "BAO";
即使显示授权成功(或者操作成功后),该新建用户仍然无法登录数据库。
具体错误如下(ORA-01045):
3 原因分析
Oracle角色 可以被理解为可复用的 权限集合。
Oracle角色 被授予给用户(GRANT后),仍然需要多一条语句操作。
即增加:修改用户的默认角色 ALTER USER "BAO" DEFAULT ROLE "CONNECT", "RESOURCE";
(若没有此语句,Oracle会将默认角色仍然设置为NONE,即ALTER USER "BAO" DEFAULT ROLE NONE;
导致即使GRANT角色已赋予基本权限成功后,该用户仍然无法登录数据库)
但是权限的授予只需要一条语句, GRANT CREATE SESSION TO "BAO";
即可。
4 解决办法(以下操作皆已使用DBA身份登录了数据库)
4.1 使用PL/SQL为新建用户授予基本权限以登录Oracle数据库
GRANT "CONNECT", "RESOURCE" TO "BAO";
ALTER USER "BAO" DEFAULT ROLE "CONNECT", "RESOURCE";
4.2 使用OEM(Oracle Enterprise Management)为新建用户授予基本权限以登录Oracle数据库
为BAO用户授予Connect,Resource角色,选择完后确认提交!
注意提交完后确保新建用户下的角色的复选框默认值为勾选状态即可(此处保障了新建用户的角色不会被默认设置为NONE)
4.3 使用Navicat数据库图形管理工具为新建用户授予基本权限以登录Oracle数据库
进入用户角色授予的修改界面(成员属于),选中 授予 和 作为默认 两个复选框
具体如下(仅演示了Connect角色授予,Resource角色授予类似):
可以查看到当选择默认后,在SQL预览中可以发现,新建用户的默认角色也被修改
5 最终结果
在对 授予角色 并 修改默认用户角色后,以新建用户的身份成功登入数据库。