在保密你的服務器和數據,防備當前復雜的攻擊,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的功能來應對它們,或者至少減少暴露數據給他們。
這個系列文章談到的SQL Server 2012的功能可以幫你緩解這些各類威脅和其他方面。你必須理解對你數據的威脅,才可以知道如何保護它們。不要在不能防止你特定數據威脅的措施上浪費時間。你永遠不能考慮到所有的假設情況,但最為最壞的情況你要保證你的數據庫服務器對它的面向客戶是完全不可用的。安全總是個妥協,對時間的風險和實現保障的必要金錢之間的平衡。
安全設計理念
早在2012年,比爾蓋茨發布了他臭名昭著的計算機可信備忘錄,即微軟在產品裡如何考慮和實現安全的,可以證明是個轉折點。根據微軟官方網站,可信計算機政策啟動了。“基於良好的商業實踐,專注創建和帶來安全,隱私和可靠的計算體驗。我們的目標是更安全、更可信的互聯網”。
話句話說,微軟在十多年前就變得非常關注安全。關於這個修改的第一個版本是SQL Server 2005,微軟開始在產品考慮充分的安全。自那以後,SQL Server的每個版本都會保留新的安全架構,同時加強它,增加新的功能來同時提高安全來應對新出現的威脅。
如微軟在SQL Server 2005時期裡所描述的,通過定義產品安全的四大支柱來影響SQL Server可信計算發展。
“它是安全的”的理念已經影響了整個產品。盡管SQL Server一打開就是相當安全的,當你創建數據庫和安裝服務時,你必須做出明智的安全選擇來保持SQL Server的安全。作出並保證生產數據庫服務器的安全需要行動和警惕。
記住有時候保護數據的最佳方法是直接不把它不放到數據庫裡——例如,只保存你必須絕對堅持有效的信用卡信息(這樣的人並不多)。如果你沒有這樣的需求,你應該處理信用卡事務,保存結果,而不是信用卡信息本身。你不會承受你沒有數據上的安全風險。
安全的2個階段
SQL Server的安全模型,像Windows一樣,是個2個階段的過程,允許用戶和其它登錄的訪問服務器裡受保護的資源。
用戶可以登錄到SQL Server,但除非它們有權限做什麼,例如訪問數據庫,它就做不了什麼。因此你不僅需要為你的用戶提供授權憑證,你還要授權它們訪問數據,在每個它們需要使用的數據庫裡為它們授權一次,定義賬號。
當你考慮它的時候,在每個數據庫裡需要一個用戶賬號更有意義。不然的話,什麼可以阻止用戶登錄到SQL Server並可以訪問想訪問任何數據庫。這個概念有不同的含義來實現不同的場景,但這是安全的基本狀態。
在這個系列的接下來文章會談到驗證和授權,你會學到在SQL Server裡如何實現各種安全功能來應付你對數據已經識別的威脅。
SQL Server安全術語
當你與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/