Oracle 11g學習筆記–特權
系統特權
系統特權允許用戶在數據庫中執行特定的操作;
常用的系統特權如表
系統特權 | 允許執行的操作 |
---|---|
create session | 連接到數據上 |
create sequence | 創建序列 |
create synonym | 創建同名對象 |
create table | 在用戶模式中創建表 |
create any table | 在任何模式中創建表 |
drop table | 刪除用戶模式中的表 |
drop table | 刪除任何模式中的表 |
create procedure | 創建存儲過程 |
execute any procedure | 執行任何模式中的存儲過程 |
create user | 創建用戶 |
drop user | 刪除用戶 |
create view | 創建視圖 |
註釋:
序列:一系列數字,通常用來自動填充主鍵列。
視圖:視圖是存儲的過程,可以用來對多個表和多列進行訪問,然後就可以查詢表一樣查詢視圖;
--授權
--with admin option 的意思是授權用戶可以繼續將自己的權限授予其他用戶
grant create session, execute any procedure to uer_name with admin option;
--授權給所有人
grant create session to public;
檢查授予用戶的系統特權
select *from user_sys_privs;
撤銷用戶的系統特權
--從user_name上撤銷create table的特權
revoke create table from user_name;
對象特權
對象特權允許用戶對數據庫對象執行的特定操作,如DML語句;
向用戶授予對象特權
--授權給user_name,允許對products表進行select, insert, update 等操作;
grant select , insert, update on store.products to user_name;
--將更新t表column_name的權限給u2;
grant update(column_name) on u1.t to u2;
檢查已授予的對象特權
通過查詢user_tab_privs_made可以檢查某個用戶對哪些表向其他用戶開放了那些對象特權;
user_tab_privs_made的部分列
列 | 類型 | 說明 |
---|---|---|
grantee | varchar2(30) | 該特權所授予的用戶 |
table_name | varchar2(30) | 所授予的特權所操作的對象 |
grantor | varchar2(30) | 授權者 |
privilege | varchar2(30) | 對該對象授予的特權 |
grantable | varcahr2(3) | 特權所授予的用戶是否可以將這種特權在授予給其他用戶,該值等於yes或者no |
hierarchy | varchar(3) | 特權是否構成層次關係。該值等於yes或者no |
檢查已接受的對象特權
通過user_tab_privs_recd表可以查詢某個用戶被授予了哪些表上的哪些特權;
列 | 類型 | 說明 |
---|---|---|
owner | varchar(30) | 擁有該對象的用戶 |
table_name | varchar(30) | 所授予的特權所操作的對象名 |
grantor | varchar(30) | 授權者 |
privilege | varchar(40) | 對該對象授予的特權 |
grantable | varchar(3) | 特權所有與的用戶是否可以將這種特權再授予其他用戶,該值等於yes或no |
hierarchy | varchar(3) | 特權是否構成層次關係,該值等於yes或no |
通過user_col_privs_recd可以檢查某個用戶被授予了哪些列的對象特權。
列 | 類型 | 說明 |
---|---|---|
owner | varchar(30) | 擁有該對象的用戶 |
table_name | varchar(30) | 所授予的特權所操作的對象名 |
column_name | 所授予的特權所操作的列名 | |
grantor | varcahr(30) | 授權者 |
privilege | varchar(40) | 對該對象授予的特權 |
grantable | varchar(3) | 特權所授予的用戶是否可以將這種特權再授予給其他用戶 |
使用對象特權
當一個用戶要訪問另一個用戶的表時,需要加上用戶名:
select *from user_name.table_name;
同名對象
所謂的同名對象就相當於代號,如你可能訪問某個用戶的表同上面的方式一樣;但是創建了同名對象之後,你就可以不用輸入用戶名了,直接輸入別名就好了,使用方法如下:
注意:此處,假設用戶user1要訪問user2的friends 表, 當然前提是你得有訪問該用戶表的權限;
●授權
connect sys/admin as sysdba;
grant create synonym to user1;
●創建同名對象
connect user2/password
create synonym his_friends for user2.frineds;
select * from his_friends;
●銷燬同名對象
drop synonym his friends;
公共同名對象
我們也可以爲表創建公共同名對象,在創建公共同名對象之後,所有的用戶都可以看到這個同名對象。
使用步驟:
●授權
connect sys/admin as sysdba
grant create public synonym to user1;
●創建公共同名對象
connect user1/admin
create public synonym his_friends for user1.friends;
●使用(注意:此時user2必須有訪問user1的friends表的權限)
connect user2/admin
select *from his_friends;
撤銷用戶的對象特權
同撤銷其他權限一樣,依然使用revoke
connect user1/admin
revoke select on user2.table_name from user1;