理解SQL Server 安全機制

    對任何企業組織來說,數據庫的安全性最爲重要,畢竟數據信息大都存儲在數據庫中。SQL Server安全性主要是指允許那些具有相應的數據訪問權限的用戶能夠登錄到SQL Server 並訪問數據以及對數據庫對象實施各種權限範圍內的操作,同時要拒絕所有的非授權用戶的非法操作。因此,安全性管理與用戶管理是密不可分的。SQL Server 提供了內 置的安全性和數據保護,正確的理解SQL Server安全體系結構,對於部署和實施安全穩定的SQL Server數據庫,可以起到事半功倍的效果。Microsoft SQL Server 的安全體系模型功能強大,設計靈活,但難免體系稍顯複雜。本文就SQL Server 2000爲基礎,對SQL Server的安全體系模型進行力所能及的剖析,在文章的最後會涉及SQL Server 2005在安全性方面的改進。
 
一:SQL Server 2000 安全體系結構概述
    我們知道,典型的網絡安全機制的三大支柱分別是身份驗證、授權和審計,在SQL Server 2000安全機制中也是如此。SQL Server 2000 安全體系結構如下圖:
 
其中,認證的目的是驗證“我是誰”,用於確定訪問者身份。
    授權的目的是解決訪問者“允許我幹什麼”的問題。用於將一個通過身份驗證的身份映射到數據庫用戶的過程。該過程確定用戶在數據庫內部能做什麼。
    審覈的目的是在不同級別跟蹤安全相關的事件,並記錄在審覈日誌中,以便於事後參考。
    從上圖我們也可以看出,整個安全體系結構從順序上可以分爲認證授權兩部分。從訪問級別上又可以分爲三個不同的安全層面,分別是:
1:基於服務器級別的用戶登錄認證,對應於身份認證,控制用戶是否可以連接到數據庫服務器。
2:基於數據庫級別的用戶權限許可,對應於數據庫級別的用戶授權,控制用戶是否可以訪問具體數據庫。
3:基於數據庫對象級別的權限許可,對應於對象級別的用戶授權,控制用戶是否可
以操作數據庫中具體的對象。
    同時整個安全流程涉及到登錄模式、安全賬戶、角色、用戶等不同各個概念。
      
下面就上述過程和概念做詳細的解釋。       
 
二:服務器級別的登錄認證
    用戶登錄認證是SQL Server 2000 安全環境中訪問數據的第一步,是驗證系統中請求服務的客戶機身份的過程。
    沒有第一步的身份驗證,任何客戶機或用戶都無法連接到SQL Server 服務器。
    SQL Server 提供了兩種身份驗證方式,分別是Windows身份驗證模式和混合模式。
      
其中Windows身份驗證是由Windows操作系統來驗證用戶身份,
混合模式則是由SQL Server 2000自身來驗證用戶身份。
完整的用戶身份驗證流程如下圖:
      

三:管理登錄帳號
    服務器級別的登錄帳號可以在企業管理器->安全性->登錄中查看,只有在登錄中存在的用戶或組纔可以連接到數據庫服務器。
    默認的只有兩個登錄帳號:
        
1:sa SQL Server系統管理員標準註冊帳號
        
2:BUILTIAN\Administrators 數據庫服務器的Windows系統管理員組。
      
這兩個帳號都是固定的服務器角色sysadmin的成員,在服務器環境中權限是無限制的。不論基於Windows身份驗證登錄帳號,還是基於SQL Server身份驗證的登錄帳號,都可以在安全性->登錄中進行管理。
      
    下面以創建一個基於windows身份驗證的登錄帳號爲例來說明如何新增一個登錄帳號:
      
1:在SQL Server數據庫服務器的“本地用戶和組”中創建一個用戶“DBUser”和組“DB Group”,且將DBUser加入DB Group組中。
        
      
2:在企業管理器,安全性->登錄界面,右鍵單擊“新建登錄”
             在彈出的窗口中,選擇“Windows身份驗證”,並在域中選擇正確的域名。
      
3:在名稱中,選擇已經創建好的本地用戶組 DB Group。
            
其它設置保存默認,按確定後,新增登錄帳號完成。
        
  
四:測試新增登錄帳號
    新增登錄帳號完成後,並沒有對該用戶進行授權,那麼理論上該用戶只能連接到數據庫服務器,而不能訪問任何的數據庫。
    我們測試一下以該用戶連接SQL Server服務器,觀察下實際的訪問情況。
        
1:以該用戶(DBUser)身份登錄到SQL Server服務器
        
2:打開SQL Server企業管理器,分別打開示例數據庫Northwind以及用戶數據庫DemoDB,操作結果如下圖:
         
 
           
    從上面兩個圖我們可以看到,DBUser可以訪問Northwind數據庫,但無法訪問到自定義數據庫DemoDB。爲什麼會出現這種現象呢。我們查看一下DBUser用戶在數據庫中映射的用戶。
       
3:在查詢分析中輸入如下圖所示語句,查看當前用戶的身份。
        
4:從上圖可以看出,因爲沒有對DBUser用戶進行任何授權,所以連接到服務器後,SQL Server默認用戶以guest身份進行訪問數據庫。因Pubs和Northwind數據庫默認是允許Guest用戶訪問,而自定義數據庫默認已刪除guest用戶。所以出現上述有些數據庫可以訪問,有些數據庫無權限訪問的現象。
           
 
五:  數據庫級別的權限控制
    在上面的測試中我們可以看到,對於一個新增登錄帳號,默認的權限是很小的,因爲並沒有對這個用戶進行數據庫級別的訪問授權。在每個數據庫中都有sysusers表,該表中存放着能訪問該數據庫的所有角色和帳號列表。我們也可以在企業管理器每個數據庫的用戶和角色中查看到相應的角色和用戶列表。
        
1:角色管理
    在SQL Server 2000中,角色有些類似於Windows中的安全組,目的是爲了集中式管理。通過給帳號和用戶添加角色,可以自動將該角色所擁有的權限和許可授予帳號和用戶。在SQL Server 2000中,角色是在服務器或數據庫級別上定義的。
    有多種類型的角色,包括固定服務器角色、固定數據庫角色、用戶自定義角色、Public角色以及應用程序角色。
    其中:固定服務器角色是由SQL Server定義,不能被添加、修改和刪除,只能將用戶或帳號添加到相應的服務器角色中。
    固定服務器角色的作用範圍是整個數據庫服務器,共有8種服務器角色,不同的角色擁有不同的功能。詳細的服務器角色種類本文不再詳細介紹,請參觀SQL Server幫助文檔。
    與固定服務器角色一樣,固定數據庫角色也是由SQL Server定義,不能刪除和修改,只能更改角色中的成員。固定數據庫角色的作用範圍是當前定義數據庫角色的數據庫。
用戶自定義角色只能在數據庫級別定義,通過創建按功能或規則區分的角色,可以簡化擁有這些角色的用戶管理。
    在SQL Server中,Public角色是一個很特殊的數據庫級別角色,所有的數據庫用戶會自動成爲該角色成員,而且不能從該角色中刪除。所以任何授予給Public角色的許可都自動授予給當前數據庫的所有用戶。
  
2:用戶管理
用戶可以通過添加到具體的角色中而獲得相應的訪問權限,也可以直接對單個用戶進行具體的權限分配。
在企業管理器中,對單個用戶進行具體的權限分配操作步驟如下:
1:新增登錄帳號
2:選擇具體的數據庫,在其"用戶"中選擇"新增數據庫用戶"
                     
 
3:在彈出的"數據庫用戶屬性"窗口中,從”登錄名“中選擇剛新增的登錄帳號。同時確定該登錄帳號所對應的數據庫用戶名。
4:用戶創建完成後,選擇該用戶,右鍵快捷方式中選擇”屬性“,在”用戶屬性“窗口中,單擊”權限按鈕“,在”數據庫用戶屬性“窗口中,可以設置用戶的具體權限。
 
  
六:數據庫對象級別的權限控制
    在數據庫級別對用戶進行權限分配後,用戶就可以對數據庫進行訪問。但若要進行任何涉及更改數據庫定義或訪問數據的活動,則必須進行相應的數據庫對象級別的權限許可。
    SQL Server數據庫中有三種類型的許可:語句許可、對象許可和暗示性許可。
    不論是哪一種許可,都可以使用Grant,Revoke和Deny命令進行管理。
其中:Grant用於顯式給用戶或角色授權許可
Deny用於顯式拒絕用戶或角色使用某個許可。
Revoke執行與Grant或Deny相反的操作,可以理解爲取消。
   
1:語句許可
語句許可控制着數據庫用戶在數據庫內創建對象和執行備份的權限。
在企業管理器中設置語句許可的方法如下:
1:打開企業管理器,選中具體的數據庫,右鍵選擇快捷方式中”屬性“
2:在彈出的數據庫屬性窗口中,選擇”權限“選項。
3:在”權限“界面顯示該數據庫的語句許可,可以針對當前數據庫中具體用戶分配相應的許可
                   
 
            
2:對象許可
    對象許可控制着數據庫用戶訪問或操作SQL Server數據庫中對象的權限。
在企業管理器中設置對象許可的方法如下:
1:打開企業管理器,選中具體的數據庫,打開"用戶"或"角色"節點。
          2:選中具體的"用戶"或"角色",右鍵選擇快捷方式中”屬性“。
3:在彈出的屬性窗口中,選擇”權限“選項。
4:在”權限“界面顯示該數據庫的對象許可,可以針對當前數據庫中每個具體對象給該用戶分配相應的許可。
                     
 
  
七:審覈訪問
    在SQL Server 2000中,認證和授權等安全措施屬於強制性的安全機制,目的是將用戶對數據庫的操作侷限在其許可的範圍內。但任何系統的安全都是相對的,一旦出現安全性相關的事故,DBA如何查找原因?在日常管理中,如何查看是否存在安全隱患?這些需求可以通過審覈操作來實現。
  SQL Server 2000中包含一個可選的C2-level審覈系統,該審覈系統允許DBA在每一個不同的層面上跟蹤安全事件。
1:啓用服務器的審覈功能。
   打開在企業管理器服務器屬性“安全性”選項卡,在“安全性/審覈級別“區域啓動服務器審覈。
重新啓動SQL Server 2000服務器後,可以在事件查看器中的”應用程序日誌“中查看相應的審覈信息。                     
                
 
      
2:利用”事件探查器“進行審覈
   利用”事件探查器“進行審覈,最主要的操作是在”事件“選項卡中選擇”安全審覈“,設置完成運行審覈。
        
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章