Oracle系统权限与实体权限精简总结

第01部分 权限概述
一、新建用户无任何权限、角色
新建用户默认没有create session权限、connect角色。
二、权限、角色相关的数据字典
SQL> select table_name from dict where TABLE_NAME like '%\_PRIVS' escape '\' ORDER BY table_name ASC;
ALL_COL_PRIVS           表示列上的授权,用户和PUBLIC是被授予者


ALL_TAB_PRIVS          表示对象上的授权,用户是PUBLIC或被授予者或用户是属主


DBA_COL_PRIVS          数据库列上的所有授权


DBA_ROLE_PRIVS        显示已授予用户或其他角色的角色


DBA_SYS_PRIVS          已授予用户或角色的系统权限


DBA_TAB_PRIVS         数据库对象上的所有权限


ROLE_ROLE_PRIVS      显示已授予用户的角色


ROLE_SYS_PRIVS        显示通过角色授予用户的系统权限


ROLE_TAB_PRIVS        显示通过角色授予用户的对象权限


SESSION_PRIVS           显示用户现在可利用的所有系统权限


USER_COL_PRIVS        显示列上的权限,用户是属主、授予者或被授者


USER_ROLE_PRIVS       显示已授予给用户的所有角色


USER_SYS_PRIVS        显示已授予给用户的所有系统权限


USER_TAB_PRIVS        显示已授予给用户的所有对象权限


************************************************
第02部分 系统权限(使用系统资源)
02.1 常用系统权限
SQL> select count(*) from sys.system_privilege_map;
  COUNT(*)
----------
       166                 //10g共有166种系统权限
一、有关用户的系统权限如下:
CREATE USER:创建其他的用户(需要具有DBA角色的权限)
ALTER USER:修改其他用户的设置
DROP USER:删除其他用户
二、有关表的系统权限如下
GRANT select any table to zcs;  zcs用户无法访问SYS用户中的DBA_系列视图、数据字典表
UPDATE ANY TABLE:修改任何用户的表中的数据和视图中的数据
DELETE ANY TABLE:删除任何用户表中的数据和视图中的数据
CREATE ANY TABLE:在任何模式中创建表
DROP ANY TABLE:删除任何模式中所创建的表
ALTER ANY TABLE:修改任何模式中所创建的表
CREATE TABLE:用户在自己的模式中创建表
三、有关表空间的系统权限如下:
CREATE TABLESPACE:创建表空间的权限
DROP TABLESPACE:删除表空间的权限
ALTER TABLESPACE:修改表空间的权限
UNLIMITED TABLESPACE:使用全部表空间的权限
四、有关索引的系统权限如下:
CREATE ANY INDEX:在任何模式中创建索引的权限
DROP ANY INDEX:在任何模式中删除索引的权限
ALTER ANY INDEX:在任何模式中修改索引的权限
五、有关会话的系统权限如下
CREATE SESSION:连接数据库的权限
ALTER SESSION:发ALTER SESSION语句的权限
六、其他的系统权限:
CREATE VIEW:在用户自己的模式中创建视图的权限
CREATE SEQUENCE:在用户自己的模式中创建序列号的权限
CREATE PROCEDURE:在用户自己的模式中创建过程的权限
七、administrative privilege对比SYSDBA &SYSOPER
注:改字符集会用到alter system enable restricted session仅管理员能登录,其它用户登录须GRANT restricted session to
sysdba
sysoper
startup
startup
shutdown
shutdown
alter database open/mount/backup
alter database open/mount/backup
create spfile
create spfile
alter database archivelog
alter database archivelog
拥有restricted session权限
拥有restricted session权限
登录之后用户是sys
登录之后用户是public
可以让用户作为sys用户连接
可进行一些基本的操作,但不能查看用户数据
alter database recover
只能完全恢复,不能执行不完全恢复
改变字符集
none
Create/ drop database
None
SQL> show user
USER is "SYS"   //schema为SYS
SQL> select name from sys.system_privilege_map where name like '%SYS%' and NAME not like '%SYSTEM%';
NAME       //SYSDBA和SYSOPER是权限名,而非角色名
--------------------
SYSOPER
SYSDBA
SQL> select * from v$pwfile_users
USERNAME SYSDBA   SYSOPER; //列sysdba/sysoper用户
-------- -------- --------
SYS      TRUE     TRUE
TEST     TRUE     FALSE
SQL> conn / as sysoper
Connected.
SQL> show user
USER is "PUBLIC"     //schema为PUBLIC
02.2 系统权限传递(撤消时不级联)
撤消带有admin option 的system privileges 时,连带的权限将保留。
一、准备工作
SQL> CONN / AS SYSDBA
Connected.
SQL> create user zcs1 identified by zcs1;
User created.           // sys新增zcs1/zcs1
SQL> create user zcs2 identified by zcs2;
User created.          // sys新增zcs2/zcs2
二、SYS授权zcs1=create session+with admin option
SQL> CONN / AS SYSDBA
Connected.
SQL> grant create session to zcs1 with admin option;
Grant succeeded        //用sys授予zcs1 create session
SQL> conn zcs1/zcs1
Connected.
SQL> select * from user_sys_privs;
USERNAME       PRIVILEGE         ADM
-------------  ---------------     ---
ZCS1           CREATE SESSION     YES
三、zcs授权zcs2= create session
SQL> conn zcs1/zcs1
Connected.
SQL> grant create session to zcs2;
Grant succeeded.
SQL> conn zcs2/zcs2
Connected.
SQL> select * from user_sys_privs;
USERNAME        PRIVILEGE       ADM
--------------- --------------- ---
ZCS2            CREATE SESSION  NO
四、SYSDBA撤消zcs1的create session,zcs无影响
SQL> conn / as sysdba
Connected.
SQL> revoke create session from zcs1;
Revoke succeeded.
SQL> conn zcs1/zcs1
ERROR:
ORA-01045: user ZCS1 lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.
SQL> conn zcs2/zcs2
Connected.   // 验证zcs2是否还有create session权限
==============增补START====================
SQL> select * from session_privs;
CREATE SESSION               //查询当前用户所拥有的权限
SQL>  select * from user_sys_privs;
USERNAME  PRIVILEGE       ADM
-------- -     -------------------       ---
ZCS1     CREATE SESSION     NO
SQL> conn / as sysdba
Connected.
SQL> select * from DBA_SYS_PRIVS where grantee='ZCS1';
GRANTEE      PRIVILEGE       ADM
------------ ------------------------------       ---
ZCS1         CREATE SESSION     NO   //须DBA权限
================增补END==========================
************************************************
第03部分 实体权限(操纵特定的对象)
03.1实体权限分类
一、列出所有权限
SQL> select * from dict where TABLE_NAME='DBA_OBJECTS';
DBA_OBJECTS          All objects in the database
SQL> select OBJECT_NAME,OBJECT_TYPE from dba_objects where OBJECT_NAME='TABLE_PRIVILEGE_MAP';
TABLE_PRIVILEGE_MAP  TABLE
TABLE_PRIVILEGE_MAP  SYNONYM
SQL> select name from table_privilege_map;
ALTER            AUDIT
COMMENT      DELETE
GRANT          INDEX
INSERT          LOCK
RENAME        SELECT
UPDATE        REFERENCES
EXECUTE       CREATE
READ            WRITE
ENQUEUE      DEQUEUE
UNDER          ON COMMIT REFRESH
QUERY          REWRITE DEBUG
FLASHBACK   MERGE VIEW
24 rows selected..
二、使用GRANT授权
SQL>grant update on t1 to zcs with grant option;
SQL>grant update(id) on t10 to zcs with grant option;
SQL>grant all on t1 to public;  // public表示是全体用户,此处all不包括drop t1。
03.2实体权限传递(撤消时会级联)
一、准备工作
SQL> CONN / AS SYSDBA
Connected.
SQL> grant create session to zcs1;
Grant succeeded.// 授予zcs1接数据库的权限
SQL> grant create session to zcs2;
Grant succeeded.// 授予zcs2连接数据库的权限
SQL> create table test1(id int);
Table created.   //建test1表
SQL> insert into test1 values(1);
1 row created.  //向test1插入数据
二、SYS授权zcs1=select+with grant option
SQL> grant select on test1 to zcs1 with grant option;
Grant succeeded.  // 授予用户zcs1查询表权限
SQL> conn zcs1/zcs1
Connected.
SQL> select * from sys.test1;
        ID NAME
---------- ---------
         1 zcs1
三、ZCS1 授权ZCS2=select
SQL> show user
USER is "ZCS1"
SQL> grant select on sys.test1 to zcs2;
Grant succeeded.  //用zcs1用户授予zcs2查询表test1权限
SQL> conn zcs2/zcs2
Connected.
SQL> select * from sys.test1;
        ID NAME
---------- ---------
         1 zcs1
         2 zcs2
三、SYS撤消ZCS1的select,zcs2也受影响
SQL> conn / as sysdba
Connected.
SQL> revoke select on test1 from zcs1;
Revoke succeeded.
SQL> conn zcs1/zcs1
Connected.
SQL> select * from sys.test1;
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> conn zcs2/zcs2
Connected.
SQL> select * from sys.test1;
ERROR at line 1:
ORA-00942: table or view does not exist
***************************************************
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值