Oracle中的权限
在开发系统的过程中,不可避免的需要和其他的系统进行交互,这里一般采用接口的方式来进行交互,但是也有很多时候需要我们去创建用户和视图来供对方通过dblink的方式查询我们系统中的数据。这里就牵扯到了授权问题,应该给创建给对方使用的用户多大的权限呢。
Oracle权限允许用户访问属于其它用户的对象或执行程序,Oracle系统提供三种权限:Object 对象级、System 系统级、Role 角色级。这些权限可以授予给用户、特殊用户public或角色,如果授予一个权限给特殊用户"Public"(用户public是oracle预定义的,每个用户享有这个用户享有的权限),那么就意味作将该权限授予了该数据库的所有用户。
对管理权限而言,角色是一个工具,权限能够被授予给一个角色,角色也能被授予给另一个角色或用户。用户可以通过角色继承权限,除了管理权限外角色服务没有其它目的。权限可以被授予,也可以用同样的方式撤销。
权限分类
1、系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
2、实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
系统权限:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
系统权限授权命令:
系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)
授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
注:普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查询用户拥有哪里权限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
查自己拥有哪些系统权限
SQL> select * from session_privs;
删除用户
SQL> drop user 用户名 cascade; //加上cascade则将用户连同其创建的东西全部删除
系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL> grant connect, resorce to user50 with admin option; //可以传递所获权限。
系统权限回收:系统权限只能由DBA用户回收
SQL> Revoke connect, resource from user50;
说明:
1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
实体权限:
select, update, insert, alter, index, delete, all //all包括所有权限
execute //执行存储过程权限
user01:
SQL> grant select, update, insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。
将表的操作权限授予全体用户:
SQL> grant all on product to public; // public表示是所有的用户,这里的all权限不包括drop。
实体权限数据字典
SQL> select owner, table_name from all_tables; // 用户可以查询的表
SQL> select table_name from user_tables; // 用户创建的表
SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
SQL> select grantee, owner, table_name, privilege from user_tab_privs; // 授出权限的表(授出的权限)
DBA用户可以操作全体用户的任意基表(无需授权,包括删除)
下面就是oracle的权限一览表:
权限 | 所能实现的操作 |
分析 | |
ANALYZE ANY | 分析数据库中的任何表、簇或索引 |
审计 | |
AUDIT ANY | 审计数据库中的任何模式对象 |
AUDIT SYSTEM | 启用与停用语句和特权的审计选项 |
簇 | |
CREATE CLUSTER | 在自有的模式中创建一个簇 |
CREATE ANY CLUSTER | 在任何一个模式中创建一个簇;操作类似于CREATE ANY TABLE |
ALTER ANY CLUSTER | 改变数据库中的任何一个簇 |
DROP ANY CLUSTER | 删除数据库中的任何一个簇 |
数据库 | |
ALTER DATA BASE | 改变数据库;不管操作系统的特权,经由Oracle把文件添加到操作系统中 |
数据库链接 | |
CREATE DATABASE LINK | 在自有模式中创建专用数据库链接 |
索引 | |
CREATE ANY INDEX | 在任何表的任何模式中创建一条索引 |
ALTER ANY INDEX | 改变数据库中的任何索引 |
DROP ANY INDEX | 删除数据库中的任何索引 |
库 | |
CREATE LIBRARY | 在自有模式中创建调出库 |
CREATE ANY LIBRARY | 在任何模式中创建调出库 |
DROP LIBRARY | 删除自有模式中的调出库 |
DROP ANY LIBRARY | 删除任何模式中的调出库 |
特权 | |
GRANT ANY PRIVILEGE | 授予任何系统特权(不包括对象特权) |
过程 | |
CREATE PROCEDURE | 在自有模式中创建存储的过程、函数和包 |
CREATE ANY PROCEDURE | 在任何模式中创建存储的过程、函数和包(这要求用户还要有ALTER ANY TABLE 、BACKUP ANY TA B LE 、DROP ANY TABLE 、SELECT ANY TABLE 、INSERT ANY TABLE 、UPDATE ANY TABLE 、DELETE ANY TABLE 或GRANT ANY TABLE 特权 |
ALTER ANY PROCEDURE | 编译任何模式中的任何存储的过程、函数或包 |
DROP ANY PROCEDURE | 删除任何模式中的任何存储的过程、函数或包 |
EXECUTE ANY PROCEDURE | 执行任何过程或函数(独立的或成组的),或在任何模式中引用任何包变量 |
环境资源文件 | |
CREATE PROFILE | 创建环境资源文件 |
ALTER PROFILE | 改变数据库中的任何环境资源文件 |
DROP PROFILE | 删除数据库中的任何环境资源文件 |
ALTER RESOURCE COST | 设置所有的用户会话中使用的资源开销 |
特权 | 所能实现的操作 |
公共数据库链接 | |
CREATE PUBLIC DATABASE LINK | 创建公共数据库链接 |
DROP PUBLIC DATABASE LINK | 删除公共数据库链接 |
公共同义词 | |
CREATE PUBLIC SYNONYM | 创建公共同义词 |
DROP PUBLIC SYNONYM | 删除公共同义词 |
角色 | |
CREATE ROLE | 创建角色 |
ALTER ANY ROLE | 改变数据库中的任何一个角色 |
DROP ANY ROLE | 删除数据库中的任何一个角色 |
GRANT ANY ROLE | 授权数据库中的任何一个角色 |
回滚段 | |
CREATE ROLLBACK SEGMENT | 创建回滚段 |
ALTER ROLLBACK SEGMENT | 改变回滚段 |
DROP ROLLBACK SEGMENT | 删除回滚段 |
会话 | |
CREATE SESSION | 连接到数据库 |
ALTER SESSION | 发出A LTER SESSION 语句 |
RESTRICTED SESSION | 当数据库利用STARTUP RESTRICT 启动时进行连接(OSOPER与 OSDBA角色包含此特权) |
序列 | |
CREATE SEQUENCE | 在自有模式中创建序列 |
CREATE ANY SEQUENCE | 在任何模式中创建任何序列 |
ALTER ANY SEQUENCE | 在任何模式中改变任何序列 |
DROP ANY SEQUENCE | 在任何模式中删除任何序列 |
SELECT ANY SEQUENCE | 在任何模式中引用任何序列 |
快照 | |
CREATE SNAPSHOT | 在自有模式中创建快照(用户还必须具有C R E ATE TA B L E 特权) |
CREATE ANY SNAPSHOT | 在任何模式中创建快照(用户还必须具有CREATE ANY TABLE特权) |
ALTER SNAPSHOT | 改变任何模式中的任何快照 |
DROP ANY SNAPSHOT | 删除任何模式中的任何快照 |
同义词 | |
CREATE SYNONYM | 在自有模式中创建同义词 |
CREATE ANY SYNONYM | 在任何模式中创建任何同义词 |
DROP ANY SYNONYM | 在任何模式中删除任何同义词 |
系统 | |
ALTER SYSTEM | 发出ALTER SYSTEM 语句 |
表 | |
CREATE TABLE | 在自有模式中创建表。还使被授权者能在自有模式下的表中创建索引,包 括那些用于完整性约束的索引(被授权者必须有表空间的定额或UNLIMITED TABLESPACE 特权) |
CREATE ANY TABLE | 在任何模式中创建表(假如被授权者有CREATE ANY TABLE 特权并在 另一个用户模式中创建了一张表,那么拥有者必须在那个表空间上有空间定额。表的拥有者不必具有CREAT [ANY] TABLE 特权) |
ALTER ANY TABLE | 改变任何模式中的任何表并编译任何模式中的任何视图 |
BACKUP ANY TABLE | 在任何模式中使用表的导出工具执行一个增量导出操作 |
DROP ANY TABLE | 删除或截断任何模式中的任何表 |
LOCK ANY TABLE | 锁定任何模式中的任何表或视图 |
特权 | 所能实现的操作 |
COMMENT ANY TABLE | 对任何模式中的任何表、视图或列进行注释 |
SELECT ANY TABLE | 对任何模式中的任何表、视图或快照进行查询 |
INSERT ANY TABLE | 把行插入到任何模式中的任何表或视图中 |
UPDATE ANY TABLE | 修改任何模式中的任何表或视图中的行 |
DELETE ANY TABLE | 删除任何模式中的任何表或视图中的行 |
表空间 | |
CREATE TABLESPACE | 创建表空间;不管用户有何操作系统特权,经由Oracle把文件添加到操 作系统中 |
ALTER TABLESPACE | 改变表空间;不管用户有何操作系统特权,经由Oracle把文件添加到操 作系统中 |
MANAGE TABLESPACE | 使任何表空间脱机,使任何表空间联机,开始和结束对任何表空间的备份 |
DROP TABLESPACE | 删除表空间 |
UNLIMITED TABLESPACE | 使用任何没有数量限制的表空间。此特权忽略了所分配的任何具体定额。 假如被取消的话,被授权者的模式对象仍然保留,但是进一步的表空间分配被拒绝,除非这一分配是具体的表空间定额允许的。此系统特权仅可以授予用户,而不授予角色。一般而言,应分配具体的表空间定额,而不授予此系统特权 |
事务 | |
FORCE TRANSACTION | 强迫提交或回滚本地数据库中悬而未决的自有的分布式事务 |
FORCE ANY TRANSACTION | 强迫提交或回滚本地数据库中悬而未决的任何分布式事务 |
触发器 | |
CREATE TRIGGER | 在自有模式中创建触发器 |
CREATE ANY TRIGGER | 在任何模式中创建与任何模式的任何表相关的任何触发器 |
ALTER ANY TRIGGER | 启用、停用或编译任何模式中的任何触发器 |
DROP ANY TRIGGER | 删除任何模式中的任何触发器 |
用户 | |
CREATE ANY USER | 创建用户;分配任意表空间上的定额,设置缺省和临时表空间,指定一个 环境资源文件(在CREATE USER 语句中) |
BECOME ANY USER | 成为另一个用户(这是任何一个执行完全数据库导入的用户所需要的) |
ALTER USER | 改变其他用户:修改任意用户的口令或验证方法,分配表空间定额,设置 缺省或临时表空间,在ALTER USER 语句中指定环境资源文件与缺省角色(不必改变自有口令) |
DROP USER | 删除另一个用户 |
视图 | |
CREATE VIEW | 在自有模式中创建视图 |
CREATE ANY VIEW | 在任意模式中创建视图。要在另一个用户模式中创建视图,你必须具有 CREATE ANY VIEW 特权,拥用者必须在该视图引用的对象上具有所需的特权 |