系统权限与用户权限
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
权限的种类:系统权限 和 对象权限
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 session to 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 --因为权限被收回,所以查不到这张表了
综上所述,对象权限可以传递赋予,但是回收的时候是级联回收的。