十三,权限
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用户的权限也可以被回收。
系统权限
create session 连接数据库
create table 建表
create view 建视图
create public synonym 建同义词
create procedure 建过程、函数、包
create trigger 建触发器
create cluster 建簇
Oracle提供了100多种系统权限,而且版本越高,提供的系统权限就越多
select * from system_privilege_map order by name;
授予系统权限
一般情况,授予系统权限是由dba完成的,如果用其他用户来授予系统权限,则要求该用户必须具有grant any privilege的系统权限。在授予系统权限时,可以带有with admin option选项,这样,被授予权限的用户或是角色还可以将该系统权限授予其它的用户或是角色
Grant 权限 to 用户;
回收系统权限
一般情况下,回收系统权限是dba来完成的,如果其它的用户来回收系统权限,要求该用户必须具有相应系统权限及转授系统权限的选项(with admin option)。回收系统权限使用revoke来完成。当回收了系统权限后,用户就不能执行相应的操作了,
但是请注意,系统权限级联收回的问题?[不是级联回收!]
Revoke 权限 from 用户
对象权限
1)、对象权限介绍
指访问其它方案对象的权利,用户可以直接访问自己方案的对象,但是如果要访问别的方案的对象,则必须具有对象的权限。
比如smith用户要访问scott.emp表(scott:方案,emp:表)
常用的有:
insert 添加
delete 删除
alter 修改
select 查询
index 索引
references 引用
execute 执行
显示对象权限
通过数据字段视图可以显示用户或是角色所具有的对象权限。视图为dba_tab_privs
SQL> conn system/manager;
SQL> select distinct privilege from dba_tab_privs;
SQL> select grantor, owner, table_name, privilege from dba_tab_privs where grantee = ‘BLAKE’;
授予对象权限
在oracle9i前,授予对象权限是由对象的所有者来完成的,如果用其它的用户来操作,则需要用户具有相应的(with grant option)权限,
从oracle9i 开始,dba用户(sys,system)可以将任何对象上的对象权限授予其它用户。
授予对象权限是用grant 命令来完成的。对象权限可以授予用户,角色,和public。在授予权限时,如果带有with grantoption 选项,则可以将该权限转授给其它用户。但是要注意with grant option选项不能被授予角色。
1.tata 用户要操作scott.emp 表,则必须授予相应的对象权限
可以查询scott.emp 表的数据
SQL>grant select on emp to tata;
可以修改scott.emp 的表数据
SQL>grant update on emp to tata;
可以删除scott.emp 的表数据
SQL>grant delete on emp to tata;
一次把所有权限赋给tata
SQL>grant all on emp to tata;
2.能否对tata访问权限更加精细控制。(授予列权限)
只可以修改scott.emp的表的sal字段
SQL>grant update on emp(sal) to tata
只可以查询scott.emp 的表的ename,sal 数据
SQL>grant select on emp(ename,sal) to tata
授予alter权限
如果black用户要修改scott.emp表的结构,则必须授予alter对象权限
SQL> conn scott/tiger
SQL> grant alter on emp to blake;
当然也可以用system,sys 来完成这件事。
4.授予execute权限
如果用户想要执行其它方案的包/过程/函数,则须有execute权限。
比如为了让dacui可以执行包dbms_transaction,可以授予execute 权限。
SQL> conn system/oracle
SQL> grant execute on dbms_transaction to dacui;
5.授予index权限
如果想在别的方案的表上建立索引,则必须具有index 对象权限。
如果为了让black 可以在scott.emp 表上建立索引,就给其index 的对象权限
SQL> conn scott/oracle
SQL> grant index on scott.emp to blake;
6.使用with grant option 选项
该选项用于转授对象权限。但是该选项只能被授予用户,而不能授予角色
SQL> conn scott/oracle;
SQL> grant select on emp to dacui with grant option;
SQL> conn dacui/oracle
SQL> grant select on scott.emp to xiaocui;
回收对象权限
在oracle9i 中,收回对象的权限可以由对象的所有者来完成,也可以用dba用户(sys,system)来完成。
这里要说明的是:收回对象权限后,用户就不能执行相应的sql命令,但是要注意的是对象的权限是否会被级联收回
与权限安全相关的数据字典表有:
ALL_TAB_PRIVS
ALL_TAB_PRIVS_MADE
ALL_TAB_PRIVS_RECD
DBA_SYS_PRIVS
DBA_ROLES
DBA_ROLE_PRIVS
ROLE_ROLE_PRIVS
ROLE_SYS_PRIVS
ROLE_TAB_PRIVS
SESSION_PRIVS
SESSION_ROLES
USER_SYS_PRIVS
USER_TAB_PRIV
oracle的系统和对象权限列表
alter any cluster | 修改任意簇的权限 |
---|---|
alter any index | 修改任意索引的权限 |
alter any role | 修改任意角色的权限 |
alter any sequence | 修改任意序列的权限 |
alter any snapshot | 修改任意快照的权限 |
alter any table | 修改任意表的权限 |
alter any trigger | 修改任意触发器的权限 |
alter cluster | 修改拥有簇的权限 |
alter database | 修改数据库的权限 |
alter procedure | 修改拥有的存储过程权限 |
alter profile | 修改资源限制简表的权限 |
alter resource cost | 设置佳话资源开销的权限 |
alter rollback segment | 修改回滚段的权限 |
alter sequence | 修改拥有的序列权限 |
alter session | 修改数据库会话的权限 |
alter sytem | 修改数据库服务器设置的权限 |
alter table | 修改拥有的表权限 |
alter tablespace | 修改表空间的权限 |
alter user | 修改用户的权限 |
analyze | 使用analyze命令分析数据库中任意的表、索引和簇 |
audit any | 为任意的数据库对象设置审计选项 |
audit system | 允许系统操作审计 |
backup any table | 备份任意表的权限 |
become user | 切换用户状态的权限 |
commit any table | 提交表的权限 |
create any cluster | 为任意用户创建簇的权限 |
create any index | 为任意用户创建索引的权限 |
create any procedure | 为任意用户创建存储过程的权限 |
create any sequence | 为任意用户创建序列的权限 |
create any snapshot | 为任意用户创建快照的权限 |
create any synonym | 为任意用户创建同义名的权限 |
create any table | 为任意用户创建表的权限 |
create any trigger | 为任意用户创建触发器的权限 |
create any view | 为任意用户创建视图的权限 |
create cluster | 为用户创建簇的权限 |
create database link | 为用户创建的权限 |
create procedure | 为用户创建存储过程的权限 |
create profile | 创建资源限制简表的权限 |
create public database link | 创建公共数据库链路的权限 |
create public synonym | 创建公共同义名的权限 |
create role | 创建角色的权限 |
create rollback | segment 创建回滚段的权限 |
create session | 创建会话的权限 |
create sequence | 为用户创建序列的权限 |
create snapshot | 为用户创建快照的权限 |
create synonym | 为用户创建同义名的权限 |
create table | 为用户创建表的权限 |
create tablespace | 创建表空间的权限 |
create user | 创建用户的权限 |
create view | 为用户创建视图的权限 |
delete any table | 删除任意表行的权限 |
delete any view | 删除任意视图行的权限 |
delete snapshot | 删除快照中行的权限 |
delete table | 为用户删除表行的权限 |
delete view | 为用户删除视图行的权限 |
drop any cluster | 删除任意簇的权限 |
drop any index | 删除任意索引的权限 |
drop any procedure | 删除任意存储过程的权限 |
drop any role | 删除任意角色的权限 |
drop any sequence | 删除任意序列的权限 |
drop any snapshot | 删除任意快照的权限 |
drop any synonym | 删除任意同义名的权限 |
drop any table | 删除任意表的权限 |
drop any trigger | 删除任意触发器的权限 |
drop any view | 删除任意视图的权限 |
drop profile | 删除资源限制简表的权限 |
drop public cluster | 删除公共簇的权限 |
drop public database | link 删除公共数据链路的权限 |
drop public synonym | 删除公共同义名的权限 |
drop rollback segment | 删除回滚段的权限 |
drop tablespace | 删除表空间的权限 |
drop user | 删除用户的权限 |
execute any procedure | 执行任意存储过程的权限 |
execute function | 执行存储函数的权限 |
execute package | 执行存储包的权限 |
execute procedure | 执行用户存储过程的权限 |
force any transaction | 管理未提交的任意事务的输出权限 |
force transaction | 管理未提交的用户事务的输出权限 |
grant any privilege | 授予任意系统特权的权限 |
grant any role | 授予任意角色的权限 |
index table | 给表加索引的权限 |
insert any table | 向任意表中插入行的权限 |
insert snapshot | 向快照中插入行的权限 |
insert table | 向用户表中插入行的权限 |
insert view | 向用户视图中插行的权限 |
lock any table | 给任意表加锁的权限 |
manager tablespace | 管理(备份可用性)表空间的权限 |
references table | 参考表的权限 |
restricted session | 创建有限制的数据库会话的权限 |
select any sequence | 使用任意序列的权限 |
select any table | 使用任意表的权限 |
select snapshot | 使用快照的权限 |
select sequence | 使用用户序列的权限 |
select table | 使用用户表的权限 |
select view | 使用视图的权限 |
unlimited tablespace | 对表空间大小不加限制的权限 |
update any table | 修改任意表中行的权限 |
update snapshot | 修改快照中行的权限 |
update table | 修改用户表中的行的权限 |
update view | 修改视图中行的权限 |