oracle权限分为两种:
- 系统权限:系统规定用户使用数据库的权限,允许用户执行特定的数据库动作,如创建表、创建索引、连接实例等。
- 对象权限:某种权限可以让用户对其它用户的的表或视图等对象进行特定操作。
(一)系统权限
oracle有哪些系统权限呢?可以通过查找系统权限字典(SYSTEM_PRIVILEGE_MAP)得到:
SELECT NAME FROM SYSTEM_PRIVILEGE_MAP
在oracle(oracle11.6g版本)中总共存在208中系统权限:
//管理任何sql调整集
ADMINISTER ANY SQL TUNING SET ADMINISTER DATABASE TRIGGER//
ADMINISTER RESOURCE MANAGER ADMINISTER SQL MANAGEMENT OBJECT
ADMINISTER SQL TUNING SET ADVISOR
ALTER ANY ASSEMBLY ALTER ANY CLUSTER
ALTER ANY CUBE ALTER ANY CUBE DIMENSION
ALTER ANY DIMENSION ALTER ANY EDITION
ALTER ANY EVALUATION CONTEXT ALTER ANY INDEX
ALTER ANY INDEXTYPE ALTER ANY LIBRARY
ALTER ANY MATERIALIZED VIEW ALTER ANY MINING MODEL
ALTER ANY OPERATOR ALTER ANY OUTLINE
ALTER ANY PROCEDURE ALTER ANY ROLE
ALTER ANY RULE ALTER ANY RULE SET
ALTER ANY SEQUENCE ALTER ANY SQL PROFILE
ALTER ANY TABLE//修改任何表 ALTER ANY TRIGGER//修改任何触发器
ALTER ANY TYPE ALTER DATABASE
ALTER DATABASE LINK ALTER PROFILE
ALTER PUBLIC DATABASE LINK ALTER RESOURCE COST
ALTER ROLLBACK SEGMENT ALTER SESSION
ALTER SYSTEM ALTER TABLESPACE
ALTER USER ANALYZE ANY
ANALYZE ANY DICTIONARY AUDIT ANY
AUDIT SYSTEM BACKUP ANY TABLE
BECOME USER CHANGE NOTIFICATION
COMMENT ANY MINING MODEL COMMENT ANY TABLE
CREATE ANY ASSEMBLY CREATE ANY CLUSTER
CREATE ANY CONTEXT CREATE ANY CUBE
CREATE ANY CUBE BUILD PROCESS CREATE ANY CUBE DIMENSION
CREATE ANY DIMENSION CREATE ANY DIRECTORY
CREATE ANY EDITION CREATE ANY EVALUATION CONTEXT
CREATE ANY INDEX CREATE ANY INDEXTYPE
CREATE ANY JOB CREATE ANY LIBRARY
CREATE ANY MATERIALIZED VIEW CREATE ANY MEASURE FOLDER
CREATE ANY MINING MODEL CREATE ANY OPERATOR
CREATE ANY OUTLINE CREATE ANY PROCEDURE
CREATE ANY RULE CREATE ANY RULE SET
CREATE ANY SEQUENCE CREATE ANY SQL PROFILE
CREATE ANY SYNONYM CREATE ANY TABLE//创建任何表
CREATE ANY TRIGGER CREATE ANY TYPE
CREATE ANY VIEW CREATE ASSEMBLY
CREATE CLUSTER CREATE CUBE
CREATE CUBE BUILD PROCESS CREATE CUBE DIMENSION
CREATE DATABASE LINK CREATE DIMENSION
CREATE EVALUATION CONTEXT CREATE EXTERNAL JOB
CREATE INDEXTYPE CREATE JOB
CREATE LIBRARY CREATE MATERIALIZED VIEW
CREATE MEASURE FOLDER CREATE MINING MODEL
CREATE OPERATOR CREATE PROCEDURE
CREATE PROFILE CREATE PUBLIC DATABASE LINK
CREATE PUBLIC SYNONYM CREATE ROLE
CREATE ROLLBACK SEGMENT CREATE RULE
CREATE RULE SET CREATE SEQUENCE
CREATE SESSION CREATE SYNONYM
CREATE TABLE//创建本方案下的表 CREATE TABLESPACE
CREATE TRIGGER CREATE TYPE
CREATE USER CREATE VIEW
DEBUG ANY PROCEDURE DEBUG CONNECT SESSION
DELETE ANY CUBE DIMENSION DELETE ANY MEASURE FOLDER
DELETE ANY TABLE DEQUEUE ANY QUEUE
DROP ANY ASSEMBLY DROP ANY CLUSTER
DROP ANY CONTEXT DROP ANY CUBE
DROP ANY CUBE BUILD PROCESS DROP ANY CUBE DIMENSION
DROP ANY DIMENSION DROP ANY DIRECTORY
DROP ANY EDITION DROP ANY EVALUATION CONTEXT
DROP ANY INDEX DROP ANY INDEXTYPE
DROP ANY LIBRARY DROP ANY MATERIALIZED VIEW
DROP ANY MEASURE FOLDER DROP ANY MINING MODEL
DROP ANY OPERATOR DROP ANY OUTLINE
DROP ANY PROCEDURE DROP ANY ROLE
DROP ANY RULE DROP ANY RULE SET
DROP ANY SEQUENCE DROP ANY SQL PROFILE
DROP ANY SYNONYM DROP ANY TABLE
DROP ANY TRIGGER DROP ANY TYPE
DROP ANY VIEW DROP PROFILE
DROP PUBLIC DATABASE LINK DROP PUBLIC SYNONYM
DROP ROLLBACK SEGMENT DROP TABLESPACE
DROP USER ENQUEUE ANY QUEUE
EXECUTE ANY ASSEMBLY//执行任何装配 EXECUTE ANY CLASS
EXECUTE ANY EVALUATION CONTEXT EXECUTE ANY INDEXTYPE
EXECUTE ANY LIBRARY EXECUTE ANY OPERATOR
EXECUTE ANY PROCEDURE EXECUTE ANY PROGRAM
EXECUTE ANY RULE EXECUTE ANY RULE SET
EXECUTE ANY TYPE EXECUTE ASSEMBLY
EXEMPT ACCESS POLICY EXEMPT IDENTITY POLICY
EXPORT FULL DATABASE FLASHBACK ANY TABLE
FLASHBACK ARCHIVE ADMINISTER FORCE ANY TRANSACTION
FORCE TRANSACTION GLOBAL QUERY REWRITE
GRANT ANY OBJECT PRIVILEGE GRANT ANY PRIVILEGE
GRANT ANY ROLE IMPORT FULL DATABASE
INSERT ANY CUBE DIMENSION INSERT ANY MEASURE FOLDER
INSERT ANY TABLE LOCK ANY TABLE
MANAGE ANY FILE GROUP MANAGE ANY QUEUE
MANAGE FILE GROUP MANAGE SCHEDULER
MANAGE TABLESPACE MERGE ANY VIEW
ON COMMIT REFRESH QUERY REWRITE
READ ANY FILE GROUP RESTRICTED SESSION
RESUMABLE SELECT ANY CUBE
SELECT ANY CUBE DIMENSION SELECT ANY DICTIONARY
SELECT ANY MINING MODEL SELECT ANY SEQUENCE
SELECT ANY TABLE SELECT ANY TRANSACTION
SYSDBA SYSOPER
UNDER ANY TABLE UNDER ANY TYPE
UNDER ANY VIEW UNLIMITED TABLESPACE
UPDATE ANY CUBE UPDATE ANY CUBE BUILD PROCESS
UPDATE ANY CUBE DIMENSION UPDATE ANY TABLE
授予用户系统权限的语句是:
GRANT privilege [, privilege...] TO user [, user| role, PUBLIC...]
[WITH ADMIN OPTION];
WITH ADMIN OPTION 使用户同样具有分配权限的权利,可将此权限授予别的用户,另外使用该语法为某个用户授予系统权限,那么对于这个被这个用户授予相同权限的的所欲用户来说,取消用户的的系统权限不会级联取消这些用户的相同权限。
(二)对象权限
对象权限规则:
不同的对象拥有不同的权限;
对象的拥有者拥有所有权限;
对象的拥有者可以向外分配权限;
oracle中一共有8种对象权限,4个对象权限 :
对象权限 表 视图 序列 过程
修改(alter) 有 有
删除(delete) 有 有
执行(execute) 有
索引(index) 有
插入(insert) 有 有
关联(references) 有 有
选择(select) 有 有 有
更新(update) 有 有
对象授权语法:
GRANT object_priv|ALL [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];
其中,
ALL:所有对象权限
PUBLIC:授给所有的用户
WITH GRANT OPTION:允许用户再次给其它用户授权;
在回收对象权限时,级联回收。
(三)角色
在实际应用中,往往是将角色赋予用户,而不是直接将系统权限赋予用户。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。oracle中预先定义了一些角色,角色与权限对应关系通过下面语句查找:
select * from role_sys_privs
oracle预先定义了9种角色:
CONNECT//连接角色
DATAPUMP_EXP_FULL_DATABASE//数据导出角色(10g开始,更高效的导出)
DATAPUMP_IMP_FULL_DATABASE//数据导入角色
DBA//管理员角色
EXP_FULL_DATABASE//数据导出角色(10g之前)
IMP_FULL_DATABASE
OLAP_DBA//OLAP管理员,和数据仓库有关
RESOURCE//资源
SCHEDULER_ADMIN
比较常用的角色就是DBA、CONNECT和RESOURCE这三种。其中DBA拥有全部管理权限,权限比较高,一般用户不适合设置DBA角色;CONNECT和RESOURCE角色对应的系统权限为:
CONNECT CREATE SESSION
RESOURCE CREATE CLUSTER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE PROCEDURE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
可知,对于一般用户,我们只要赋予CONNECT和RESOURCE角色就可以了,但是若这个用户需要创建视图,那么这两个角色不行了。oracle对于这些预定义的角色主要是为了向后兼容,用于数据库的管理。oracle建议用户自己设计数据管理和安全的权限规划,而不要简单的使用这些预定角色。
(四)toad中权限、角色管理
在实际工作中,一般我们都是借助数据库管理工具,很少去编写sql脚本来完成工作。toad是Quest Software提供的一款高效的Oracle应用开发工具,可以通过图形化的用户界面快速访问数据库。在toad中创建用户时,弹出“create user”窗口,其中有Roles、System Privileges和Object Grants这个三个选项卡,分别对应角色管理、系统权限管理和对象权限管理。
其中,Roles中有Granted、Admin和Default,System Privileges中有Granted和Admin选项,Granted与Admin选项好理解,Roles中Default选项,是什么意思呢?查找role_sys_privs ,得到授予角色的系统权限字典内容,发现有个字段ADMIN_OPTION,这个字段的内容有的是NO,有的是YES,为No表示授予该角色的用户无法给别的用户授予这一角色。因此,在toad中就出现了一个Default选项,若选中Default,则表示授予该角色的用户根据ADMIN_OPTION字段的值来判断该用户能不能给其它用户授予相同的角色,若选中Admin,则可以继续给其它用户授权。在实际操作中发现,授予角色时,只选中Granted,根本无法给用户授予角色,也就是说,选中Granted后,Admin与Default,必须选择一个。