Oracle——权限与角色

     每个oracle用户都有一个名字和口令,并拥有一些由其创建的表、视图和其他资源。

     dba用户是指具有dba角色的数据库用户。特权用户可以执行启动实例,关闭实例等特殊操作,而dba用户只有在启动数据库后才能执行各种管理工作。(相当于说dba连startup和shutdown这两个权限都没有)

Oracle权限

一、权限分类——oracle数据库的权限系统分为系统权限与对象权限。

      系统权限(database system privilege):系统规定用户使用数据库的权限。(系统权限是对用户而言)。例如,create table权限允许用户创建表。

     实体权限(database object privilege):某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。例如select权限允许用户通过select从表、视图、序列(sequences)或快照(snapshots)中查询信息。

二、系统权限管理

       Oracle安装会自动的生成sys用户和system用户,其中sys有create database的权限。
       普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。
 系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)
 语法:GRANT 权限名 TO {用户|角色|PUBLIC} [WITH ADMIN OPTION]
          PUBLIC表示将权限赋给数据库中所有的用户
          with admin option:表示被授权的用户可以将它所得权限赋给其它用户

若要回收权限,则使用REVOKE命令:REVOKE 权限名 from {用户|角色|PUBLIC}

--查看与user有关系的权限
select DISTINCT PRIVILEGE from dba_sys_privs where privilege like '%USER%' group by privilege;
--显示指定用户所具有的系统权限
select * from dba_sys_privs where grantee='ETS';
--赋予ETS用户create session权限
grant create session,create table to ETS with admin option;
--回收ETS用户create session权限
revoke create session,create table from ETS;
     系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;
  系统权限可以跨用户回收,即A可以直接收回C用户的权限。
三、实体权限管理
实体权限是指某一用户对某一特定schema对象的操作权限。
实体权限分类:select, update, insert, alter, index, delete, all,execute   //其中all包括所有权限  execute执行存储过程权限
语法:GRANT 实体权限名|ALL ON 表 TO {用户|角色|PUBLIC}[with grant option]
     其中,ALL表示实体的所有实体权限,这里的all权限不包括drop
     public表示是所有的用户
     with grant option:实体权限传递
    实体权限回收:使用REVOKE命令:REVOKE 实体权限名|ALL ON 实体名 FROM 用户名|角色名|PUBLIC
    (和授权系统权限不同,如果是wiht grant option授权的用户,会级联回收其他用户)


实验:创建用户AAA并在用户AAA下建立表emp:

--创建用户  
CREATE USER AAA IDENTIFIED BY AAA;  
--赋予权限 
grant create session,create table to AAA;  
--删除用户  
drop user AAA cascade;  
--建立表emp
create table emp(id number,username varchar2(30))

授予用户ETS对用户AAA下表emp的增删改查权限:

--查看指定用户所具有的对象权限(哪些用户给自己授权)
select * from dba_tab_privs where grantee='ETS';
--对象授权——给用户ETS授予select ,insert,delete 和update表AAA.emp的权限
grant select,insert,delete,update on AAA.emp to ETS with grant option;
--回收对象权限
revoke select,insert,delete,update on AAA.emp from ETS;

DBA用户可以操作全体用户的任意基表(无需授权,包括删除)。

四、oracle的系统和对象权限
1、 与user有关的权限
  alter user 修改用户的权限
  create user 创建用户的权限
  drop user 删除用户的权限
  become user 切换用户状态的权限
  2、与table有关的系统和对象权限:
       create table 为用户创建表的权限
       create any table 为任意用户创建表的权限
       under any table  在任意表中
       commit any table 提交表的权限
  select table 使用用户表的权限
  select any table 使用任意表的权限
       insert any table 向任意表中插入行的权限
  insert table 向用户表中插入行的权限
  update table 修改用户表中的行的权限
       update any table 修改任意表中行的权限
       alter table 修改拥有的表权限
       alter any table 修改任意表的权限
       delete any table 删除任意表行的权限
  delete table 为用户删除表行的权限
       drop any table 删除任意表的权限
  lock any table 给任意表加锁的权限
      flashback any table 闪回表权限
      backup any table 备份任意表的权限
 3、其它:
      alter any cluster 修改任意簇的权限
  alter any index 修改任意索引的权限
  alter any role 修改任意角色的权限
  alter any sequence 修改任意序列的权限
  alter any snapshot 修改任意快照的权限
  alter any trigger 修改任意触发器的权限
  alter cluster 修改拥有簇的权限
  alter database 修改数据库的权限
  alter procedure 修改拥有的存储过程权限
  alter profile 修改资源限制简表的权限
  alter resource cost 设置佳话资源开销的权限
  alter rollback segment 修改回滚段的权限
  alter sequence 修改拥有的序列权限
  alter session 修改数据库会话的权限
  alter sytem 修改数据库服务器设置的权限
  alter tablespace 修改表空间的权限
  analyze 使用analyze命令分析数据库中任意的表、索引和簇
  audit any 为任意的数据库对象设置审计选项
  audit system 允许系统操作审计
  create any cluster 为任意用户创建簇的权限
  create any index 为任意用户创建索引的权限
  create any procedure 为任意用户创建存储过程的权限
  create any sequence 为任意用户创建序列的权限
  create any snapshot 为任意用户创建快照的权限
  create any synonym 为任意用户创建同义名的权限
  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 tablespace 创建表空间的权限
  create view 为用户创建视图的权限
  delete any view 删除任意视图行的权限
  delete snapshot 删除快照中行的权限
  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 trigger 删除任意触发器的权限
  drop any view 删除任意视图的权限
  drop profile 删除资源限制简表的权限
  drop public cluster 删除公共簇的权限
  drop public database link 删除公共数据链路的权限
  drop public synonym 删除公共同义名的权限
  drop rollback segment 删除回滚段的权限
  drop tablespace 删除表空间的权限
  execute any procedure 执行任意存储过程的权限
  execute function 执行存储函数的权限
  execute package 执行存储包的权限
  execute procedure 执行用户存储过程的权限
  force any transaction 管理未提交的任意事务的输出权限
  force transaction 管理未提交的用户事务的输出权限
  grant any privilege 授予任意系统特权的权限
  grant any role 授予任意角色的权限
  index table 给表加索引的权限
  insert snapshot 向快照中插入行的权限
  insert view 向用户视图中插行的权限
  manager tablespace 管理(备份可用性)表空间的权限
  references table 参考表的权限
  restricted session 创建有限制的数据库会话的权限
  select any sequence 使用任意序列的权限
  select snapshot 使用快照的权限
  select sequence 使用用户序列的权限
  select view 使用视图的权限
  unlimited tablespace 对表空间大小不加限制的权限
  update snapshot 修改快照中行的权限
  update view 修改视图中行的权限

Oracle角色

用户<——>权限方式对oracle的管理非常麻烦。
    oracle还有一个角色管理可以方便的授权,角色(role)是一组权限(privilege)的集合(也可以是一组角色的组合,也就是角色可以有包含关系)。再将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。列如:
                             用户--角色1_____角色2
                                          |___权限1

          给用户授予角色1这个role,用户就同时拥有了角色2及权限1的权限属性。

一、系统预定义角色

       预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。

1、三种标准角色:
connect role(连接角色):

      拥有Connect角色的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

resource role(资源角色):

       拥有Resource角色的用户只可以创建实体,不可以创建数据库结构。 resource角色可以创建表、序列(sequence)、运算符(operator)、过程(procedure)、触发器(trigger)、索引(index)、类型(type)和簇(cluster)。

dba role(数据库管理员角色):

      dba role拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。包括无限制的空间限额和给其他用户授予各种权限的能力。system由dba用户拥有

对于普通用户:授予connect, resource权限。 
对于DBA管理用户:授予connect,resource, dba权限。

2、其它角色:
exp_full_database--操作数据库的导出工具
imp_full_database--操作数据库的导入工具

AQ_USER_ROLE,AQ_ADMINISTRATOR_ROLE--AQ:Advanced Query。这两个角色用于oracle高级查询功能。

二、自定义角色

    在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。

      除了系统预定义角色,用户还可以根据自己需求在oracle创建自己的role。用户创建的role可以由对象或系统权限或两者的组合构成。为了创建role,用户必须具有create role系统权限。

--查看系统角色
select * from DBA_ROLES;
--创建一个角色
create role ETS_ROLE;
--授予角色给用户
grant ETS_ROLE to ETS;
--查某用户的角色信息
select * from dba_role_privs where grantee='ETS';
--查看角色所具有的系统权限
select * from ROLE_SYS_PRIVS where role='ETS_ROLE';
--查看角色所具有的对象权限
select * from ROLE_TAB_PRIVS where role='ETS_ROLE';
--赋予系统权限create session
grant create session,create table to ETS_ROLE;
--赋予对象授权——给用户ETS授予select表AAA.emp的权限
grant select on AAA.EMP to ETS_ROLE;
--撤销权限
revoke create session from ETS_ROLE;
--回收角色
revoke ETS_ROLE from ETS;
--删除角色
drop role ETS_ROLE;
--设置ETS的默认角色为ETS_ROLE
alter user ETS default role ETS_ROLE;
--设置所有角色为默认角色
alter user ETS default role all;
三、设置当前用户要生效的角色(在登陆ETS用户设置)
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;)
sql>set role role1;//使role1生效
sql>set role role,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;//查看当前用户的生效的角色。
sql>select * from user_role_privs;//查看当前用户的角色信息

猜你喜欢

转载自blog.csdn.net/qq_33459369/article/details/80533893