Oracle系統權限與對象權限


oracle權限分為:

系統權限: 允許用戶執行特定的數據庫動作,如創建表、創建索引、連接實例等。

對象權限: 允許用戶操縱一些特定的對象,如讀取視圖,可更新某些列、執行存儲過程等。

 

系統權限

超過一百多種有效的權限(查詢約209種)

SQL> select count(*) from system_privilege_map;

  COUNT(*)
----------
       209

  

數據庫管理員具有高級權限以完成管理任務,例如:

– 創建新用戶

– 刪除用戶

– 刪除表

– 備份表

 

常用的系統權限:

create session 創建會話

create sequence 創建序列

create synonym 創建同名對象

create table 在用戶模式中創建表

create any table 在任何模式中創建表

drop table 在用戶模式中刪除表

drop any table 在任何模式中刪除表

create procedure 創建存儲過程

execute any procedure 執行任何模式的存儲過程

create user 創建用戶

drop user 刪除用戶

create view 創建視圖

 

授予系統權限

grant privilege [, privilege...] to user [, user| role, public...] [with admin option];

  

選項:

public 所有用戶都有的角色

with admin option 使用戶同樣具有分配權限的權利,可將此權限授予別人

 

授予系統權限

1、創建用戶...

2、授權

 

例:

鏈接到會話,創建表

grant create session,create table to test01;

  

創建表並且可以授權其他用戶

grant create session to test01 with admin option;

  

注:

1)如果使用WITH ADMIN OPTION為某個用戶授予系統權限,那么對於被這個用戶授予相同權限的所有用戶來說,取消該用戶的系統權限並不會級聯取消這些用戶的相同權限。

2)系統權限無級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限不受影響;系統權限可以跨用戶回收,即A可以直接收回C用戶的權限。 

 

執行任意存儲過程權限

grant execute any procedure to test01;

  

注: execute any procedure 不能和 create any procedure 授權統一普通用戶

授權所有用戶dba

grant dba to public --不能做的哈。。

移除所有用戶的dba權限

revoke dba from public --不能做的哈。

 

使用系統權限

創建test用戶,默認表空間test,授權創建會話、鏈接數據庫權限

create user test identified by test default tablespace test;

grant create session,connect to test;

  

使用表空間權限

grant unlimited tablespace to test; --授權可以使用默認表空間的權限

conn itpux/itpux --鏈接會話

create table itpuxt1 as select * from user_tables; --在默認表空間創建表

  

顯示系統權限

dba_sys_privs --針對所有用戶被授予的系統權限

user_sys_privs --針對當前登陸用戶被授予的系統權限

 

查看所有系統權限:

select * from system_privilege_map;

  

顯示用戶所具有的系統權限:

select * from dba_sys_privs;

  

顯示當前用戶所具有的系統權限:

select * from user_sys_privs;

  

顯示當前會話所具有的系統權限:

select * from session_privs;

  

在sys用戶下查TEST用戶的權限

select * from dba_sys_privs where grantee='TEST';

select * from dba_sys_privs where grantee in ('TEST','SYSTEM') ;

select * from dba_sys_privs where grantee in ('TEST','SYSTEM') order by grantee ;

   

收回系統權限

賦予系統權限

grant create table to test;

  

收回賦予的系統權限

revoke create table from test;

  

注意:對於使用with admin option 為某個用戶授予系統權限,那么對於被這個用戶授予相同權限的所有用戶來說,取消該用戶的系統權限並不會級聯取消這些用戶的相同權限

 

對象權限

不同的對象具有不同的對象權限

對象的擁有者擁有所有權限

對象的擁有者可以向外分配權限

oracle一共有8種對象權限

 

對象授權

grant object_priv|all [(columns)] on object to {user|role|public} [with grant option];

all:所有對象權限

public:授給所有的用戶

with grant option:允許用戶再次給其它用戶授權

conn /as sysdba;

grant select on scott.emp to test; --授權test查找scott.emp表的權限

grant select on scott.emp to public; --授權所有用戶查找scott.emp表的權限

grant update(sal,mgr) on scott.emp to test with grant option;

conn itpux/itpux

select * from scott.emp;

update scott.emp set sal=sal+100;

  

授予系統權限與授予對象權限的語法差異:

授予對象權限時需要指定關鍵字on,從而能夠確定權限所應用的對象, 對於表和視圖可以指定特定的列來授權。

 

查詢權限分配情況

-- 數據字典視圖

role_sys_privs role_tab_privs

user_tab_privs_made

user_tab_privs_recd

user_col_privs_made

user_col_privs_recd

user_sys_privs

user_tab_privs

user_role_privs

 

查詢已授予的對象權限(即某個用戶對哪些表對哪些用戶開放了對象權限)

sql> conn scott/scott

sql> select * from user_tab_privs_made; --下面是scott用戶開放的對象權限

  

查詢列上開放的對象權限

sql> select * from user_col_privs_made;

   

查詢已接受的對象特權(即某個用戶被授予了哪些表上的哪些對象特權)

sql> select * from user_tab_privs_recd;

  

查詢用戶已接受列的對象權限

sql> select * from user_col_privs_recd;

  

收回對象權限

使用revoke 語句收回權限

使用with grant option 子句所分配的權限同樣被收回

revoke {privilege [, privilege...]|all} --on object --from {user[, user...]|role|public} -- [cascade constraints];--收回權限

 

cascade constraints

為處理引用完整性時需要

 對於要回收查詢/修改列的權限,可以直接懟表級進行回收,不需要到具體列。

SQL> conn /as sysdba;

Connected.

SQL> revoke select on scott.emp from test;

Revoke succeeded.

SQL> revoke update(sal,mgr) on scott.emp from test;

revoke update(sal,mgr) on scott.emp from test

* ERROR at line 1:

ORA-01750: UPDATE/REFERENCES may only be REVOKEd from the whole table, not by column

SQL> revoke update on scott.emp from test;

Revoke succeeded.

  

其它

檢查dba權限的用戶

select * from dba_role_privs where granted_role='dba';

  

查看用戶具有的系統權限:

select * from session_privs;

  

總結

使用create user語句創建用戶,alter user語句修改用戶,其語法大致相同 drop user username [cascade] 會刪除用戶所擁有的所有對象及數據。

系統權限允許用戶在數據庫中執行特定的操作,如執行ddl語句。

with admin option 使得該用戶具有將自身獲得的權限授予其它用戶的功能。 但收回系統權限時,不會從其它帳戶級聯取消曾被授予的相同權限。

對象權限允許用戶對數據庫對象執行特定的操作,如執行dml語句。

with grant option 使得該用戶具有將自身獲得的對象權限授予其它用戶的功能 但收回對象權限時,會從其它帳戶級聯取消曾被授予的相同權限。

系統權限與對象權限授予時的語法差異為對象權限使用了on object_name 子句。

public 為所有的用戶

all:對象權限中的所有對象權限

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM