程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server 2012 安全概述

SQL Server 2012 安全概述

編輯:關於SqlServer

在保密你的服務器和數據,防備當前復雜的攻擊,SQL Server有你需要的一切。但在你能有效使用這些安全功能前,你需要理解你面對的威脅和一些基本的安全概念。這篇文章提供了基礎,因此你可以對SQL Server裡的安全功能充分利用,不用在面對特定威脅,不能保護你數據的功能上浪費時間。

從讓人眼花缭亂的客戶端使用連接,通過到處分布的網絡,尤其是互聯網,關系數據庫在各種應用程序裡廣泛使用。這使數據對任何人,在任何地方都可訪問。數據庫可以保存人類知識的很大部分,包括高度敏感的個人信息和讓國際商務工作的關鍵數據。

對於想要偷取數據或通過篡改數據來傷害數據的擁有者的人來說,這些功能使數據庫成為有吸引力的目標。確保你的數據安全是SQL Server配置和使用它來保存數據的程序的重要部分。這個系列會探尋SQL Server 2012安全的基本,這樣的話你可以保護你的數據和服務器資源,按你需要的安全等級來保護數據,免受這些威脅對你數據的影響。大部分信息對SQL Server的早期版本也適用,回到SQL Server 2005也可以,因為那是微軟在產品裡徹底檢查安全的時候。但我也會談論只在SQL Server 2012和後續版本裡才有的功能。

在保密你的服務器和數據,防備當前復雜的攻擊,SQL Server有你需要的一切。但在你能有效使用這些安全功能前,你需要理解你面對的威脅和一些基本的安全概念。這篇文章提供了基礎,因此你可以對SQL Server裡的安全功能充分利用,不用在面對特定威脅,不能保護你數據的功能上浪費時間。

威脅

在理解如何配置和使用SQL Server來保護你的數據,識別特定數據集和它的服務器的威脅是重要的第一步。你創建的用來管理你的小學足球隊的設備清單很可能不需要嚴格的安全措施。很可能你會想提供最小的訪問控制,這樣的話,足球隊成員不能隨機修改他擁有哪個足球盒的記錄。即使這些數據被盜或篡改也不會是世界末日。

另一方面,如果數據庫有關於足球隊孩子的個人信息,例如家庭地址和聯系電話,很可能你想加強安全保護(或許法律上也要求你這麼做)。可能你會通過隔離訪問來保護數據的隱私,這樣的話,幾乎任何可以訪問數據庫來修改設備數據,但只有一些人可以訪問個人數據。如果數據包括家長的信用卡號,你會需要極其小心的保護那個數據。

你的數據很容易受到很多威脅,下列清單是常見的幾個。在網絡上有很多資源可以針對你的特定情況幫你分析。這個清單只想幫助你開始考慮這些威脅,如何使用SQL Server的功能來應對它們,或者至少減少暴露數據給他們。

  1. 數據竊取:數據竊取包括各種對你數據的未授權訪問,無論通過黑入你網絡的外界人員,還是在重要人物上非法掃描的內部人員。它會涉及到讀取到禁止信息的興奮,或者被通過銷售竊取的信用卡號的利益所驅動。
  2. 數據破壞:獲的你數據訪問權限的可以修改它,它會帶來一系列的問題,包括關閉你的所有業務讓你在公眾面前尴尬(當你所有的客戶記錄被刪除時就會發生)。
  3. 數據篡改:在關系數據庫裡存儲數據的一個最大好處是數據庫本身可以幫助保護數據的完整性。數據完整性包括每個訂單有關聯的客戶,在日期列存儲的日期代表日歷上的日期,百分比字段只包含0和100之間的值等這些約束。當你考慮安全的時候,數據完整性不會是第一個想到的,但卻是你的數據保護的重要部分。
  4. 非法存儲:在過去,在商業過程期間,你收集的數據只是你個人的事。但選擇在美國,遍及歐盟和可以控制你存儲的各種個人信息,你如何存儲它,你如何保護它的其他國家裡的都有對應的法律存在。違法的處罰是嚴格的——包括罰款和對你公司的公共形象損失費。

這個系列文章談到的SQL Server 2012的功能可以幫你緩解這些各類威脅和其他方面。你必須理解對你數據的威脅,才可以知道如何保護它們。不要在不能防止你特定數據威脅的措施上浪費時間。你永遠不能考慮到所有的假設情況,但最為最壞的情況你要保證你的數據庫服務器對它的面向客戶是完全不可用的。安全總是個妥協,對時間的風險和實現保障的必要金錢之間的平衡。

安全設計理念

早在2012年,比爾蓋茨發布了他臭名昭著的計算機可信備忘錄,即微軟在產品裡如何考慮和實現安全的,可以證明是個轉折點。根據微軟官方網站,可信計算機政策啟動了。“基於良好的商業實踐,專注創建和帶來安全,隱私和可靠的計算體驗。我們的目標是更安全、更可信的互聯網”。

話句話說,微軟在十多年前就變得非常關注安全。關於這個修改的第一個版本是SQL Server 2005,微軟開始在產品考慮充分的安全。自那以後,SQL Server的每個版本都會保留新的安全架構,同時加強它,增加新的功能來同時提高安全來應對新出現的威脅。

如微軟在SQL Server 2005時期裡所描述的,通過定義產品安全的四大支柱來影響SQL Server可信計算發展。

  1. 安全設計(Secure by design):微軟進行廣泛的威脅分析和代碼設計與交互的安全審計,來確定攻擊者可以立足獲得服務器和數據的地方。這樣讓微軟設計的SQL Server可以保護你在服務器上存儲的數據的保密性,完整性和可用性。
  2. 默認安全(Secure by default):SQL Server創造性的默認安裝並激活關鍵的核心數據庫組件。這就是說不是核心的數據庫的功能不會安裝,或者安裝之後不會啟用。沒有安裝的功能不安裝就不會作為攻擊目標。你必須清醒意識安裝或啟用的非核心功能。這會阻止你可能不知道卻安裝功能的很多攻擊,你以為從未用過它們。
  3. 部署安全(Secure in deploymen):微軟提供工具,支持安裝SQL Server的安全並保持它的安全。SQL服務器配置工具幫助你配置服務器安全。最重要的是,SQL Server的更新已經是微軟在線更新的一部分,因此很容易獲得安全的更新和補丁。
  4. 互動安全(Secure through communication):微軟已經建立了完善的基礎設施來手機它產品中的漏洞。但這些信息如果只留在微軟內部的話是沒有任何用處的。因此公司致力於新漏洞的互動,積極打補丁來修正它們,定期發布更新到它的在線幫助系統來體現新的安全信息。

“它是安全的”的理念已經影響了整個產品。盡管SQL Server一打開就是相當安全的,當你創建數據庫和安裝服務時,你必須做出明智的安全選擇來保持SQL Server的安全。作出並保證生產數據庫服務器的安全需要行動和警惕。

記住有時候保護數據的最佳方法是直接不把它不放到數據庫裡——例如,只保存你必須絕對堅持有效的信用卡信息(這樣的人並不多)。如果你沒有這樣的需求,你應該處理信用卡事務,保存結果,而不是信用卡信息本身。你不會承受你沒有數據上的安全風險。

安全的2個階段

SQL Server的安全模型,像Windows一樣,是個2個階段的過程,允許用戶和其它登錄的訪問服務器裡受保護的資源。

  1. 身份驗證(Authentication):一個用戶登錄成功,是有效的,可以訪問服務器。身份驗證回答問題,“你是誰?“需要用戶去證明它,通常需要用戶提供用戶名和對應的密碼,但其它形式的證據變得更加流行。
  2. 授權(Authorization):用戶可以和SQL Server對象互動——例如數據庫,表和存儲過程——哪個用戶有權限。授權回答問題,”你可以做什麼?“。

用戶可以登錄到SQL Server,但除非它們有權限做什麼,例如訪問數據庫,它就做不了什麼。因此你不僅需要為你的用戶提供授權憑證,你還要授權它們訪問數據,在每個它們需要使用的數據庫裡為它們授權一次,定義賬號。

當你考慮它的時候,在每個數據庫裡需要一個用戶賬號更有意義。不然的話,什麼可以阻止用戶登錄到SQL Server並可以訪問想訪問任何數據庫。這個概念有不同的含義來實現不同的場景,但這是安全的基本狀態。

在這個系列的接下來文章會談到驗證和授權,你會學到在SQL Server裡如何實現各種安全功能來應付你對數據已經識別的威脅。

SQL Server安全術語

當你與SQL Server和其它產品打交道時,你會碰到各種特定的專業術語。這裡有一些最常見的術語,還有在數據庫安全上下文裡它們的含義。

  1. 驗證(Authentication):如上面提到的,驗證是積極識別一個人的過程,通過需要證明它是可以登錄的人。它回答問題:你是誰?
  2. 授權(Authorization):一旦系統驗證你為一個有效用戶,授權(如上所述)決定用戶在服務器或數據庫擁有的權限。它回答問題,這裡現在你能做什麼?
  3. 組(Group):在Windows裡,組是已登錄後與它關聯的主體。任何授權到組都會授權到組裡相關聯的登錄。
  4. 模擬(Impersonation):所有的Windows進程,包括各種SQL Server進程,在特定的安全上下文裡運行,通常是主體引起進程啟動。當進程臨時在不同的安全上下文時會發生模擬。這是非常強大的切必需的能力,但會引起潛在的濫用。
  5. 登錄(Login):登錄是擁有服務器實例裡的對象一些訪問級別的主體。通常,登錄常用來與用戶交互。但是SQL Server登錄是一個用來從外面訪問服務器的賬號。有時候登錄包括訪問服務器級別的對象,例如配置信息,但不會授予數據庫裡的任何權限。
  6. 許可(Permission):許可是訪問保護資源的權利,例如從表讀取數據或在服務器級別創建新的數據庫。一個學科通常意味著其他許可,取決於對象許可的范圍。
  7. 主體(Principal):主體是可以接收訪問SQL Server裡保護資源的任何用戶或代碼組件。
  8. 權限(Privilege):權限是主體擁有的廣泛權利和許可。這個詞有時候和許可交替使用,通常意味著特定、狹義的權利。權利意味著一組廣泛的許可。
  9. 角色(Role):SQL Server角色類似於Windows用戶組,但只限於SQL Server實例范圍。對於一個組,你可以分配登錄和用戶到角色,這就是這個角色擁有登錄和用戶的所有許可。
  10. 用戶(User):用戶是在特定數據庫裡擁有對象的一些訪問級別的主體。用戶通常會映射到登錄。簡單來說,登錄可以訪問SQL Server實例,用戶可以訪問數據。

在這個系列的文章裡你會看到大部分這些術語的使用。

SQL Server安全管理和實現

正如SQL Server裡大多數操縱和管理任務,通常安全功能幾乎都有很多管理和實現方法,包括使用SSMS的圖形界面,編寫和執行T-SQL代碼,使用在命令行編寫PowerShell與SQL Server進行交互。使用PowerShell已經不是本系列文章的討論范圍,但在這個系列文章裡,你會看到另外2個技術的很多例子。

使用SSMS的安全功能,通常你可以在對象浏覽器裡右擊合適的對象,選擇【屬性】,然後在對話框裡使用合適的頁來做你想要的修改。例如,在AdventureWorksLT2012示例數據庫上設置安全,在對象浏覽器裡右擊數據庫名,選擇【屬性】,然後選擇【權限】頁,如插圖1.1所示。

插圖1.2:用來修改AdventureWorksLT2012數據庫安全的權限頁

同時在數據庫和服務器級別,對象浏覽器包括了安全節點,讓你管理和實現其他各種安全功能。插圖1.2顯示了對AdventureWorksLT2012數據庫和服務器實例級別的這個節點。這2個高亮的節點包括各種子節點,給你在選擇范圍內訪問合適的安全對象。

插圖1.2:在對象浏覽器裡,在服務器和數據庫級別的安全對象

你會在SSMS和它各個窗體裡找到各種隱藏的安全功能,因此你可以好好點開這些安全性節點。

在SQL Server 2005徹底安檢裡另外一個改變是可以允許更顆粒度的方式分配安全。在接下來的文章裡你就會學到,你會對各種主體分配各種許可來實現“最小特權”的重要安全原則——這個想法是每個主體只能有它們需要的許可:不多也不少。隨著這個改變,微軟增強了T-SQL,在語言上有強大的支持,可以直接操縱安全對象。

代碼1.1展示了你可以使用T-SQL創建安全對象的簡單例子。代碼首先創建鏈接到現存系統登錄的服務器級別的登錄。然後在AdventureWorksLT2012數據庫裡,代碼創建了個用戶映射到登錄,分配了默認架構給用戶。最後的一點代碼向你展示了你如何在數據庫裡刪除用戶和創建另一個用戶映射到同樣的登錄。很作秀,當然,但是它展示了在代碼裡你能做什麼。或者你也可以在SSMS的圖形界面裡實現,如果你喜歡的話。

-- Add a Windows login to SQL Server
CREATE LOGIN [PC201602202041\woodytu] FROM WINDOWS;
GO

USE AdventureWorksLT2012;
GO

-- Name the user the same name as login
CREATE USER [PC201602202041\woodytu] FOR LOGIN [PC201602202041\woodytu]
 WITH DEFAULT_SCHEMA = Production;
GO

-- Or, rename the user in the database
DROP USER [PC201602202041\woodytu];
GO
CREATE USER woody FOR LOGIN [PC201602202041\woodytu];
GO

-- Query metadata to show that user was created
SELECT * FROM sys.database_principals WHERE name = 'PC201602202041\woodytu';
SELECT * FROM sys.database_principals WHERE name = 'woody';

代碼1.1:創建服務器登錄和數據庫用戶的示例代碼

如果你想運行這個代碼,首先你要做些改動。除非你的計算機名稱和我的一樣,且有一個woodytu的用戶存在,你需要在代碼裡修改名稱。這個代碼在AdventureWorksLT2012數據庫創建數據庫用戶,並使用它的Production架構,因此你要麼需要安裝這個數據庫,要麼修改代碼使用另一個數據庫和它裡面存在的架構。但我還是建議你安裝AdventureWorks數據庫,因為接下來的文章會頻繁用到它。

小結

這個系列的第一篇文章給你概括介紹了SQL Server 2012裡的基本安全概念。你學到了一些常見的數據威脅,探尋了SQL Server背後的設計理念。你學到了安全的2個階段——身份驗證和授權,學習了在整個系列文章看到的一些安全術語,目睹了你可以使用SSMS圖形界面和T-SQL代碼來管理和實現安全。

在下一篇文章裡,你會學到SQL Server裡身份驗證如何工作和身份驗證可用選項的更多信息。

原文鏈接:

http://www.sqlservercentral.com/articles/Stairway+Series/109941/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved