Oracle的权限主要包括角色权限Role
privileges、系统权限System privileges和对象权限Object privileges。
一、角色权限角色是一组权限的集合将角色赋给用户那这个用户就拥有这个角色包含的权限。在数据库安装后系统会自动创建一些常用的角色
下面简单介绍一下这些预定义角色
角色所包含的权限可以用语句来查询 select * from
role_sys_privs where role='角色名';
1.CONNECT, RESOURCE, DBA
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。
DBA: 拥有全部特权是系统最高角色权限只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource角色权限的用户只可以创建实体不可以创建数据库结构。
CONNECT:拥有Connect角色权限的用户只可以登录Oracle不可以创建实体不可以创建数据库结构。对于普通用户授予connect,
resource角色权限。 对于DBA管理用户授予connectresource, dba角色权限。
2.DELETE_CATALOG_ROLEEXECUTE_CATALOG_ROLESELECT_CATALOG_ROLE 这些角色主要用于访问数据字典视图和包。
3.EXP_FULL_DATABASEIMP_FULL_DATABASE 这两个角色用于数据导入导出工具的使用。
4.AQ_USER_ROLEAQ_ADMINISTRATOR_ROLE 这两个角色用于oracle高级查询功能。
5.SNMPAGENT 用于oracle
enterprise manager和Intelligent Agent
6.RECOVERY_CATALOG_OWNER 用于创建拥有恢复库的用户。
7.HS_ADMIN_ROLE
异构服务需要这个角色去访问数据字典中的表。.
补充管理角色权限
1.建一个角色 sql>create role role1;
2.授予权限给角色 sql>grant create any table,create procedure to
role1;
3.授予角色给用户 sql>grant role1 to user1;
4.查看角色所包含的权限 sql>select * from
role_sys_privs;
5.创建带有口令以角色(在生效带有口令的角色时必须提供口令) sql>create role role1 identified by
password1;
6.修改角色是否需要口令 sql>alter role role1 not identified;
sql>alter role role1
identified by password1;
7.设置当前用户要生效的角色 (注角色的生效是一个什么概念呢假设用户a有b1,b2,b3三个角色那么如果b1未生效则b1所包含的权限对于a来讲是不拥有的只有角色生效了角色内的权限才作用于用户最大可生效角色数由参数MAX_ENABLED_ROLES设定在用户登录后oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。
sql>set role
role1;//使role1生效
sql>set role
role1,role2;//使role1,role2生效
sql>set role role1
identified by password1;//使用带有口令的role1生效
sql>set role
all;//使用该用户的所有角色生效
sql>set role
none;//设置所有角色失效
sql>set role all except
role1;//除role1外的该用户的所有其它角色生效。
sql>select * from
SESSION_ROLES;//查看当前用户的生效的角色。
8.修改指定用户设置其默认角色 sql>alter user user1 default role
role1; sql>alter user user1
default role all except role1;
9.删除角色 sql>drop role role1; 角色删除后原来拥用该角色的用户就不再拥有该角色了相应的权限也就没有了。
说明: 1)无法使用WITH GRANT
OPTION为角色授予对象权限
2)可以使用WITH ADMIN OPTION
为角色授予系统权限,取消时不是级联
二、系统权限
所谓系统权限就是oracle里已经写死的权限这些权限我们是不能自己去扩展的已经在oracle里全部规定好了我们可以通过查看system_privilege_map这个数据字典表来查看所有的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
修改视图中行的权限
enqueue any queue
就是向所有队列中加入消息的权限
dequeue any queue
就是可以向所有队列使消息出队的权限
manage any queue
就是在所有所有方案下允许运行DBMS_AQADM的权限
1.查看所有用户
select * from dba_users;
select * from all_users;
select * from user_users;
2.查看用户或角色系统权限
select * from dba_sys_privs;
select * from user_sys_privs;
3.查看用户对象权限
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
4.查看所有角色
select * from dba_roles;
5.查看用户或角色所拥有的角色
select * from dba_role_privs;
select * from user_role_privs;
6.注意 (1)以下语句可以查看Oracle提供的系统权限 select
name from sys.system_privilege_map
(2)查看一个用户的所有系统权限(包含角色的系统权限)
select privilege from dba_sys_privs
where grantee='USER_NAME' union select privilege from dba_sys_privs
where grantee in (select granted_role from dba_role_privs where
grantee='USER_NAME' );
三、对象权限
下面我们看看对象权限object permission
这里是针对于特定的对象的权限系统权限是限定了可以操作的功能而object
permission就更细化了具体到了莫个对象你可以操作的功能的权限 比如A用户建立了一个TableA表现在为了让B用户可以看到A这个对象我们就可以把A.table的select权限进行赋予。这里的A.table上的select权限就是一个对象权限。除了select还有updatedeleteinsertalterdropindexreferences这样针对对象的权限。除了可以给表对象指定对象权限外viewsequenceprocedurefunctionpackagetrigggerMV等这些oracle里的对象都可以进行对象的权限指定。对于对象权限来说由于对象权限完全是动态的在对一个对象进行grant的时候才能看到具体的对象权限所以对象权限是不像system
privilege那样有一个表来描述的只有一个表来记录用户和这个用户对于的对象权限的关系表。这个表就是dba_tab_privs;这里这个名字比较容易让人误会为只有table的对象权限其实不然这里其他类型的对象的对象权限也会记录进来。