Oracle Grant / REVOKE 正解

season0891發表於2013-05-14

GRANT
名稱
GRANT — 賦予一個使用者,一個組或所有使用者訪問許可權

GRANT privilege [, ...] ON object [, ...]    TO { PUBLIC | GROUP group | username }
輸入
privilege 
可能的許可權有: 
SELECT 
訪問宣告的表/檢視的所有列/欄位. 
INSERT 
向宣告的表中插入所有列欄位. 
UPDATE 
更新宣告的所有列/欄位. 
DELETE 
從宣告的表中刪除所有行. 
RULE 
在表/檢視上定義規則 (參見 CREATE RULE 語句). 
ALL 
賦予所有許可權. 
object 
賦予許可權的物件名.可能的物件是: 
table (表) 
view (檢視) 
sequence (序列) 
index (索引) 
PUBLIC 
代表是所有使用者的簡寫. 
GROUP group 
將要賦予許可權的組 group .目前的版本中,組必須是用下面方法顯式建立的. 
username 
將要賦予許可權的使用者名稱.PUBLIC 是代表所有使用者的簡寫. 
輸出
CHANGE 
如果成功,返回此資訊. 
ERROR: ChangeAcl: class "object" not found 
如果所宣告的物件不可用或不可能對宣告的組或使用者賦予許可權. 
描述
GRANT 允許物件的建立者給某使用者或某組或所有使用者(PUBLIC)某些特定的許可權.物件建立後,除了建立者外,除非建立者賦予(GRANT)許可權,其他人沒有訪問物件的許可權.

一旦使用者有某物件的許可權,他就可以使用那個特權.不需要給建立者賦予(GRANT)物件的許可權,建立者自動擁有物件的所有許可權,包括刪除它的許可權.

注意
目前,要想在 Postgres 裡面只賦予幾列許可權,你必須建立一個包含那幾列的檢視(view),然後把許可權賦予那幾個檢視。

使用 psql /z 命令獲取關於現存物件許可權的更多資訊:

Database    = lusitania   +------------------+---------------------------------------------+   |  Relation        |        Grant/Revoke Permissions             |   +------------------+---------------------------------------------+   | mytable          | {"=rw","miriam=arwR","group todos=rw"}      |   +------------------+---------------------------------------------+   Legend:         uname=arwR -- privileges granted to a user   group gname=arwR -- privileges granted to a GROUP              =arwR -- privileges granted to PUBLIC                  r -- SELECT                  w -- UPDATE/DELETE                  a -- INSERT                  R -- RULE               arwR -- ALL
小技巧: 目前,要建立一個 GROUP (組), 你將不得不手工向表 pg_group 中插入資料,像:

INSERT INTO pg_group VALUES ('todos');CREATE USER miriam IN GROUP todos;
參考 REVOKE 語句重新分配訪問許可權.

用法
給所有使用者向表 films 插入記錄的許可權:

GRANT INSERT ON films TO PUBLIC;
賦予使用者 manuel 操作檢視 kinds 的所有許可權:

GRANT ALL ON kinds TO manuel;
相容性
SQL92
SQL92 GRANT 語法允許對錶中的某單獨列/欄位設定許可權,並且允許設定一許可權以賦予別人相同許可權.

GRANT privilege [, ...]    ON object [ ( column [, ...] ) ] [, ...]    TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
這些欄位與 Postgres 實現是相容的,除了下面一些例外:

privilege 
SQL92 允許宣告附加的許可權: 
SELECT 
  
REFERENCES 
允許在一個宣告的表的整合約束中使用某些或全部列/欄位. 
USAGE 
允許使用一個域,字符集,集合或事務.如果宣告的物件不是表/檢視, privilege 只能宣告為 USAGE. 
object 
[ TABLE ] table 
SQL92 允許一個附加的非函式關鍵字 TABLE. 
CHARACTER SET 
允許使用宣告的字符集. 
COLLATION 
允許使用宣告的集合序列. 
TRANSLATION 
允許使用宣告的字符集轉換. 
DOMAIN 
允許使用宣告的域. 
WITH GRANT OPTION 
允許向別人賦予同樣許可權.
**************************************************************************************************************************

我以scott/tiger登入以後建立了表以後插入資料提示我插入成功了,但是在查詢資料的時候是沒有記錄的,原因是我的scott使用者沒有對這個表插入的許可權。這時要以system登入以後用grant賦予scottr 中某個表的相應的許可權。

GRANT
名稱
GRANT— 賦予一個使用者,一個組或所有使用者訪問許可權

GRANT privilege [, ...] ON object [, ...]    TO { PUBLIC | GROUP group | username } 
輸入
privilege 
可能的許可權有: 
SELECT 
訪問宣告的表/檢視的所有列/欄位. 
INSERT 
向宣告的表中插入所有列欄位. 
UPDATE 
更新宣告的所有列/欄位. 
DELETE 
從宣告的表中刪除所有行. 
RULE 
在表/檢視上定義規則 (參見 CREATE RULE 語句). 
ALL 
賦予所有許可權. 
object 
賦予許可權的物件名.可能的物件是: 
table (表) 
view (檢視) 
sequence (序列) 
index (索引) 
PUBLIC 
代表是所有使用者的簡寫. 
GROUP group 
將要賦予許可權的組 group .目前的版本中,組必須是用下面方法顯式建立的. 
username 
將要賦予許可權的使用者名稱.PUBLIC 是代表所有使用者的簡寫. 
輸出
CHANGE 
如果成功,返回此資訊. 
ERROR: ChangeAcl: class "object" not found 
如果所宣告的物件不可用或不可能對宣告的組或使用者賦予許可權. 
描述
GRANT允許物件的建立者給某使用者或某組或所有使用者(PUBLIC)某些特定的許可權.物件建立後,除了建立者外,除非建立者賦予(GRANT)許可權,其他人沒有訪問物件的許可權.

一旦使用者有某物件的許可權,他就可以使用那個特權.不需要給建立者賦予(GRANT)物件的許可權,建立者自動擁有物件

------------------註明:

、許可權是使用者對一項功能的執行權力。在Oracle 中,根據系統管理方式不同,將許可權分為系統許可權 與實體許可權 兩類。

系統許可權 是指是否被授權使用者可以連線到資料庫上,在資料庫中可以進行哪些系統操作。

實體許可權 是指使用者對具體的模式實體 (schema)所擁有的許可權。這樣講可以有些模糊。

舉個例子來說:select any table是系統許可權,它表示可以檢視任何表。而select on table1是實體許可權,表示對錶table1的查詢許可權。

二、見下下面的表


三、系統許可權授權命令的使用 
語法: 
GRANT 許可權名 TO 使用者|角色|PUBLIC 
其中,PUBLIC表示將許可權賦給資料庫中所有的使用者 
例:賦給使用者USER1許可權CREATE TABLE的授權命令如下: 
SQL>GRANT CREATE TABLE TO USER1; 
授權語句還可以增加WITH ADMIN OPTION選項,表示被授權的使用者可以將它所得許可權賦給其它使用者,如: 
SQL>GRANT CREATE TABLE,CREATE VIEW TO USER1,USER2 WITH ADMIN OPTION; 
若要了解各使用者所擁有的系統許可權,可以查詢資料字典USER_SYS_PRIVS、ROLE_SYS_PRIVS。 
若要回收許可權,則使用REVOKE命令,如: 
SQL>REVOKE CREATE TABLE FROM USER1;

四、實體許可權管理 
  實體許可權是指某一使用者對某一特定schema物件的操作許可權。 
1.實體許可權分類 
  不同的實體型別有不同的實體許可權,如下表


2.實體許可權的授命令 
語法如下: 
GRANT 實體許可權名|ALL TO 使用者|角色|PUBLIC 
其中,ALL表示實體的所有實體許可權。 
如: 
SQL>GRANT SELECT ON BOOKS_QUTHORS TO USER1; 
以下語句用來查詢表的實體許可權的授權資訊: 
SQL>SELECT * FROM USER_TAB_PRIVES 
若要回收實體許可權,使用REVOKE,其語法如下: 
REVOKE 實體許可權名|ALL ON 實體名 FROM 使用者名稱|角色名|PUBLIC。

      alter any cluster 修改任意簇的許可權 
  alter any index 修改任意索引的許可權 
  alter any role 修改任意角色的許可權 alter any cluster 
  alter any sequence 修改任意序列的許可權 
  alter any snapshot 修改任意快照的許可權 
  alter any table 修改任意表的許可權 
  alter any trigger 修改任意觸發器的許可權 
  alter cluster 修改擁有簇的許可權 
  alter database 修改資料庫的許可權 
  alter procedure 修改擁有的儲存過程許可權 
  alter profile 修改資源限制簡表的許可權 
  alter resource cost 設定佳話資源開銷的許可權 
  alter rollback segment 修改回滾段的許可權 
  alter sequence 修改擁有的序列許可權 
  alter session 修改資料庫會話的許可權 
  alter sytem 修改資料庫伺服器設定的許可權 
  alter table 修改擁有的表許可權 
  alter tablespace 修改表空間的許可權 
  alter user 修改使用者的許可權 
  analyze 使用analyze命令分析資料庫中任意的表、索引和簇 
  audit any 為任意的資料庫物件設定審計選項 
  audit system 允許系統操作審計 
  backup any table 備份任意表的許可權 
  become user 切換使用者狀態的許可權 
  commit any table 提交表的許可權 
  create any cluster 為任意使用者建立簇的許可權 
  create any index 為任意使用者建立索引的許可權 
  create any procedure 為任意使用者建立儲存過程的許可權 
  create any sequence 為任意使用者建立序列的許可權 
  create any snapshot 為任意使用者建立快照的許可權 
  create any synonym 為任意使用者建立同義名的許可權 
  create any table 為任意使用者建立表的許可權 
  create any trigger 為任意使用者建立觸發器的許可權 
  create any view 為任意使用者建立檢視的許可權 
  create cluster 為使用者建立簇的許可權 
  create database link 為使用者建立的許可權 
  create procedure 為使用者建立儲存過程的許可權 
  create profile 建立資源限制簡表的許可權 
  create public database link 建立公共資料庫鏈路的許可權 
  create public synonym 建立公共同義名的許可權 
  create role 建立角色的許可權 
  create rollback segment 建立回滾段的許可權 
  create session 建立會話的許可權 
  create sequence 為使用者建立序列的許可權 
  create snapshot 為使用者建立快照的許可權 
  create synonym 為使用者建立同義名的許可權 
  create table 為使用者建立表的許可權 
  create tablespace 建立表空間的許可權 
  create user 建立使用者的許可權 
  create view 為使用者建立檢視的許可權 
  delete any table 刪除任意表行的許可權 
  delete any view 刪除任意檢視行的許可權 
  delete snapshot 刪除快照中行的許可權 
  delete table 為使用者刪除錶行的許可權 
  delete view 為使用者刪除檢視行的許可權 
  drop any cluster 刪除任意簇的許可權 
  drop any index 刪除任意索引的許可權 
  drop any procedure 刪除任意儲存過程的許可權 
  drop any role 刪除任意角色的許可權 
  drop any sequence 刪除任意序列的許可權 
  drop any snapshot 刪除任意快照的許可權 
  drop any synonym 刪除任意同義名的許可權 
  drop any table 刪除任意表的許可權 
  drop any trigger 刪除任意觸發器的許可權 
  drop any view 刪除任意檢視的許可權 
  drop profile 刪除資源限制簡表的許可權 
  drop public cluster 刪除公共簇的許可權 
  drop public database link 刪除公共資料鏈路的許可權 
  drop public synonym 刪除公共同義名的許可權 
  drop rollback segment 刪除回滾段的許可權 
  drop tablespace 刪除表空間的許可權 
  drop user 刪除使用者的許可權 
  execute any procedure 執行任意儲存過程的許可權 
  execute function 執行儲存函式的許可權 
  execute package 執行儲存包的許可權 
  execute procedure 執行使用者儲存過程的許可權 
  force any transaction 管理未提交的任意事務的輸出許可權 
  force transaction 管理未提交的使用者事務的輸出許可權 
  grant any privilege 授予任意系統特權的許可權 
  grant any role 授予任意角色的許可權 
  index table 給表加索引的許可權 
  insert any table 向任意表中插入行的許可權 
  insert snapshot 向快照中插入行的許可權 
  insert table 向使用者表中插入行的許可權 
  insert view 向使用者檢視中插行的許可權 
  lock any table 給任意表加鎖的許可權 
  manager tablespace 管理(備份可用性)表空間的許可權 
  references table 參考表的許可權 
  restricted session 建立有限制的資料庫會話的許可權 
  select any sequence 使用任意序列的許可權 
  select any table 使用任意表的許可權 
  select snapshot 使用快照的許可權 
  select sequence 使用使用者序列的許可權 
  select table 使用使用者表的許可權 
  select view 使用檢視的許可權 
  unlimited tablespace 對錶空間大小不加限制的許可權 
  update any table 修改任意表中行的許可權 
  update snapshot 修改快照中行的許可權 
  update table 修改使用者表中的行的許可權 
  update view 修改檢視中行的許可權

http://blog.csdn.net/wangshengfeng1986211/article/details/6004228


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90618/viewspace-761065/,如需轉載,請註明出處,否則將追究法律責任。

相關文章