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
Oracle系统权限与实体权限精简总结_第1张图片
2013-8-3 21:31 上传
下载附件 (22.65 KB)


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

你可能感兴趣的:(Oracle系统权限与实体权限精简总结)