oracle用户的角色与权限管理

oracle用户的角色与权限管理

一、权限分类:
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
二、系统权限管理:
1、系统权限分类(通过角色来进行管理):
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
1.1,具有connect权限的用户,只能够登陆;
1.2,具有resource权限的用户可以:
 A:create session
 B:create cluster
 C:create indextype
 D:create operator
 E:create procedure
 F:create sequence
 G:create table
 H:create trigger
 I:create type

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

系统权限授权命令:【系统权限只能由DBA用户授出:sys,system(最开始只能是这两个用户)】
授权命令:grant connect ,resource,dba to USER1
[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收]

查看角色所拥有的权限:
select * from  role_sys_privs;
查询结果:ROLE:角色名; PRIVILEGE:角色拥有的权限;ADMIN_OPTION:角色被授权时,是否带有with ADMIN option。

系统权限传递:grant connect,resource to USER1 with admin option;

with admin option 用于系统权限授权,with grant option 用于对象授权。
给一个用户授予系统权限带上with admin option 时,此用户可把此系统权限授予其他用户或角色,但收回这个用户的系统权限时,这个用户已经授予其他用户或角色的此系统权限不会因传播无效,如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限,但管理员可以显式收回B create session的权限,即直接revoke create session from B.
而with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。

查看用户所属于的角色
select * from dba_sys_privs;

查看用户拥有的权限
select * from dba_role_privs;

删除用户:drop user USER1 cascade; //加上cascade则将用户连同其创建的实体全部删除
*:当前正连接的用户不得删除

系统权限回收:系统权限只能由DBA用户回收
Revoke connect,resource from USER1;

2、实体权限分类:
 select , update , insert , alter , delete , all //all包括所有的权限;
 execute //执行存储过程权限;

 2.1,将表TABLE上的select,update,insert权限给TEST用户;
  grant select , update , insert on TABLE to TEST;
  查看对表所拥有的权限;
  select * from dba_tab_privs where TABLE_NAME='TABLE'; //TABLE_NAME=‘必须大写’
  授予用户所有的权限;
  gramt all on TABLE to TEST;
  被赋予all的权限后,所拥有的操作
  PRIVILEGE: alter , delete , index , insert , select , update , references , on commit refresh , query rewrite , debug , flashback
  将表的操作权授予全体用户:
  grant all on TABLE to public; //public 表示是所有的用户,这里的all权限不包括drop;

[实体权限数据字典]:
select owner,table_name from all_tables; //用户可以查询的表
select table_name from user_tables; //用户创建的表
select grantor,table_schema,table_name,privilege from all_tab_privs; //获取可以存取的表(被授权的)
select grantoe,owner,table_name,privilege from user_tab_privs; //授出权限的表(授出的权限)

实体权限传递(with grant option)
grant select,update on product to USER1 with grant option; //USER1 得到权限,并可以传递

实体权限收回:
Revoke select,update on product from USER1; //传递的权限将全部丢失

3、用户profile文件
  Oracle系统中的profile 可以用来对用户所能使用的数据库资源进行限制,使用Create Profile 命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该prifile分配给用户,则该用户所能使用的数据库资源都在该prifile的限制之内。
 3.1、创建profile必须要有CREATE PROFILE 的系统权限。

 创建用户的Profile 文件
 create profile STUDENT limit //STUDENT 为资源文件名;
 failed_login_attempts 3 //指定锁定用户的登录失败次数;
 password_lock_time 5 //指定用户被锁定天数;
 password_life_time 30 //指定口令可用天数;
 select * from dba_profiles;

创建用户:
create user USER1
identified by PASSWORD //如果密码是数字,请用双引号括起来
default tablespace TABLESPACE
temporary tablespace TABLESPACE
profile PROFILE
quota INTEGER/UNLIMITED on TABLESPACE;

查询用户缺省表空间、临时表空间
select username,default_tablespace,temporary_tablespace from dba_users;

查询系统资源文件名:
select * from dba_profiles;

资源文件类似表,一旦创建就会保存在数据库中
select username,profile,default_tablespace,temporary_tablespace from dba_users;

create profile COMMON limit
failed_login_attempts 5
idle_time 5;

alter user USER1 profile COMMON;

 3.2、修改用户:
 alter user USER1
 identified PASSWORD
 temporary tablespace TABLESPACE
 profile PROFILE
 quota INTEGER/UNLIMITED on TABLESPACE;

A、修改口令字
alter user USER1 identified by PASSWORD;
B、修改用户缺省空间
alter user USER1 default tablespace USER1;
C、修改用户临时表空间
alter user USER1 temporary tablespace TEMP_DATA;
D、强制用户修改口令字
alter user USER1 password EXPIRE;
E、将用户加/解锁
alter user USER1 acount lock; //加锁
alter user USER1 acount unlock; //解锁

3.3、监视用户
A、查询用户会话信息
select username,sid,serial#,machine from v$session;
B、删除用户会话信息
alter system kill session 'sid,serial#';
C、查询用户
select user_name,sql_text from v$open_cursor;

3.4、查询权限分配情况
 ROLE_SYS_PRIVS : 角色拥有的系统权限
 ROLE_TAB_PRIVS : 角色拥有的对象权限
 USER_TAB_PRIVS_MADE : 查询授出去的对象权限
 USER_TAB_PRIVS_RECD : 用户拥有的对象权限
 USER_COL_PRIVS_MADE : 用户分配出去的列的对象权限
 USER_COL_PRIVS_RECD : 用户拥有的关于列的对象权限
 DBA_SYS_PRIVS : 数据库中用户和角色拥有的系统权限
 DBA_TAB_PRIVS : 数据库中所有的对象权限
 DBA_COL_PRIVS : 数据库中所有的列对象权限
 DBA_ROLE_PRIVS : 数据库中所有的用户和角色拥有的角色

三、管理角色
1、建角色
create role ROLE1;

2、授权给角色
grant create any table,create procedure to ROLE1;

3、授予角色给用户
grant ROLE1 to USER1;

4、查看角色所包含的权限
select * from role_sys_privs;

5、创建带有口令的角色(在生效带有口令的角色时必须提供口令)
create role ROLE1 identified by PASSWORD1;

6、修改角色是否需要口令
alter role ROLE1 not identified;
alter role ROLE1 identified by PASSWORD1;

7、设置当前用户要生效的角色
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来说是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有 直接赋给用户的权限和用户默认角色中的权限赋给用户。)
set role ROLE1; //使ROLE1生效
set role ROLE1,ROLE2 ; //使ROLE1,ROLE2 生效
set role ROLE1 identified by PASSWORD1L //使用带有口令的ROLE1生效
set role all; //使用该用户的所有角色生效
set role none; //设置所有角色失效
set role all except ROLE1; //除ROLE1外的该用户的所有其他角色生效
select * from SESSION_ROLES; //查看当前用户的生效的角色

8、修改指定用户,设置其默认角色
alter user USER1 default role ROLE1;
alter user USER1 default role all except ROLE1;

9、删除角色
drop role ROLE1;
角色删除后,原来拥有该角色的用户就不再拥有该角色了,相应的权限也就没有了;
说明:A、无法使用 with grant option 为角色授予对象权限
      B、可以使用 with admin option 为角色授予系统权限,取消时不是级联

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章