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

本帖最后由 zcs0237 于 2013-8-3 21:59 编辑

本专题的三篇文章

第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

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 optionSQL> 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 sessionSQL> 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 optionSQL> 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=selectSQL> 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值