熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> SQL語言 >> 正文

SQL實戰新手入門:通過特權管理安全性(2)

2013-11-13 12:42:53  來源: SQL語言 

   通過特權管理安全性(

  安全賬戶指的是SQL Server用戶SQL Server角色Windows用戶或者Windows組SQLServer為安全賬戶定義了一些不同的粒度授予一個用戶(既可以是SQL Server用戶也可以是Windows用戶)的特權僅僅影響到該用戶授予一個角色或Windows NT組的特權將影響到該角色或組中的所有成員

  在LIBRARY數據庫的上下文中將CREATE DATABASE語句的權限授予一個用戶或角色將產生如下所示的錯誤

  USE library

  GRANT CREATE DATABASE

  TO PUBLIC;

  CREATE DATABASE permission can only be granted in the master database

  將當前上下文切換到master數據庫就可以解決這一問題可以采用類似的辦法將訪問數據庫中對象的特權授予一個角色或者一個用戶

  USE library

  GRANT CREATE TABLE

  TO PUBLIC;

  無論是系統級特權還是對象級特權都可以使用REVOKE語句從一個數據庫用戶角色或組上進行撤消角色指的是授予了權限集的一個命名實體可以采用類似的方法移除角色所具有的特權

  REVOKE CREATE TABLE

  FROM USER PUBLIC;

  SQL標准還定義了兩個子句RESTRICT和CASCADE對於RESTRICT選項僅當數據庫中沒有廢棄的特權時該語句才能成功執行例如可能發生這樣的情況即用戶已經將該特權授予了某個其他用戶如果決定無論如何都要撤消特權並將特權的撤消傳播到已經從該用戶獲得了特權的所有用戶則必須聲明CASCADE子句在支持這兩個子句的各種RDBMS實現中這些子句都是可選的但在SQL標准中要求至少必須有一個子句通常情況下每一種RDBMS在實現該語句時都有一些自己的打算

  REVOKE語句的影響是直接的如果從PUBLIC撤消了指定的特權則對於每一個用戶通過PUBLIC獲得的特權也將丟失在這種情況下直接授予用戶或通過角色授予用戶的特權將不受影響撤消系統特權的規則是復雜的例如如果從一個角色撤消了某種特權(或角色)則僅撤消該角色的特權如果該角色將特權(或角色)授予了另外一個用戶(或角色)則該用戶將繼續運用這個特權(或角色)

  記住從一個用戶上撤消特權對於該用戶已經創建的任何對象都沒有影響當特權被撤消時所有在該特權下創建的對象將依然保留在數據庫中

   使用角色管理安全性

  角色是RDBMS為簡化用戶的管理任務而引入的一個抽象的概念它根據某些標准對用戶的特權進行分組通常是根據工作的職責進行劃分例如如果名會計人員都需要對日常訪問的數十個對象具有相應的特權(另外還需要某些系統級的特權)那麼你可以有兩種選擇一是遍歷每一個用戶並分別授予他們所需要的全部特權二是創建一個組(角色)例如ACCOUNTANTS然後將所有權限授予該角色並將角色授予組中的所有用戶撤消特權也面臨相同的選擇顯而易見采用角色進行管理更加方便

  在某些RDBMS中除了具有大量預定義的可授予用戶的系統角色之外還提供了創建角色的能力Oracle g/g和Microsoft SQL Server 都支持創建角色而DB只能使用固定的預定義的角色(職權)

  Oracle中的角色是一組特權的集合可以將這些特權授予一個用戶或者另外一個角色也可以從用戶或角色中撤消這些特權因此Oracle提供了一種特權層次結構在角色可以傳遞授予它的所有權限之前必須啟用該角色(通過一個SET ROLE語句或者由數據庫管理員啟用)

  Oracle g/g具有很多預定義的角色通過這些角色可以將特權授予用戶對於預定義的角色無法添加新的特權也無法撤消任何特權

  在Oracle RDBMS中包(package)是一個由已經預編譯的例程(通常是用PL/SQL編寫的)組成的集合它包含在RDBMS中用戶可以通過包中定義的過程和函數來訪問數據庫的功能通過將這些功能塊分組到包中就可以建立安全策略在組的級別上對包的使用進行管理而無須逐一為這些塊分配特權

  下面就是一個在任何一種RDBMS中使用默認選項為LIBRARY數據庫創建角色的例子

  CREATE ROLE libUsers;

  現在可以將特權授予該角色(更多信息請參考本章前面曾討論過的GRANT語句)然後還可以將特權授予任何需要它的用戶方法是將這些用戶分配給libUsers角色

  可以使用SET ROLE語句在當前數據庫會話期間啟用或禁用ROLE對於數據庫管理員可以設置的並發角色的數量可能會存在一定的限制

  使用ALTER ROLE語句可以修改角色使用DROP ROLE語句則可以刪除角色

  DROP ROLE libUsers;

  直到版本IBM DB都不支持用戶定義的角色它依賴於系統預定義的職權(固定的角色)可以將用戶設置為這些角色的成員另外IBM DB還依賴於GROUP它的行為與其他RDBMS中的角色幾乎相同版本中依然支持GROUP但對角色增加了新的支持總體而言與Oracle中的角色實現基本一致

  針對數據庫對象的某些特權並非與所討論的各種RDBMS都有關例如在DB或Oracle數據庫中都具有PACKAGE對象但在MS SQL ServerPostgreSQL和MySQL中並沒有這個對象另外更加混亂的是對於Oracle和IBM來說包這個概念具有不同的含義

       返回目錄SQL實戰新手入門

       編輯推薦

       Oracle索引技術

       高性能MySQL

       數據倉庫與數據挖掘培訓視頻教程


From:http://tw.wingwit.com/Article/program/SQL/201311/16441.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.