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
权限的种类:系统权限 和 对象权限
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
相关文章推荐
- oracle的系统和对象权限
- Oracle 用户、对象权限、系统权限
- Oracle 用户、对象权限、系统权限
- oracle-dba-系统和对象权限管理
- Oracle笔记之对象权限与系统权限总结
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典(细节版)
- Oracle PL/SQL之对象权限与系统权限的撤销差异
- Oracle 用户、对象权限、系统权限
- oracle的系统和对象权限 Oracle 查看用户权限
- Oracle 用户、对象权限、系统权限
- oracle中的系统权限和对象权限
- Oracle 用户、对象权限、系统权限
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
- oracle的系统和对象权限
- oracle: Oracle 用户、对象权限、系统权限
- Oracle PL/SQL之对象权限与系统权限的撤销差异
- Oracle 用户、角色、权限(系统权限、对象权限)的数据字典表
- Oracle 用户、对象权限、系统权限
- oracle对象权限、系统权限与角色对比
- Oracle查出一个用户具有的所有系统权限和对象权限