GRANT,REVOKE和DENY數據庫權限
數據控制語言(DCL)是結構化查詢語言 (SQL)的一個子集,允許數據庫管理員配置對關係數據庫的安全訪問。 它補充了用於添加和刪除數據庫對象的數據定義語言(DDL)以及用於檢索,插入和修改數據庫內容的數據操作語言(DML)。
DCL是最簡單的SQL子集 ,因為它只包含三個命令:GRANT,REVOKE和DENY。 綜合起來,這三個命令為管理員提供了以非常細緻的方式設置和刪除數據庫權限的靈活性。
使用GRANT命令添加權限
GRANT命令由管理員用來向數據庫用戶添加新的權限。 它有一個非常簡單的語法,定義如下:
授予[特權]開[對象] TO [用戶] [授權選項]以下是您可以使用此命令提供的每個參數的簡要說明:
- 特權可以是關鍵字ALL(以授予各種權限),也可以是特定的數據庫權限或一組權限。 例子包括CREATE DATABASE,SELECT,INSERT,UPDATE,DELETE,EXECUTE和CREATE VIEW。
- 對象可以是任何數據庫對象。 有效的權限選項根據您在本節中包含的數據庫對象的類型而有所不同。 通常,對象將是數據庫,函數, 存儲過程 ,表或視圖。
- 用戶可以是任何數據庫用戶。 如果您希望使用基於角色的數據庫安全性,那麼您也可以在本節中使用用戶角色。
- 如果在GRANT命令的末尾包含可選的WITH GRANT OPTION子句,則不僅可以授予指定用戶在SQL語句中定義的權限,還可以授予用戶將這些相同權限授予其他數據庫用戶的權限。 出於這個原因,請謹慎使用本條款。
例如,假設您希望授予用戶Joe從名為HR的數據庫中的employees表中檢索信息的能力。 您可以使用以下SQL命令:
將HR.employees選擇給喬Joe現在可以從僱員表中檢索信息。 但是,他不會授予其他用戶從該表中檢索信息的權限,因為您沒有在GRANT語句中包含WITH GRANT OPTION子句。
撤銷數據庫訪問
REVOKE命令用於刪除先前授予此類訪問權的用戶的數據庫訪問權限。 該命令的語法定義如下:
REVOKE [允許選項] [允許] ON [對象] FROM [用戶] [級聯]以下是關於REVOKE命令參數的簡要介紹:
- 權限指定要從已識別的用戶中刪除的數據庫權限。 該命令撤銷之前為確定的權限所做的GRANT和DENY斷言。
- 對象可以是任何數據庫對象。 有效的權限選項根據您在本節中包含的數據庫對象的類型而有所不同。 通常,對象將是數據庫,函數,存儲過程,表或視圖。
- 用戶可以是任何數據庫用戶。 如果您希望使用基於角色的數據庫安全性,那麼您也可以在本節中使用用戶角色。
- GRANT OPTION FOR子句刪除指定用戶向其他用戶授予指定權限的能力。 注意 : 如果在REVOKE語句中包含GRANT OPTION FOR子句,則不會撤消主要權限。 本條款僅撤銷授予能力。
- CASCADE選項還撤消指定用戶授予權限的任何用戶的指定權限。
例如,以下命令將撤消在前面示例中授予Joe的權限:
REVOKE選擇人力資源僱員從喬明確拒絕數據庫訪問
DENY命令用於明確阻止用戶接收特定權限。 當用戶是被授予權限的角色或組的成員時,這非常有用,並且您希望通過創建異常來防止該用戶繼承權限。 該命令的語法如下所示:
DENY [許可] ON [對象] TO [用戶] DENY命令的參數與GRANT命令使用的參數相同。
例如,如果您希望確保Matthew永遠不會從Employees表中刪除信息,請發出以下命令: