您的位置:首页 > 数据库 > Oracle

Oracle中系统权限和对象权限

2014-04-13 21:37 351 查看

权限的种类:系统权限 和 对象权限 

1、系统权限

   所谓系统权限,就是oracle里已经写死的权限,这些权限,我们是不能自己去扩展的,比如select any table, create any table等,这里的权限已经在oracle里全部规定好了,我们可以通过查看system_privilege_map这个数据字典表来查看所以的oracle系统内置的权限

  select * from system_privilege_map;

查询用户拥有哪些权限:
SQL> select * from dba_role_privs;  查看用户拥有的角色
SQL> select * from dba_sys_privs;   查看用户拥有的权限
SQL> select * from role_sys_privs;  查看角色拥有的权限

 

  这里特别提到一个另外的知识点,create any table和create table有什么区别,create table只能老老实实的给自己的scheam创建表,而不能以create table otherschema.tablename这样的方式给其他的schema创建表。

 

  系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。

比如我们现在执行如下操作:

SQL> conn / as sysdba

Connected.

SQL> create user jie1 identified by jie ;  --创建用户jie1

User created.

SQL> create user jie2 identified by jie;  --创建用户jie2

User created.

SQL> grant connect,create sessionto jie1;  --允许jie1登录

Grant succeeded.

SQL> grant connect,create session to jie2;  --允许jie2登录

Grant succeeded.

SQL> grant create table to jie1 with admin option; --允许jie1建表可以传递改权限 

Grant succeeded.

SQL> conn jie1/jie;  --用户jie1 登录

Connected.

SQL> create table tb_jie (id number);  --验证权限是否生效

Table created.

SQL> grant create table to jie2;  --用户jie1 将权限传递给  jie2

Grant succeeded.

SQL> conn jie2/jie;   --用户jie2登录

Connected.

SQL> create table tb_jie(id number); -- 用户jie2可以创建(权限可以传递)

Table created.

SQL> conn / as sysdba;   --用户sys登录

Connected.

SQL> revoke create table from jie1;  --收回用户jie1的权限

Revoke succeeded.

SQL> conn jie1/jie  --用户jie1 登录

Connected.

SQL> create table tb_jie2(id number);  --用户jie1创建表失败

create table tb_jie2(id number)

*

ERROR at line 1:

ORA-01031: insufficient privileges

SQL> conn jie2/jie  --用户jie2 登录

Connected.

SQL> create table tb_jie(id number); -- 用户jie2仍然可以创建

Table created.

说明:

(1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
(2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。

 

系统权限回收:系统权限只能由DBA用户回收
命令:SQL> Revoke create table from jie1;

系统权限收回的时候是不会级联收回的,以上已经证明 

 

2、对象权限

  我们看看对象权限(object permission),这里是针对于特定的对象的权限,系统权限是限定了可以操作的功能,而object permission就更细化了,具体到了某个对象你可以操作的功能的权限。

  Select * from dba_tab_privs;  可以查出系统所具有的对象权限

 

查询方法和上边的一样,主要是介绍下,他的权限传递(with grant option)的问题

下边来个测试(我已将前边测试的用户都删除了,重新测试)

 

SQL> create user jie1 identified by jie;   --sys用户登录  新建用户jie1

User created.

SQL> grant connect,create session,create table to jie1;  --赋予权限

Grant succeeded.

SQL> create user jie2 identified by jie;   --sys用户登录  新建用户jie2

User created.

SQL> grant connect,create session,create table to jie2;   --赋予权限

Grant succeeded.

SQL> create table jie1.tb_jie(id number);  --给sys自己建张表

Table created.

----------------------这些都是准备工作------------------------------

开始测试

SQL> grant select on sys.dba_users to jie1 with grant option;

   --允许jie1可以查看sys用户的dba_users表并可以传递

Grant succeeded.

SQL> conn jie1/jie;  --用户jie1 登录

Connected.

SQL> select username from sys.dba_users where rownum<2;

USERNAME

------------------------------

SYS

SQL> grant select on sys.dba_users to jie2; 

Grant succeeded.

SQL> conn jie2/jie;  --用户jie2 登录

Connected.

SQL> select username from sys.dba_users where rownum<2;

USERNAME

------------------------------

SYS

------------------说明对象权限是可以传递的------------------

权限收回

 

SQL> conn / as sysdba   --sys用户登录

Connected.

SQL> revoke select on sys.dba_users from jie1;--收回jie1的查询dba_users的权限

Revoke succeeded.

SQL> conn jie1/jie;   --jie1用户登录

Connected.

SQL> select * from sys.dba_users;  

select * from sys.dba_users    

                  *

ERROR at line 1:

ORA-00942: table or view does not exist  --因为权限被收回,所以查不到这张表了

SQL> conn jie2/jie;   --jie2用户登录

Connected.

SQL> select * from sys.dba_users;

select * from sys.dba_users

                  *

ERROR at line 1:

ORA-00942: table or view does not exist --因为权限被收回,所以查不到这张表了

 

综上所述,对象权限可以传递赋予,但是回收的时候是级联回收的。

转载自:http://blog.sina.com.cn/s/blog_a5a24bcb01010lz9.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: