天天看點

SQL Server安全(1/11):SQL Server安全概述

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

從讓人眼花缭亂的用戶端使用連接配接,通過到處分布的網絡,尤其是網際網路,關系資料庫在各種應用程式裡廣泛使用。這使資料對任何人,在任何地方都可通路。資料庫可以儲存人類知識的很大部分,包括高度敏感的個人資訊和讓國際商務工作的關鍵資料。

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

威脅

在了解如何配置和使用SQL Server來保護你的資料,識别特定資料集和它的伺服器的威脅是重要的第一步。你建立的用來管理你的國小足球隊的裝置清單很可能不需要嚴格的安全措施。很可能你會想提供最小的通路控制,這樣的話,足球隊成員不能随機修改他擁有哪個足球盒的記錄。即使這些資料被盜或篡改也不會是世界末日。

另一方面,如果資料庫有關于足球隊孩子的個人資訊,例如家庭位址和聯系電話,很可能你想加強安全保護(或許法律上也要求你這麼做)。可能你會通過隔離通路來保護資料的隐私,這樣的話,幾乎任何可以通路資料庫來修改裝置資料,但隻有一些人可以通路個人資料。如果資料包括家長的信用卡号,你會需要極其小心的保護那個資料。

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

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

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

安全設計理念

早在2012年,比爾蓋茨釋出了他臭名昭著的計算機可信備忘錄,即微軟在産品裡如何考慮和實作安全的,可以證明是個轉折點。根據微軟官方網站,可信計算機政策啟動了。“基于良好的商業實踐,專注建立和帶來安全,隐私和可靠的計算體驗。我們的目标是更安全、更可信的網際網路”。

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

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

  • 安全設計(Secure by design):微軟進行廣泛的威脅分析和代碼設計與互動的安全審計,來确定攻擊者可以立足獲得伺服器和資料的地方。這樣讓微軟設計的SQL Server可以保護你在伺服器上存儲的資料的保密性,完整性和可用性。
  • 預設安全(Secure by default):SQL Server創造性的預設安裝并激活關鍵的核心資料庫元件。這就是說不是核心的資料庫的功能不會安裝,或者安裝之後不會啟用。沒有安裝的功能不安裝就不會作為攻擊目标。你必須清醒意識安裝或啟用的非核心功能。這會阻止你可能不知道卻安裝功能的很多攻擊,你以為從未用過它們。
  • 部署安全(Secure in deploymen):微軟提供工具,支援安裝SQL Server的安全并保持它的安全。SQL伺服器配置工具幫助你配置伺服器安全。最重要的是,SQL Server的更新已經是微軟線上更新的一部分,是以很容易獲得安全的更新和更新檔。
  • 互動安全(Secure through communication):微軟已經建立了完善的基礎設施來手機它産品中的漏洞。但這些資訊如果隻留在微軟内部的話是沒有任何用處的。是以公司緻力于新漏洞的互動,積極打更新檔來修正它們,定期釋出更新到它的線上幫助系統來展現新的安全資訊。

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

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

安全的2個階段

SQL Server的安全模型,像Windows一樣,是個2個階段的過程,允許使用者和其它登入的通路伺服器裡受保護的資源。

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

使用者可以登入到SQL Server,但除非它們有權限做什麼,例如通路資料庫,它就做不了什麼。是以你不僅需要為你的使用者提供授權憑證,你還要授權它們通路資料,在每個它們需要使用的資料庫裡為它們授權一次,定義賬号。

當你考慮它的時候,在每個資料庫裡需要一個使用者賬号更有意義。不然的話,什麼可以阻止使用者登入到SQL Server并可以通路想通路任何資料庫。這個概念有不同的含義來實作不同的場景,但這是安全的基本狀态。

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

SQL Server安全術語

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

  • 驗證(Authentication):如上面提到的,驗證是積極識别一個人的過程,通過需要證明它是可以登入的人。它回答問題:你是誰?
  • 授權(Authorization):一旦系統驗證你為一個有效使用者,授權(如上所述)決定使用者在伺服器或資料庫擁有的權限。它回答問題,這裡現在你能做什麼?
  • 組(Group):在Windows裡,組是已登入後與它關聯的主體。任何授權到組都會授權到組裡相關聯的登入。
  • 模拟(Impersonation):所有的Windows程序,包括各種SQL Server程序,在特定的安全上下文裡運作,通常是主體引起程序啟動。當程序臨時在不同的安全上下文時會發生模拟。這是非常強大的切必需的能力,但會引起潛在的濫用。
  • 登入(Login):登入是擁有伺服器執行個體裡的對象一些通路級别的主體。通常,登入常用來與使用者互動。但是SQL Server登入是一個用來從外面通路伺服器的賬号。有時候登入包括通路伺服器級别的對象,例如配置資訊,但不會授予資料庫裡的任何權限。
  • 許可(Permission):許可是通路保護資源的權利,例如從表讀取資料或在伺服器級别建立新的資料庫。一個學科通常意味着其他許可,取決于對象許可的範圍。
  • 主體(Principal):主體是可以接收通路SQL Server裡保護資源的任何使用者或代碼元件。
  • 權限(Privilege):權限是主體擁有的廣泛權利和許可。這個詞有時候和許可交替使用,通常意味着特定、狹義的權利。權利意味着一組廣泛的許可。
  • 角色(Role):SQL Server角色類似于Windows使用者組,但隻限于SQL Server執行個體範圍。對于一個組,你可以配置設定登入和使用者到角色,這就是這個角色擁有登入和使用者的所有許可。
  • 使用者(User):使用者是在特定資料庫裡擁有對象的一些通路級别的主體。使用者通常會映射到登入。簡單來說,登入可以通路SQL Server執行個體,使用者可以通路資料。

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

SQL Server安全管理和實作

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

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

SQL Server安全(1/11):SQL Server安全概述

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

同時在資料庫和伺服器級别,對象浏覽器包括了安全節點,讓你管理和實作其他各種安全功能。插圖1.2顯示了對AdventureWorksLT2012資料庫和伺服器執行個體級别的這個節點。這2個高亮的節點包括各種子節點,給你在選擇範圍内通路合适的安全對象。

SQL Server安全(1/11):SQL Server安全概述

插圖1.2:在對象浏覽器裡,在伺服器和資料庫級别的安全對象

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

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

代碼1.1展示了你可以使用T-SQL建立安全對象的簡單例子。代碼首先建立連結到現存系統登入的伺服器級别的登入。然後在AdventureWorksLT2012資料庫裡,代碼建立了個使用者映射到登入,配置設定了預設架構給使用者。最後的一點代碼向你展示了你如何在資料庫裡删除使用者和建立另一個使用者映射到同樣的登入。很作秀,當然,但是它展示了在代碼裡你能做什麼。或者你也可以在SSMS的圖形界面裡實作,如果你喜歡的話。

1 -- Add a Windows login to SQL Server
 2 CREATE LOGIN [PC201602202041\woodytu] FROM WINDOWS;
 3 GO
 4 
 5 USE AdventureWorksLT2012;
 6 GO
 7 
 8 -- Name the user the same name as login
 9 CREATE USER [PC201602202041\woodytu] FOR LOGIN [PC201602202041\woodytu]
10     WITH DEFAULT_SCHEMA = Production;
11 GO
12 
13 -- Or, rename the user in the database
14 DROP USER [PC201602202041\woodytu];
15 GO
16 CREATE USER woody FOR LOGIN [PC201602202041\woodytu];
17 GO
18 
19 -- Query metadata to show that user was created
20 SELECT * FROM sys.database_principals WHERE name = 'PC201602202041\woodytu';
21 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/

注:此文章為

WoodyTu

學習MS SQL技術,收集整理相關文檔撰寫,歡迎轉載,請在文章頁面明顯位置給出此文連結!

若您覺得這篇文章還不錯請點選下右下角的推薦,有了您的支援才能激發作者更大的寫作熱情,非常感謝!

繼續閱讀