1、权限(privilege)是指执行接特定类型SQL命令或访问其他方案对象的权利,它包括系统权限和对象权限。
1.1系统权限(System Privilege)是指执行特定类型SQL命令的权利。ORACLE提供了100种系统权限。
常用的系统权限:
create session 连接到数据库
create table
create view
create public sysnonym 建立同义词
create sequence 建立序列
create procedure 建立过程、函数、包
create trigger 建立触发哭
create cluster 建立簇
create type 建立对象类型
create database link 建立数据库连接
--显示所有系统权限
select * from system_privilege_map
--显示用户所具有的系统权限
通过查询数据字典视图dba_sys_privs,可以显示用户或角色所具有的系统权限以及转发授系统权限选项。
select * from dba_sys_privs where grantee='blake'
--显示当前用户所具有的系统权限及转授系统权限选项
select * from user_sys_privs
--显示当前会话所具有的系统权限
select * from session_privs
1.2、管理系统权限
1.2.1、授予系统权限
GRANT system_privs ,system_privs,[......] to [user|role|public] ,[user|role|public ] with admin option;
--显示所有系统权限
select * from system_privilege_map
--显示用户所具有的系统权限
通过查询数据字典视图dba_sys_privs,可以显示用户或角色所具有的系统权限以及转发授系统权限选项。
select * from dba_sys_privs where grantee='blake'
--显示当前用户所具有的系统权限及转授系统权限选项
select * from user_sys_privs
--显示当前会话所具有的系统权限
select * from session_privs
1.2.2收回系统权限
REVOKE system_privs ,system_privs [....] from {user|role|public} , {user|role|public} with admin option;
--系统权限不会级联收回
2、对象权限(object privilege)是指访问其它方案对象的权利。
alter delete insert update select index execute references
2.1授予对象权限
GRANT {object_priv[(column_list)],[,object_priv[column_list]].. |all [privileges]} on [schema.]object to {user|role|public} [,{user|role|public}] with grant option
例如:
grant update(sal) on emp to blake
--显示对象权限
select grantor ,owner ,owner || '.' || table_name as object ,privilege from dba_tab_privs where grantee='blake'
--显示列权限
select owner ,table_name || '.' || column_name as table_column ,privilege from dba_col_privs where grantee='BLAKE'
--只能在INSERT 、UPDATE 、REFERENCES上授予列权限。
2.2收回对象权限
REVOKE {object_priv [, object_priv]...|all [privileges]} on [schema.]object from {user|role|public} ,{user|role|public} ....[CASCADE CONSTANTS] ;
3、管理角色
角色包括预定义角色和自定义角色
常用预定义角色:CONNECT RESOURCE DBA
CONNECT角色具有一般应用开发人员所需要的大多数权限。当建立了用户之后,多数情况下用户授予CONNECT和RESOURCE角色就足够了。
CONNECT角色所具有系统权限:
alter session create cluster create database link create sequence create session
create public sysnonym create table create view
RESOURCE角色具有应用开发人员所需要的其他权限。
RESOUCE角色具有的系统权限:
CREATE CULSTER CREATE INDEXTPE CREATE PROCEDURE CREATE SEQUENCE CREATE TABLE CREATE TRIGGER CREATE TYPE
DBA角色具有所有系统权限,以及WITH ADMIN OPTION选项。
3.1建立自定义角色
--当使用CREATE ROLE命令建立角色时,可以指定角色的验证方式(不验证、数据库验证、OS验证等)
3.1.1建立角色(不验证)
GRANT ROLE pbulic_role NOT IDENTIFIED ;
3.1.2建立角色(数据库验证)
GRANT ROLE private_role IDENTIFIED BY private(密码) ;
3.2给角色授权
GRANT SESSION TO public_role WITH ADMIN OPTION
GRANT SELECT ON scott.emp TO public_role
GRANT INSERT ,UPDATE ,DELETE ON scott.emp TO private_role
--系统的UNLIMITED TABLESPACE 和对象权限的WITH GRANT OPTION 选项不能被授予角色另外不能用GRANT语句同进授予系统权限和对象权限。
3.3分配角色给用户
GRANT public_role ,private_role TO blake
3.4激活和禁止角色
3.4.1默认角色
默认角色是用户所具有角色的子集,当为用户指定默认角色后,以该用户身份登录时会自动激活其默认角色。
ALTER USER user DEFAULT ROLE {role [,role]....|ALL [EXCEPTON role [,role]....] |NONE};
ALTER USER blake DEFAULT ROLE public_role ;
3.4.2激活和禁止角色
--在SQL*Plus中激活和禁止角色使用SET ROLE 命令来完成的,而在其他应用环境中可以使用过程DBMS_SESSION.SET_ROLE命令来完成的,需要注意,当激活新角色时会自动禁止先前角色。
(1)激活角色:不验证
SET ROLE public_role
或
exec dbms_session.set_role('public_role')
(2)激活角色:数据库验证
SET ROLE private_role IDENTIFIED BY private(密码)
或
exec dbms_session.set_role('private_role identified by private')
(3) 禁止角色
SET ROLE NONE;
或
exec dbms_session.set_role('NONE');
3.5修改角色
3.5.1修改角色:不验证
ALTER ROLE private_role NOT IDENTIFIED ;
3.6删除角色
DORP ROLE private_roles
3.7显示角色信息
3.7.1显示所有角色
select * from dba_roles
3.7.2显示角色所具有的系统权限
通过查询数据字典视图DBA_SYS_PRIVS或ROLE_SYS_PRIVS可以显示角色所具有的系统权限
select privilege ,admin_optoin from role_sys_privs where role='PBULIC_ROLE';
3.7.3显示角色所具有的对象权限
select owner || '.' || table_name ,privilege from role_tab_privs where role='PUBLIC_ROLE'
3.7.4显示用户所具有的角色及默认角色
select granted_role ,default_role from dba_role_privs where grantee='blank'
3.7.5显示当前会话激活的角色
select * from session_roles ;