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

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

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

   通過特權管理安全性(

  RDBMS本質上是一個由對象(模式視圖過程等)和管理這些對象的程序組成的集合限制對這些對象的訪問本質上是一種安全機制它是在SQL層面上通過特權系統來實現的

  特權表示特定用戶在訪問創建操作和銷毀數據庫中的各種對象上所擁有的權力也包括執行管理任務可以將特權授予一個用戶或者一個角色(角色的概念將在下一小節中討論)

  可以將特權分為兩個大類系統特權和對象特權不同數據庫廠商對此的定義存在著相當大的差異更多的細節問題將在本章後面有關特定於RDBMS的實現的小節中進行介紹

   GRANT語句

  SQL標准將特權定義為用戶被授權執行的操作類型只有在授予訪問權限的對象和系統上用戶才能執行這些操作在本書討論的各種RDBMS中所有這些特權都是一致的

  可以將特權授予一個單獨的用戶也可以授予一個角色可以使用GRANT語句來授予系統特權也可以授予對象特權在各種RDBMS包中授予特權的基本語法都是相當一致的(盡管在高級選項上存在顯著的差別)在單個GRANT語句中可以授予多種特權例如下面的例子

  GRANT [ALL [PRIVILEGES]] | <privilege…>

  [ON <object_name>]

  TO <user> | <group> | <role>

  [WITH GRANT OPTION]

   授予系統級特權

  系統特權允許用戶在指定的RDBMS內執行一些管理任務(創建一個數據庫創建和刪除用戶創建修改和銷毀數據庫對象等)要執行授予系統特權的操作必須在RDBMS中具有足夠高的職權級別系統特權與對象特權相比它們的作用域和允許用戶執行的操作的類型不同這是區分兩者的一個特征

  系統特權完全是特定於具體數據庫的每一個數據庫廠商都實現了一個自己的系統特權集對於不同的RDBMS某些系統特權可能具有不同的含義例如Microsoft SQL Server它甚至沒有定義系統特權而是對所謂的安全對象(securable)使用特權(權限)這些安全對象在不同的級別上可以是服務器數據庫和模式

  這裡有一些基於LIBRARY數據庫的例子下面的代碼創建了一個用戶LibraryUser然後授予該用戶在數據庫中創建表的特權並且允許傳遞給其他用戶

  CREATE USER LibraryUser

  IDENTIFIED BY letmein;

  GRANT CREATE TABLE

  TO LibraryUser

  WITH ADMIN OPTION;

  假如你具有足夠的特權那麼上面的代碼將創建密碼為LETMEIN的用戶LibraryUser但是如果NEW_USER用戶還沒有被授予CREATESESSION系統特權那麼使用該用戶ID和密碼將無法連接到Oracle要訪問數據庫必須具有CREATESESSION系統特權否則將產生ORA:user LibraryUser lacks CREATESESSION privilege;logon denied錯誤

  為了解決這一問題需要將該特權授予新創建的用戶

  GRANT CREATE SESSION

  TO LibraryUser

  WITH ADMIN OPTION;

  這樣就可以使用LibraryUser/letmein憑據連接到數據庫由於使用了WITH ADMIN OPTION子句因此也可以將該特權授予其他用戶某些RDBMS特別是Oracle將把該選項視為更通用的WITH GRANT OPTION子句

  在Oracle數據庫中還有另外兩種系統特權值得一提SYSDBA和SYSOPER這兩種系統特權的行為類似於包含了多個系統特權的角色當連接到Oracle數據庫時可以聲明用AS SYSDBA或者AS SYSOPER連接但前提是這些特權已經授予了連接數據庫的用戶SYSDBA是可以授予的最高特權之一

  IBM DB在這一方面類似於Oracle它具有系統特權其中一些特權與職權級別有關(更多信息請參考本章後面的內容)在特權的層次結構中SYSADM(系統管理員)職權位於最頂層下一層包括DBADM(數據庫管理員)和SYSCTRL(系統資源管理員)然後是SYSMAINT(系統維護管理員)在特權層次結構的最底層是數據庫用戶要授予DBADM職權用戶必須具有SYSADM職權SYSADM和DBADM兩者都可以向用戶或組授予其他特權

  IBM DB 提供了其他辦法來保護數據即使是對於具有SYSADM職權的用戶也是如此這種機制稱為基於標簽的訪問控制(labelbased accesscontrolLBAC)可以用LBAC來保護整行整列或者同時保護兩者Oracle也提供了類似的特性稱為Oracle Label Security

  Microsoft SQL Server 並沒有系統特權(至少沒有類似於Oracle或IBM DB所具有的那種系統特權)對於特定的SQL語句可以將特權授予一個用戶(或者一個角色)一旦授予了特權用戶就可以運行SQL語句以執行所定義的操作SQL Server 已經定義了大量的安全對象例如數據庫服務器資源登錄名數據庫角色用戶模式等可以將這些安全對象授予主體(principal)例如用戶角色或應用程序角色主體可以在下面這幾個級別上進行定義Windows操作系統級別(域登錄名本地登錄名)SQL Server級別(SQL Server登錄名)和數據庫級別(數據庫用戶/角色和應用程序角色)列出了可以授予主體的一些權限

  表 精選的Microsoft SQL Server 權限

  系統權限被綁定到數據庫(MS SQL Server也使用這一概念在Oracle中與之最接近的等價概念是模式)並且是層次化的例如要GRANT特權以執行一個CREATE DATABASE語句則用戶必須在SQL Server的master數據庫的上下文中因為該語句產生的結果將影響到整個SQLServer 實例

       返回目錄SQL實戰新手入門

       編輯推薦

       Oracle索引技術

       高性能MySQL

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


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