Oracle Database 系统权限和对象权限
Oracle中的系统权限和对象权限
DCL 数据控制语言 -- 查看对象的权限
grant / revoke
查看登录用户
Show user
查看管理员用户表dba_users结构
desc dba_users
查看用户名
select username from dba_users;
启用用户
Alter user username account unlock;
禁用用户
Alter user username account lock;
系统权限的定义
系统权限(system privilege):指在系统级控制数据库的存取和使用的机制,即执行某种SQL语句的能力。如,是否能启动、停止数据库,是否能修改数据库参数,是否能连接到数据库,是否能创建、删除、更改方案对象(如表、索引、视图、过程)等。它一般是针对某一类方案对象或非方案对象的某种操作的全局性能力。
提 示”没有系统权限的用户实际上是个连登录能力都没有的、有名无实的用户。
在Oracle数据库中,SYSTEM是数据库管理员,他具有DBA角色,即具有DBA角色的所有系统权限,包括SELECT ANY DICTIONARY,所以,他可以查询数据字典中的、以“DBA_”开头的数据字典视图,如DBA_USERS。
系统权限的分类
每种系统权限都为用户提供了执行某一种或某一类系统级的数据库操作的权力,即系统级的DDL(Data Definition Language)语句、DML(Data Manipulation Language)语句的权力。数据字典视图system_privilege_map中包括了Oracle数据库中的所有系统权限。查询该视图可以了解系统权限的信息,
查询系统权限的个数:
select coiunt(*) from system_privilege_map;
查询具体的系统权限
select * from system_privilege_map;
系统权限的类型、名称、说明
类型/系统权限 | 说明 |
群集权限 | |
CREATE CLUSTER | 在自己的方案中创建、更改和删除群集 |
CREATE ANY CLUSTER | 在任何方案中创建群集 |
ALTER ANY CLUSTER | 在任何方案中更改群集 |
DROP ANY CLUSTER | 在任何方案中删除群集 |
数据库权限 | |
ALTER DATABASE | 运行ALTER DATABASE语句,更改数据库的配置 |
ALTER SYSTEM | 运行ALTER SYSTEM语句,更改系统的初始化参数 |
AUDIT SYSTEM | 运行AUDIT SYSTEM和NOAUDIT SYSTEM语句,审计SQL |
AUDIT ANY | 运行AUDIT和NOAUDIT语句,对任何方案的对象进行审计 |
索引权限 | |
CREATE ANY INDEX | 在任何方案中创建索引 注意:没有CREATE INDEX权限,CREATE TABLE权限包含了CREATE INDEX权限 |
ALTER ANY INDEX | 在任何方案中更改索引 |
DROP ANY INDEX | 任何方案中删除索引 |
过程权限 | |
CREATE PROCEDURE | 在自己的方案中创建、更改或删除过程、函数和包 |
CREATE ANY PROCEDURE | 在任何方案中创建过程、函数和包 |
ALTER ANY PROCEDURE | 在任何方案中更改过程、函数和包 |
DROP ANY PROCEDURE | 在任何方案中删除过程、函数或包 |
EXECUTE ANY PROCEDURE | 在任何方案中执行或者引用过程 |
概要文件权限 | |
CREATE PROFILE | 创建概要文件 |
ALTER PROFILE | 更改概要文件 |
DROP PROFILE | 删除概要文件 |
角色权限 | |
CREATE ROLE | 创建角色 |
ALTER ANY ROLE | 更改任何角色 |
DROP ANY ROLE | 删除任何角色 |
GRANT ANY ROLE | 向其他角色或用户授予任何角色 注意:没有对应的REVOKE ANY ROLE权限 |
回退段权限 | |
CREATE ROLLBACK SEGMENT | 创建回退段 注意:没有对撤销段的权限 |
ALTER ROLLBACK SEGMENT | 更改回退段 |
DROP ROLLBACK SEGMENT | 删除回退段 |
序列权限 | |
CREATE SEQLENCE | 在自己的方案中创建、更改、删除和选择序列 |
CREATE ANY SEQUENCE | 在任何方案中创建序列 |
ALTER ANY SEQUENCE | 在任何方案中更改序列 |
DROP ANY SEQUENCE | 在任何方案中删除序列 |
SELECT ANY SEQUENCE | 在任何方案中从任何序列中进行选择 |
会话权限 | |
CREATE SESSION | 创建会话,登录进入(连接到)数据库 |
ALTER SESSION | 运行ALTER SESSION语句,更改会话的属性 |
ALTER RESOURCE COST | 更改概要文件中的计算资源消耗的方式 |
RESTRICTED SESSION | 在数据库处于受限会话模式下连接到数据 |
同义词权限 | |
CREATE SYNONYM | 在自己的方案中创建、删除同义词 |
CREATE ANY SYNONYM | 在任何方案中创建专用同义词 |
CREATE PUBLIC SYNONYM | 创建公共同义词 |
DROP ANY SYNONYM | 在任何方案中删除同义词 |
DROP PUBLIC SYNONYM | 删除公共同义词 |
表权限 | |
CREATE TABLE | 在自己的方案中创建、更改和删除表 |
CREATE ANY TABLE | 在任何方案中创建表 |
ALTER ANY-TABLE | 在任何方案中更改表 |
DROP ANY TABLE | 在任何方案中删除表 |
COMMENT ANY TABLE | 在任何方案中为任何表、视图或者列添加注释 |
SELECT ANY TABLE | 在任何方案中选择任何表中的记录 |
INSERT ANY TABLE | 在任何方案中向任何表插入新记录 |
UPDATE ANY TABLE | 在任何方案中更改任何表中的记录 |
DELETE ANY TABLE | 在任何方案中删除任何表中的记录 |
LOCK ANY TABLE | 在任何方案中锁定任何表 |
FLASHBACK ANY TABLE | 允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询 |
表空间权限 | |
CREATE TABLESPACE | 创建表空间 |
ALTER TABLESPACE | 更改表空间 |
DROP TABLESPACE | 删除表空间,包括表、索引和表空间的群集 |
MANAGE TABLESPACE | 管理表空间,使表空间处于ONLINE(联机)、OFFLINE(脱机)、BEGIN BACKUP(开始备份)、END BACKUP(结束备份)状态 |
UNLIMITED TABLESPACE | 不受配额限制地使用表空间 注意:只能将UNLIMITED TABLESPACE授予账户而不能授予角色 |
用户权限 | |
CREATE USER | 创建用户 |
ALTER USER | 更改用户 |
BECOME USER | 当执行完全装入时,成为另一个用户 |
DROP USER | 删除用户 |
视图权限 | |
CREATE VIEW | 在自己的方案中创建、更改和删除视图 |
CREATE ANY VIEW | 在任何方案中创建视图 |
DROP ANY VIEW | 在任何方案中删除视图 |
COMMENT ANY TABLE | 在任何方案中为任何表、视图或者列添加注释 |
FLASHBACK ANY TABLE | 允许使用AS OF子句对任何方案中的表、视图执行一个SQL语句的闪回查询 |
触发器权限 | |
CREATE TRIGGER | 在自己的方案中创建、更改和删除触发器 |
CREATE ANY TRIGGER | 在任何方案中创建触发器 |
ALTER ANY TRIGGER | 在任何方案中更改触发器 |
DROP ANY TRIGGER | 在任何方案中删除触发器 |
ADMINISTER DATABASE TRIGGER | 允许创建ON DATABASE触发器。在能够创建ON DATABASE触发器之前,还必须先拥有CREATE TRIGGER或CREATE ANY TRIGGER权限 |
专用权限 | |
SYSOPER (系统操作员权限) | STARTUP SHUTDOWN ALTER DATABASE MOUNT/OPEN ALTER DATABASE BACKUP CONTROLFILE ALTER DATABASE BEGIN/END BACKUP ALTER DATABASE ARCHIVELOG RECOVER DATABASE RESTRICTED SESSION CREATE SPFILE/PFILE |
SYSDBA (系统管理员权限) | SYSOPER的所有权限,并带有WITH ADMIN OPTION子句 CREATE DATABASE RECOVER DATABASE UNTIL |
其他权限 | |
ANALYZE ANY | 对任何方案中的任何表、群集或者索引执行ANALYZE语句 |
GRANT ANY OBJECT PRIVILEGE | 授予任何方案上的任何对象上的对象权限 注意:没有对应的REVOKE ANY OBJECT PRIVILEGE |
GRANT ANY PRIVILEGE | 授予任何系统权限 注意:没有对应的REVOKE ANY PRIVILEGE |
SELECT ANY DICTIONARY | 允许从sys用户所拥有的数据字典表中进行选择 |
对象权限的定义
对象权限(object privilege):指在对象级控制数据库的存取和使用的机制,即访问其他用户的方案对象的能力。如,用户可以存取哪个用户的方案中的哪个对象,是否能对该对象进行查询、插入、更新等。对象权限一般是针对其他用户的某个特定的方案对象的某种操作的局部性能力。
提示”一个用户可以访问自己方案中的任何对象,并对其进行任何操作,即对自己的任何对象有任何对象权限。
对象权限的分类
Oracle数据库的方案对象主要是指:表、索引、视图、序列、同义词、过程、函数、包、触发器。
创建对象的用户拥有该对象的所有对象权限,不需要授予。所以,对象权限的设置实际上是为对象的所有者给其他用户提供操作该对象的某种权力的一种方法。
Oracle数据库中总共有9种不同的对象权限。不同类型的对象有不同的对象权限。有些对象(如集群、索引、触发器、数据库连接)没有对应的对象权限,即他们是通过系统权限来控制的,例如,如要修改集群,用户必须要具有ALTER ANY CLUSTER系统权限。
对象、对象权限的对应关系如表所示。能够在该对象上授予的对象权限用“√”表示。
对象 | 对象权限 | ||||||||
Alter 更改 | Delete 删除 | Execute 运行 | Index 索引 | Insert 插入 | Read 读 | Reference 引用 | Select 选择 | Update 更新 | |
Directory 目录 |
|
|
|
|
| √ |
|
|
|
Function 函数 |
|
| √ |
|
|
|
|
|
|
Procedure 子程序 |
|
| √ |
|
|
|
|
|
|
Package 包 |
|
| √ |
|
|
|
|
|
|
DB Object 数据库对象 |
|
| √ |
|
|
|
|
|
|
Library 库 |
|
| √ |
|
|
|
|
|
|
Operator 操作符 |
|
| √ |
|
|
|
|
|
|
Sequence 序列 | √ |
|
|
|
|
|
| √ |
|
Table 表 | √ | √ |
| √ | √ |
| √ | √ | √ |
Type 类型 |
|
| √ |
|
|
|
|
|
|
View 视图 |
| √ |
|
| √ |
|
| √ | √ |
对象权限及说明
对象权限 | 说明 |
Alter 更改 | 表上的ALTER权限保证在相关的表上执行ALTER TABLE或LOCK TABLE语句。可以重命名表、添加列、删除列、更改数据类型和列的长度,以及把表转换成一个分区(partitioned)表。 序列上的ALTER权限可以保证能够在相关序列上执行ALTER SEQUENCE语句,可以重设授权序列对象的最小值、增量和缓冲区大小 |
Delete 删除 | 允许在授权对象上执行DELETE语句,以便从表或者视图中删除行。SELECT权限必须随同DELETE权限授予,否则被授权的人将不能够选择行,因此也就无法删除行。DELETE权限还允许被授权者锁定相应的表 |
Execute 运行 | 包上的EXECUTE权限允许被授权者执行或者使用在相应的包规定中声明的任何程序或者程序对象(如一个记录类型,即record type或者指针即cursor)。 操作符(operator)或者类型(type)上的EXECUTE权限允许在SQL或者PL/SQL中使用该操作符。 数据库对象上的EXECUTE权限允许被授权者使用相关的数据库对象并且调用其方法 |
Index 索引 | 允许被授权者在相关的表上创建索引或者锁定该表。 当一个方案(schema)拥有一个表而另一个方案拥有其索引的时候,会出现混乱。在授予这种权限时要小心 |
Insert 插入 | 允许被授权者在相关的表或视图中创建行。 如果该INSERT权限建立在相关表或者视图的特定列上,则只能在具有INSERT权限的列上插入数据。 INSERT权限还隐含地给被授权者以锁定该表的能力 |
Read 读 | 只能在目录上授予。 允许被授权者读取指定目录中的BFILE。 Read权限与SELECT权限有区别,后者允许用户读取一个表或者视图 |
Reference 引用 | 只能在表上授予用户,而不能授予角色。 允许被授权者创建引用该表的参照完整性约束。被授权者可以锁定该表 |
Select 选择 | 允许被授权者在表或者视图上执行SELECT语句。 允许被授权者读取表或者视图的内容。 序列上的SELECT权限允许被授权者获取当前值(CURRVAL)或者通过选择NEXTVAL增大该值。 SELECT权限只能授予整个表,不能授予表中的列。因此,如果希望用户只能查询表中的部分列,就需要在该表上创建视图,然后将该视图的SELECT权限授予用户。 |
Update 更新 | 允许被授权者更改表或者视图中的数据值。SELECT权限必须随同UPDATE权限一起授予,这样就使被授权者隐含具有了锁定表的能力 |
All 所有 | 对于可以具有多项权限的对象,可以授予或者撤消专门的权限ALL。 对于表而言,ALL中包含了SELECT、INSERT、UPDATE和DELETE以及INDEX、ALTER和REFERENCE。所以,在表上授予AIL权限时要小心,因为可能并不想授予INDEX、ALTER和REFERENCE权限 |
角色定义:
我在前面的篇幅中说明权限和用户。慢慢的在使用中你会发现一个问题:如果有一组人,他们的所需的权限是一样的,当对他们的权限进行管理的时候会很不方便。因为你要对这组中的每个用户的权限都进行管理。
有一个很好的解决办法就是:角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。那么上述问题就很好处理了,只要第一次将角色赋给这一组用户,接下来就只要针对角色进行管理就可以了。
以上是角色的一个典型用途。其实,只要明白:角色就是一组权限的集合。下面分两个部门来对oracle角色进行说明。
二、系统预定义角色
预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
sql>select * from role_sys_privs where role='角色名';
Eg: select * from role_sys_privs where role='DBA';
1.CONNECT, RESOURCE, DBA
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。
2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
这些角色主要用于访问数据字典视图和包。
3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
这两个角色用于数据导入导出工具的使用。
4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。这两个角色用于oracle高级查询功能。
5.SNMPAGENT
用于oracle enterprise manager和Intelligent Agent
6.RECOVERY_CATALOG_OWNER
用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》
7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.