最近遇到比较奇怪的问题,数据库版本11GR2(11.2.0.4),给用户授权时遇到CONNECT和RESOURCE角色不存在问题,以下为具体处理过程:
1:首先确认角色是否存在(若不存在,创建相关角色):
select * from dba_roles where role in ('RESOURCE','CONNECT');
--以上查询得知,角色确实不存在,既然不存在的话,那么我们接下来创建这2个默认角色,如下:
CREATE ROLE "CONNECT" NOT IDENTIFIED;
CREATE ROLE "RESOURCE" NOT IDENTIFIED;
2:确认以上默认角色包括哪些具体权限,并赋权给上述角色:
Provides the |
Provides the following system privileges: |
拥有这两个角色的用户都拥有什么权限呢?可以使用如下语句查看一下:
SELECT *
FROM DBA_SYS_PRIVS
WHERE GRANTEE IN ('RESOURCE', 'CONNECT')
ORDER BY 1;
--上图中可以看到,正常情况下数据库默认角色CONNECT和RESOURCE存在且具有上述权限。
下面,我们来根据创建的角色分别来授予默认权限:
--赋权给新创建的CONNECT角色:
grant CREATE SESSION to CONNECT;
--赋权给新创建的RESOURCE角色:
grant CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE to RESOURCE;
至此,数据库中这2个默认角色就都创建好了,并赋予了权限:
下面正常创建用户及授权正常...
create user test identified by "test123" default tablespace USERS temporary tablespace TEMP;
grant CONNECT,RESOURCE to TEST;
GRANT CREATE VIEW TO TEST;
另外:可以通过以下方法查询用户拥有的权限
方法一:PL/SQL,右键点击左侧导航栏中该用户(TEST)"查看"按钮:
方法二:SQL查询语句
--查询对象权限:
SELECT * FROM dba_tab_privs a WHERE a.grantee = '用户名';
--查询角色权限:
SELECT * FROM dba_role_privs a WHERE a.GRANTEE = '用户名';
--查询系统权限:
SELECT * FROM dba_sys_privs a WHERE a.GRANTEE = '用户名';
--查看角色对应权限语句:
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE LIKE 'CONNECT'; --查询connect角色的权限
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE LIKE 'RESOURCE'; --查询 RESOURCE角色的权限