許可權是執行特殊SQL語句的權利。資料庫管理員 (DBA) 是一個具有授予用戶訪問資料庫及其對象的能力的高級用戶。用戶需要系統許可權來訪問資料庫,需要對象許可權來操縱資料庫中對象的內容。用戶也可以將被授予的許可權給其它用戶或者角色,角色是相關許可權的命名分組。方案是對象的集合,例如,視圖和序列的集合。方案被數 ...
許可權是執行特殊SQL語句的權利。資料庫管理員 (DBA) 是一個具有授予用戶訪問資料庫及其對象的能力的高級用戶。用戶需要系統許可權來訪問資料庫,需要對象許可權來操縱資料庫中對象的內容。用戶也可以將被授予的許可權給其它用戶或者角色,角色是相關許可權的命名分組。方案是對象的集合,例如,視圖和序列的集合。方案被資料庫用戶擁有,並且與用戶有相同的名字。
1.創建用戶
DBA通過執行CREATE USER語句來創建用戶,在這時用戶沒有任何許可權。DBA可以給用戶授予許可權,這些許可權決定用戶能夠在資料庫級別做什麼。語法:
CREATE USER user IDENTIFIED BY password; --user 是被創建的用戶的名字 --password 指定用戶必須用該口令登錄
你可以用ALTER USER語句改變你的口令。語法:
ALTER USER user IDENTIFIED BY password;
2.授權系統許可權
創建了一個用戶後,DBA可以指定系統許可權給該用戶。使用下麵的語法:
GRANT privilege[,privilege...] TO user [,user|role,PUBLIC...];
--privilege 指定給用戶或角色的許可權
對用戶和角色有100多個不同的可用系統許可權,系統許可權有資料庫管理員(DBA)提供。當前會話的系統許可權可以在字典視圖SESSION_PRIVS中找到。下麵是典型的DBA許可權:
系統許可權 | 許可權的操作 |
CREATE USER | 可以創建其他 Oracle 用戶 (需要有 DBA 角色許可權) |
DROP USER | 可以刪除另一個用戶 |
DROP ANY TABLE | 可以刪除在任意方案中的表 |
BACKUP ANY TABLE | 可以備份在任何方案中的任何表 |
SELECT ANY TABLE | 可以查詢在任何方案中的表、視圖或快照 |
CREATE ANY TABLE | 可以在任何方案中創建表 |
CREATE SESSION | 連接到資料庫 |
CREATE TABLE | 在用戶的方案中創建表 |
CREATE SEQUENCE | 在用戶的方案中創建序列 |
CREATE VIEW | 在用戶的方案中創建視圖 |
CREATE PROCEDURE | 在用戶的方案中創建存儲過程、函數或包 |
3.創建並授權角色
角色是命名的可以授予用戶的相關許可權的組,該方法使得授予、撤回和維護許可權容易的多。一個用戶可以使用幾個角色,並且幾個用戶也可以被指定相同的角色。角色典型地為資料庫應用程式創建。創建和分配角色,首先,DBA必須創建角色,然後,DBA可以分配角色給角色和用戶。創建角色語法:
CREATE ROLE role; --role 要被創建的角色的名字
DBA創建角色後,可以用GRANT語句給用戶指定角色,也可以指定許可權給角色。角色用於簡化授予和撤消許可權的過程,授權角色語法:
GRANT privilege TO role; GRANT role TO user;
4.授權並撤銷對象許可權
對象許可權是在指定的表、視圖、序列或過程上執行指定動作的許可權或權利。每個對象都有一個特殊的可授予的許可權集。可以如下表來理解對象許可權:
對象許可權 | TABLE | VIEW | SEQUENCE | PROCEDURE |
ALTER | √ | √ | ||
DELETE | √ | √ | ||
EXECUTE | √ | |||
INDEX | √ | |||
INSERT | √ | √ | ||
REFERENCES | √ | √ | ||
SELECT | √ | √ | √ | |
UPDATE | √ | √ |
不同的對象許可權對於不同類型的方案對象的是有用的,一個用戶自動擁有包含在該用戶的方案中的所有對象許可權,一個用戶可以授予該用戶所擁有的任何方案對象上任何對象許可權給另一個用戶或角色。授權單位許可權語法:
GRANT {object_priv[(columns)]|ALL} ON object TO {user|role|PUBLIC} [WITH GRANT OPTION]; --object_priv 將被授予的對象許可權
--ALL 指定所有對象許可權 --columns 從一個表或視圖中指定被授予許可權的列 --ON object 許可權被授予的對象 --TO 指定許可權被授予誰 --PUBLIC 授予許可權給所有用戶 --WITH GRANT OPTION 允許被授予許可權的人再授予對象許可權給其他用戶和角色
為了授予許可權到一個對象上,對象必須在你自己擁有的方案中,或者你必須被用WITH GRANT OPTION選項授予了對象許可權。任何對象的所有者自動地獲得該對象所有對象許可權,可以授予任何該對象上的對象許可權給任何其他的用戶或者資料庫的角色。
可以用REVOKE語句撤消授予其他用戶的對象許可權。當你用REVOKE語句時,你指定要從用戶那裡撤消的許可權,並且通過WITH GRANT OPTION子句被級聯授權的那些用戶的許可權也將被撤消。撤銷單位許可權語法:
REVOKE {privilege [,privilege...]|ALL} ON object FROM {user[,user...]|role|PUBLIC} [CASCADE CONSTRAINTS]; --CASCADE CONSTRAINTS 用於刪除任何與該對象相關的約束和對象,例如索引、觸發器、許可權、完整性約束等。
5.查詢已授予的許可權
如果你試圖執行一個為授權的操作,例如從你沒有刪除許可權的表中刪除行,Oracle伺服器將不允許該操作發生。如果你收到Oracle伺服器錯誤信息 “table or view does not exist,”說明發生了下麵的錯誤:指定的表或視圖不存在,試圖在一個你沒有適當許可權的表或視圖上執行一個操作。你可以通過訪問數據字典來查看你所有的許可權。下表中描述了各種數據字典視圖。
數據字典視圖 | 說明 |
ROLE_SYS_PRIVS | 授予角色的系統許可權 |
ROLE_TAB_PRIVS | 授予角色的表許可權 |
USER_ROLE_PRIVS | 可由用戶訪問的角色 |
USER_TAB_PRIVS_MADE | 授予用戶的對象上的對象許可權 |
USER_TAB_PRIVS_RECD | 授予用戶的對象許可權 |
USER_COL_PRIVS_MADE | 授予用戶對象的列上的對象許可權 |
USER_COL_PRIVS_RECD | 授予用戶在指定列上的對象許可權 |
USER_SYS_PRIVS | 授予用戶的系統許可權 |