SQL Server的階梯安全級別2:身份驗證 源自:http://www.sqlservercentral.com/articles/Stairway+Series/109975/ 作者:Don Kiely 2014/06/18 翻譯:劉瓊濱 謝雪妮 許雅莉 賴慧芳 該系列 本文是階梯系列的一部分 ...
SQL Server的階梯安全級別2:身份驗證
源自:http://www.sqlservercentral.com/articles/Stairway+Series/109975/
作者:Don Kiely
2014/06/18
翻譯:劉瓊濱 謝雪妮 許雅莉 賴慧芳
該系列
本文是階梯系列的一部分:SQL Server的階梯
SQL Server擁有一切您需要確保您的伺服器和數據對今天的複雜攻擊。 但在你可以使用這些有效安全特性,您需要瞭解你所面對的威脅和一些基本的安全概念。 第一階梯水平提供了基礎,這樣您就可以充分利用安全特性在SQL Server上浪費時間特性,什麼都不做來防止特定威脅您的數據。
身份驗證是驗證的過程,一個校長,用戶或進程需要訪問SQL Server資料庫它聲稱是什麼人或者什麼東西。 主要需要的唯一標識,以便SQL Server可以確定哪些許可權校長,如果任何。 正確的身份驗證是必要的第一步提供安全訪問資料庫對象。
SQL Server身份驗證支持兩種路徑:Windows集成驗證和SQL Server身份驗證。 你使用的路徑依賴於網路環境,將訪問資料庫類型的應用程式,這些應用程式的類型的用戶。
- Windows身份驗證:這種形式的身份驗證依賴於Windows的重型lifting-validating身份當用戶登錄視窗。 許可權訪問SQL Server對象被分配到Windows登錄。 這種類型的身份驗證是只有當SQL Server上運行一個版本的Windows,支持Windows NT或Kerberos身份驗證,幾乎從Windows 2000標準。
- SQL Server身份驗證:SQL Server可以照顧自己完全驗證。 在這種情況下,您可以創建惟一的用戶稱謂登錄在SQL伺服器(密碼。 用戶或應用程式連接到SQL Server和供應這些憑據訪問。 然後分配許可權,登錄直接或通過加入一個角色。
在SQL Server配置身份驗證並不是一個簡單的非此即彼的選擇這兩種類型。 您可以配置身份驗證在兩個方面:
- 混合模式驗證:伺服器同時支持SQL server和Windows身份驗證。
- Windows只有模式:伺服器僅支持Windows身份驗證。
微軟強烈建議儘可能使用Windows身份驗證。 Windows有可靠的身份驗證選項,包括密碼策略,但Windows身份驗證並不總是實用在真實的應用程式中。 SQL Server身份驗證可以鉤到一些Windows身份驗證功能,但它不是安全的。
Windows身份驗證
如果您配置您的SQL伺服器運行在Windows身份驗證模式中,SQL Server假定一個信任關係與Windows伺服器。 它假定Windows身份驗證的用戶登錄時。 SQL Server然後檢查用戶帳戶,任何Windows組和任何SQL伺服器角色的用戶可能是一個成員,以確定該用戶是否允許使用各種SQL Server對象。
Windows身份驗證在SQL Server身份驗證有幾個優點,包括:
- 一個用戶登錄的,所以她沒有分別登錄SQL Server
- 審計功能
- 簡化登錄管理
- 密碼策略(在Windows Server 2003和後)
Windows身份驗證的另一個優點是,您所作的改變Windows用戶和組將自動反映在SQL Server中,所以你不必分別管理。 然而,如果您更改Windows用戶連接到SQL Server時,這些變化不會生效,直到下次用戶連接到SQL Server。
配置SQL伺服器安全設置
當你安裝SQL Server,您可以選擇伺服器實例將允許的身份驗證模式。 以後你可以更改設置在伺服器屬性對話框可在SQL Server Management Studio。 這些設置應用於所有資料庫和其他對象的SQL Server實例。 如果你需要使用SQL Server身份驗證對於任何資料庫,設置混合模式為伺服器。
圖2.1顯示了伺服器屬性對話框與安全管理工作室頁面選中。 打開這個對話框,右鍵單擊該伺服器實例名稱在對象資源管理器中,並且從彈出菜單中選擇“屬性”,進入安全頁面。 你改變身份驗證模式只需點擊適當的單選按鈕,然後單擊OK以提交更改。
圖2.1。 SQL伺服器實例配置的身份驗證模式。
添加一個Windows登錄
使用Windows身份驗證,您的用戶將需要一個有效的Windows登錄帳戶才能訪問SQL伺服器。 你可以把許可權授予一個Windows組連接到SQL Server,或者你可以把許可權授予個人Windows用戶如果你不想集體授予許可權。
的一個優點使用管理工作室管理安全,您可以設置登錄並提供資料庫訪問在同一時間。 啟用Windows登錄SQL伺服器和訪問AdventureWorks2012資料庫,使用以下步驟,它假定本地機器上已經有一個JoeStairway登錄的定義。
- 打開SQL Server Management Studio並確保對象資源管理器視窗是可見的,並且你連接到一個SQL伺服器實例。
- 擴大伺服器對象的樹視圖,然後展開安全部分。 您將看到幾個子節點,如圖2.2所示。
圖2.2。 伺服器的安全部分的對象資源管理器,您可以定義登錄。
- 右鍵單擊登錄節點並從彈出菜單中選擇新的登錄打開登錄對話框——新。
- 確保Windows身份驗證單選按鈕被選中。
- 您可以選擇Windows登錄兩種方式。 第一種方式是直接輸入域或機器的名字,然後一個反斜杠,Windows用戶的登錄名。 第二,一般容易,方法是單擊搜索按鈕打開對話框選擇用戶或組。 輸入用戶名,點擊“檢查名稱”按鈕找到確切的名字。 如果用戶發現,完整的名稱將會出現在箱子里,如圖2.3所示。 點擊OK以選擇該用戶。
圖2.3。 找到一個Windows登錄添加到SQL Server。
- 回到登錄——新的對話框,設置AdventureWorks2012資料庫登錄的預設資料庫。 這個資料庫時使用的用戶連接到伺服器並沒有指定一個資料庫。 它不限制用戶只能訪問資料庫。 圖2.4顯示了生成的登錄視窗JoeStairway用戶機器上叫馬拉松,與一個預設的資料庫設置為樣本AdventureWorks2012資料庫。
圖2.4。 登錄——新對話框允許Windows登錄訪問SQL伺服器實例。
提示:
從來沒有保留預設設置為資料庫主資料庫。 我說從痛苦的經驗:太容易連接到伺服器,忘了修改資料庫。 如果你運行一個腳本,該腳本創建數以百計的資料庫對象主資料庫,您將有一個很乏味的工作刪除這些對象手動清理主資料庫。
- 接下來,給用戶訪問資料庫。 從列表中選擇用戶映射頁左邊的對話框。 授予用戶訪問AdventureWorks2012資料庫通過檢查框旁邊的資料庫名稱。 SQL伺服器會自動將用戶映射到用戶資料庫中具有相同名稱的,正如你所看到的在第三列在表中,儘管你可以更改用戶名,如果您想要的。 分配銷售資料庫中用戶的預設模式,通過鍵入它在預設模式列或單擊省略號(…)按鈕從列表中選擇它。 對話框如圖2.5。
圖2.5。 授予一個Windows登錄訪問AdventureWorks2012資料庫。
提示:
是有區別的設置一個預設的資料庫登錄和授權訪問資料庫。 僅僅意味著SQL Server的預設資料庫試圖改變環境資料庫,當用戶登錄時沒有指定一個資料庫。 但這並不授予任何許可權資料庫中做任何事,甚至允許訪問資料庫。 這意味著它可以分配一個預設的資料庫,用戶不能訪問。 為用戶做任何有用的事一旦訪問一個資料庫,您需要明確授予用戶的許可權。
- 預設情況下,新的Windows登錄訪問伺服器。 但如果你想明確拒絕登錄訪問到伺服器,從列表中選擇狀態的頁面的左側登錄——新對話框並選擇否認單選按鈕。 你也可以暫時禁用登錄通過選擇禁用按鈕。 圖2.6顯示了這些選項。
圖2.6。 期權授予或拒絕訪問伺服器和臨時禁用登錄帳戶。
- 單擊OK創建用戶。
您還可以添加一個Windows組SQL Server以同樣的方式。 在這種情況下,集團的任何成員將會訪問資料庫伺服器,與你給的組對象的訪問在資料庫中。
SQL Server身份驗證
當您使用SQL Server登錄進行身份驗證時,客戶端應用程式必須提供一個有效的用戶名和密碼來連接到資料庫。 這些SQL Server登錄保存在SQL伺服器,沒有窗戶。 當登錄時,如果不考慮匹配的用戶名和密碼,SQL Server提出了一個錯誤,用戶不能訪問SQL Server。
儘管Windows身份驗證是更安全的,你可以選擇使用SQL Server登錄而不是在某些情況下。 SQL Server身份驗證更容易管理對於簡單的應用程式,沒有廣泛的安全需要,而且它允許你不要糾纏與Windows安全。 如果客戶端運行在舊版本的Windows(基本上,任何Windows 2000歲以上)或非Windows操作系統,您必須使用SQL Server登錄。
創建一個SQL Server登錄,使用相同的登錄登錄——新對話框視窗。 而是選擇一個Windows登錄,輸入一個獨特的登錄名域或電腦名稱,並提供一個密碼。 例如,圖2.7顯示瞭如何創建一個新的SQL Server登錄卡斯珀並使AdventureWorks2012他的預設資料庫。
圖2.7。 創建一個SQL Server登錄。
的所有其他選項用戶映射和地位是相同的SQL Server登錄Windows登錄。
通過transact - SQL SQL Server登錄
您還可以執行相同的動作transact - sql代碼。 的CREATE LOGIN代碼清單2.1創建一個SQL Server登錄黃玉與一個相當強大的密碼:
CREATE LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v'; GO
清單2.1。 代碼與t - SQL來創建一個新的SQL Server登錄。
然後,授予黃玉訪問AdventureWorks2012資料庫,使用CREATE USER聲明和分配一個預設模式,如清單2.2所示。
USE AdventureWorks2012; GO CREATE USER Topaz FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources; GO
清單2.2。 代碼來創建一個資料庫用戶關聯到一個SQL Server登錄。
提示:
與一級樓梯一樣,你可能需要做出一些改變的代碼示例,如果你想運行在本地SQL Server的實例。 清單2.2中的代碼假定你有AdventureWorks2012資料庫安裝。 後來代碼示例假設您在一臺機器上運行代碼命名馬拉松和有一個JoeStairway用戶在Windows。 隨意命名您的機器馬拉松或創建一個用戶名字,或改變代碼。
像Windows登錄,您可以映射伺服器登錄黃玉其他一些名稱在資料庫中。 中的代碼清單2.3地圖黃玉到TopazD用戶在AdventureWorks2012資料庫:
USE AdventureWorks2012; GO CREATE USER Topaz FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources; GO
清單2.3。 代碼放棄現有的用戶然後添加一個資料庫用戶名與登錄名不同。
謹防sa登錄
如果你支持SQL Server登錄配置您的SQL伺服器,有一個內置的SQL Server登錄,您需要小心——salogin-which您可能已經註意到掛在登錄節點對象資源管理器。 的sa或系統管理員,登錄包含主要用於向後相容舊版本的SQL伺服器。 的sa登錄映射到系統管理員固定伺服器角色,和任何人登錄到SQL serversa是一個完整的系統管理員,不可撤銷的權利在整個SQL伺服器實例和資料庫。 這的確是一個強大的登錄。
你不能修改或刪除sa登錄。 如果您選擇混合模式驗證安裝SQL Server時,提示輸入密碼sa用戶。 沒有密碼,任何人都可以以sa沒有密碼,登錄,“讓我們管理伺服器。 “不用說,這是你想讓你的用戶做的最後一件事。 登錄使用sa登錄只作為一個後門如果其他系統管理員不可用或忘記了他們的Windows密碼。 如果發生這種情況,您可能需要新的管理員!
永遠不要使用sa登錄應用程式中訪問資料庫。 這樣做可以讓黑客管理層次控制資料庫伺服器如果黑客可以控制應用程式。 在遙遠的過去,這是一個簡單的方法來攻擊伺服器和一個可怕的實踐。 相反,設置一個自定義的視窗或應用程式的SQL Server登錄使用,和給登錄運行應用程式所需的絕對最小許可權(實現了最小特權原則)。
提示:
事實上,你應該考慮禁用sa登錄,使用的狀態頁面登錄你之前看到的屬性對話框。 這樣攻擊者不能使用這個全能的登錄控制你的伺服器實例,你是否有一個強大的sa密碼或不是。
密碼策略和執行
在版本的SQL Server 2005年以前,沒有簡單的方法為系統管理員執行密碼策略,可以幫助使系統更加安全。 例如,SQL Server沒有辦法強迫用戶創建強密碼的最小長度和其他字母數字和字元。 如果有人想和一個字母創建一個登錄密碼,您不能配置SQL Server來防止它。 同樣,沒有辦法使密碼定期到期,如每三個月。 有些人理所當然地認為這是一個主要的理由不使用SQL Server登錄。
最近版本的SQL伺服器可以連接到Windows Server 2003的密碼策略,Windows Vista或更高版本。 密碼仍然存儲在SQL Server,但是SQL伺服器進行調用Windows API NetValidatePasswordPolicy()方法,該方法首先是在Windows Server 2003中引入的。 這個API函數Windows密碼策略適用於SQL Server登錄並返回一個值,指示是否密碼是有效的。 SQL伺服器調用這個函數當用戶創建,集,或重置密碼。
您可以定義Windows密碼策略通過本地安全設置applet Windows控制面板的管理工具之一。 密碼策略部分與預設設置如圖2.8所示。 小應用程式有一個單獨的帳戶鎖定策略部分,如圖2.9所示,當用戶生效使太多的失敗的登錄嘗試。 預設情況下,鎖定策略被禁用一個新的Windows安裝。
圖2.8。 Windows本地安全策略applet,顯示預設的密碼策略。
圖2.9。 Windows本地安全策略applet,顯示預設的帳戶鎖定策略。
表2.1列出了密碼策略預設值和一些筆記如何工作。
類別 |
政策的名字 |
預設的 |
筆記 |
密碼策略 |
執行密碼歷史 |
0密碼記得 |
等防止用戶重覆使用舊密碼,兩個密碼之間交替。 |
最小密碼長度 |
0字元 |
使用這個需要更長的密碼,使它們難以打破。 |
|
密碼必須符合複雜性要求 |
禁用 |
最小的字母數字組合和其他字元,不包含用戶名。 |
|
密碼過期 |
年齡最大的密碼 |
42天 |
數天前一個用戶提示修改密碼。 |
年齡最小的密碼 |
0天 |
數天前允許用戶更改密碼。 |
|
帳戶鎖定策略 |
帳戶鎖定時間 |
不適用 |
時間在幾分鐘內,賬戶就會被鎖定,如果啟用鎖定閾值。 |
帳戶鎖定閾值 |
0無效的登錄嘗試 |
最大數量的失敗的登錄嘗試鎖定賬戶之前。 |
|
重置帳戶鎖定櫃臺後 |
不適用 |
時間在幾分鐘後失敗的計數器複位; 啟用鎖定閾值時啟用。 |
表2.1。 Windows密碼策略設置。
你可以啟用或禁用密碼策略執行,當你創建一個登錄。 登錄——新對話框中有一節在登錄名,當您創建一個啟用了SQL Server登錄,如圖2 - 10所示。
圖2 - 10。 執行新的登錄密碼策略。
密碼策略應用當您使用transact - sql創建登錄。 例如,如果您正在運行SQL Server或Windows 2003伺服器上後,啟用密碼策略,中的代碼清單2.4將會失敗。
USE master; GO CREATE LOGIN SIMPLEPWD WITH PASSWORD = 'SIMPLEPWD'; GO
清單2.4。 試圖創建一個登錄密碼,違反了密碼策略。
這段代碼失敗的原因是密碼不能與用戶名相同。
你可以當您創建或更改登錄控制政策。 清單2.5中的代碼關閉的選項來檢查過期和政策。
ALTER LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v', CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;
清單2.5。 代碼更改登錄為這隻登錄禁用密碼策略。
的CHECK_EXPIRATIONSQL Server選項控制是否檢查的年齡對政策和密碼CHECK_POLICY適用於其他政策。 一個MUST_CHANGE選擇是可用的,部隊在下次登錄用戶修改密碼。
如果一個用戶是太多的不成功的嘗試登錄,超過帳戶鎖定策略中設置,管理員可以重置帳戶使用UNLOCK選項,如清單2.6所示。
ALTER LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v' UNLOCK
清單2.6。 代碼解鎖登錄,是鎖著的,因為太多的失敗的登錄嘗試。
你可以啟用密碼策略執行版本的Windows上運行SQL Server時,在Windows Server 2003。 但是SQL Server使用預設設置的最小長度為6個字元,檢查密碼不匹配的全部或任何部分的登錄名稱,和是一個混合的大寫字母,小寫字母,數字,和其他字元。 你不能改變這些預設值。 但是希望你不是這樣的一個老版本的Windows上運行SQL Server,如果只是因為巨大的安全改進之後!
總結
在這種級別的SQL Server安全樓梯,你學到很多在SQL Server身份驗證選項可用。 Windows集成驗證是最安全但並不總是可行的,和微軟SQL Server身份驗證更好、更安全。 但是如果你使用混合模式驗證,別忘了給sa登錄一個非常強大的密碼,或者更好的是,禁用它! 像大多數安全對象,您就可以創建並改變他們使用漂亮的GUI界面管理工作室或t - sql代碼。 如果你在一個現代版本的Windows上運行SQL Server,您可以鉤到本地安全策略的密碼策略。