1.1 RESOURCE 和 CONNECT 角色
RESOURCE 角色权限包括 CREATE CLUSTER、CREATE INDEXTYPE、CREATE OPERATOR、CREATE PROCEDURE、CREATE SEQUENCE、CREATE TABLE、CREATE TRIGGER、CREATE TYPE。
CONNECT 角色权限包括 ALTER SESSION,CREATE SESSION,CREATE CLUSTER,CREATE DATABASE LINK,CREATE SEQUENCE,CREATE SYNONYM,CREATE TABLE,CREATE VIEW。
1.2 系统权限
1.2.1 授予系统权限
GRANT privilege [, privilege,...]
TO username [,username,...]
[WITH ADMIN OPTION]; --可以将拥有的系统权限授予给其他用户
如果某个用户的系统权限具有WITH ADMIN OPTION属性,那么被这个用户授予相同权限的用户,在取消该用户的系统权限时,不会级联取消其他用户的相同权限。
1.2.2取消系统权限
REVOKE privilege [,privilege,...]
FROM username [,username,...];
1.2.3查看被授予的系统权限
可以查询DBA_SYS_PRIVS和USER_SYS_PRIVS数据字典视图,查看授予给所有用户和角色的系统权限,授予给当前用户的系统权限。
1.3对象权限
1.3.1授予对象权限
GRANT privilege [,privilege,...] | ALL [ (column[,column,...])]
ON objectname
TO user | role | PUBLIC
[WITH GRANT OPTION];
1.3.2取消对象权限
REVOKE privilege [,privilege,..] | ALL [(column[,column,...])]
FROM user | role | PUBLIC
[CASCADE CONSTRAIN];
1.3.3
对象权限由对象拥有者授予。
PUBLIC指授予给数据库内的所有用户。
取消某个用户的权限时,具有WITH GRANT OPTION属性的权限,其它被授予相同权限的用户的对象权限会被级联取消。
对象权限就是指在表、视图、序列、过程、函数或包等对象上执行特殊动作的权利。有九种不同类型的权限可以授予给用户或角色。如下表:
权限 | ALTER | DELETE | EXECUTE | INDEX | INSERT | READ | REFERENCE | SELECT | UPDATE |
Directory | no | no | no | no | no | yes | no | no | no |
function | no | no | yes | no | no | no | no | no | no |
procedure | no | no | yes | no | no | no | no | no | no |
package | no | no | yes | no | no | no | no | no | no |
DB Object | no | no | yes | no | no | no | no | no | no |
Libary | no | no | yes | no | no | no | no | no | no |
Operation | no | no | yes | no | no | no | no | no | no |
Sequence | yes | no | no | no | no | no | no | no | no |
Table | yes | yes | no | yes | yes | no | yes | yes | yes |
Type | no | no | yes | no | no | no | no | no | no |
View | no | yes | no | no | yes | no | no | yes | yes |
表: 权限的数据字典视图
视图 | 作用 |
ALL_COL_PRIVS | 表示列上的授权,用户和PUBLIC是被授予者 |
ALL_COL_PRIVS_MADE | 表示列上的授权,用户是属主和被授予者 |
ALL_COL_RECD | 表示列上的授权,用户和PUBLIC是被授予者 |
ALL_TAB_PRIVS | 表示对象上的授权,用户是PUBLIC或被授予者或用户是属主 |
ALL_TAB_PRIVS_MADE | 表示对象上的权限,用户是属主或授予者 |
ALL_TAB_PRIVS_RECD | 表示对象上的权限, 用户是PUBLIC或被授予者 |
DBA_COL_PRIVS | 数据库列上的所有授权 |
DBA_ROLE_PRIVS | 显示已授予用户或其他角色的角色 |
DBA_SYS_PRIVS | 已授予用户或角色的系统权限 |
DBA_TAB_PRIVS | 数据库对象上的所有权限 |
ROLE_ROLE_PRIVS | 显示已授予用户的角色 |
ROLE_SYS_PRIVS | 显示通过角色授予用户的系统权限 |
ROLE_TAB_PRIVS | 显示通过角色授予用户的对象权限 |
SESSION_PRIVS | 显示用户现在可利用的所有系统权限 |
USER_COL_PRIVS | 显示列上的权限,用户是属主、授予者或被授予者 |
USER_COL_PRIVS_MADE | 显示列上已授予的权限,用户是属主或授予者 |
USER_COL_PRIVS_RECD | 显示列上已授予的权限,用户是属主或被授予者 |
USER_ROLE_PRIVS | 显示已授予给用户的所有角色 |
USER_SYS_PRIVS | 显示已授予给用户的所有系统权限 |
USER_TAB_PRIVS | 显示已授予给用户的所有对象权限 |
USER_TAB_PRIVS_MADE | 显示已授予给其他用户的对象权限,用户是属主 |
USER_TAB_PRIVS_RECD | 显示已授予给其他用户的对象权限,用户是被授予者 |
1.4 角色
角色是权限或其它角色的容器,能够进行外部身份验证(OS系统身份验证)。
使用Enterprise Manager 创建的用户,默认具有CONNECT角色。
1.4.1创建角色
CREATE ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY |GLOBALLY ];
其中 IDENTIFIED EXTERNALLY子句会对角色进行身份验证,即启用一个角色,用户必须是操作系统组的一个成员,该操作系统组的名称应当与角色相对应。同时需要初始化参数OS_ROLES设置为TRUE(默认为FALSE)。还需要在数据库驻留的服务器上创建具有如下命名规则的组:
ora_<SID>_<ROLE>[_[d][a]]
1.4.2修改角色
ALTER ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
1.4.3为角色授予和取消权限
系统权限
GRANT system_priv [, system_priv,...]
TO role | PUBLIC [,role | PUBLIC ,...]
[WITH ADMIN OPTION];
对象权限
GRANT ALL [PRIVILEGES] | object_priv [ (column ,column,...)]
[, object_priv [ (column ,column,...)]
ON [schema_name.]object_name
TO role | PUBLIC [,role | PUBLIC , ...];
取消角色系统权限
REVOKE system_priv | role_name [, system_priv | role_name, ... ]
FROM role | PBULIC [, role | PUBLIC, ...];
取消角色对象权限
REVOKE ALL [PRIVILEGES] | object_priv [, object_priv , ...]
ON [schema_naem.] object_name
FROM role | PUBLIC [, role | PUBLIC , ...]
[CASCADE CONSTRAINTS];
1.5 默认角色
默认角色,是用户连接实例时,会自动为用户启动的角色,用户也能使用被授予给这个角色的任何权限。
如果希望只在用户连接实例的时候,激活为用户授予的某些角色,就需要修改自动启用的默认角色集。
ALTER USER username DEFAULT ROLE
role [ , role ,... ] | ALL [EXCEPT role [, role, ...] ] | NONE;
如果没用使用ALTER USER 命令火 Enterprise Manager进行指定,那么为某个用户授予的所有角色都被视为这个用户的默认角色。
1.5.1启用与禁用角色
SET ROLE ALL [EXCEPT role_name [, role_naem]] | NONE |
role_name [ IDENTIFIED BY password ] [, role_name [ IDENTIFIED BY password, ...];
1.6 删除角色
DROP ROLE role_name;