SQL Server安全級別2的樓梯:身份驗證

By Don Kiely2014/06/18sql

該系列
本文是樓梯系列的一部分:通往SQL Server安全的樓梯。數據庫

SQL服務器擁有您所需的一切,以保護您的服務器和數據免受當今複雜的攻擊。但在您可以有效地使用這些安全特性以前,您須要瞭解所面臨的威脅和一些基本的安全概念。這第一個階梯級別提供了一個基礎,這樣您就能夠充分利用SQL Server中的安全特性,而不會浪費時間來處理對您的數據沒有特定威脅的功能。小程序

認證過程的驗證,principal-a用戶或進程須要訪問SQL Server數據庫是誰或什麼它聲稱是。主體須要惟一的標識,這樣SQLServer就能夠肯定主體有哪些權限,若是有的話。正確的身份驗證是向數據庫對象提供安全訪問的必要的第一步。安全

SQLServer支持兩種身份驗證路徑:Windows集成身份驗證和SQLServer身份驗證。您使用的路徑取決於網絡環境、將訪問數據庫的應用程序類型以及這些應用程序的用戶類型。服務器

Windows身份驗證:這種身份驗證形式依賴於Windows在用戶登陸到Windows時執行重驗證身份。訪問SQL Server對象而後被分配到Windows登陸權限。只有當SQL Server在支持Windows NT或Kerberos身份驗證的Windows版本上運行時,這種類型的認證纔可用,這是Windows 2000以來的標準。
SQLServer身份驗證:SQL Server能夠徹底獨立地處理身份驗證。在這種狀況下,您能夠建立獨特的用戶名稱爲SQL Server和密碼登陸。用戶或應用程序鏈接到SQL Server,並提供這些憑據以供訪問。而後直接將權限分配給登陸,或者經過角色中的成員分配權限。
在SQL Server中配置身份驗證並非這兩種類型之間的簡單選擇。能夠以兩種方式任意配置身份驗證:網絡

混合模式認證:服務器支持SQL Server和Windows身份驗證。
Windows惟一模式:服務器只支持Windows身份驗證。
微軟強烈建議儘量使用Windows身份驗證。Windows具備強大的身份驗證選項,包括密碼策略,但Windows身份驗證在實際應用中並不老是實用的。SQLServer身份驗證能夠鉤住一些Windows身份驗證特性,但它並非那麼安全。app

Windows身份驗證
若是配置SQL Server以在Windows身份驗證模式下運行,則SQLServer將與Windows服務器假定信任關係。它假定Windows在登陸到Windows時對用戶進行身份驗證。SQL Server而後檢查用戶賬戶、任何Windows組和用戶多是哪一個成員的SQL Server角色,以肯定該用戶是否容許與各類SQLServer對象一塊兒工做。函數

Windows身份驗證與SQLServer身份驗證相比,有許多優勢,包括:工具

用戶只需登陸一次,那麼她就沒必要單獨登陸SQLServer了。
審計特徵
簡化登陸管理
密碼策略(在Windows Server 2003和之後)
Windows身份驗證的另外一大優點是,您對Windows用戶和組的任何更改都會自動反映在SQL Server中,所以您沒必要單獨管理它們。可是,若是在鏈接到SQL Server時對Windows用戶進行了更改,那麼在下次用戶鏈接到SQLServer以前,這些更改將不會生效。sqlserver

配置SQL Server安全設置
安裝SQL Server時,能夠選擇服務器實例容許的身份驗證模式。稍後,您能夠更改SQL Server Management Studio中可用的「服務器屬性」對話框中的設置。這些設置適用於SQL Server實例中的全部數據庫和其餘對象。所以,若是您須要爲任何數據庫使用SQL Server身份驗證,則必須爲服務器設置混合模式。

圖2.1顯示了安全管理頁面中的服務器屬性對話框,其中選擇了安全頁面。要打開此對話框,右鍵單擊對象資源管理器中的服務器實例名稱,而後從彈出菜單中選擇屬性,而後轉到安全頁面。經過單擊相應的單選按鈕並單擊OK提交更改,便可更改身份驗證模式。


圖2.1。爲SQLServer實例配置身份驗證模式。

添加Windows登陸
要使用Windows身份驗證,您的用戶在訪問SQL Server以前須要一個有效的Windows登陸賬戶。而後您能夠向Windows組授予鏈接到SQLServer的權限,或者若是不想授予集體權限,能夠授予個別Windows用戶的權限。

一個關於使用Management Studio管理安全的好東西,你能夠設置登陸,同時提供數據庫訪問。爲了使Windows登陸訪問SQL Server和adventureworks2012數據庫,使用如下步驟,假設本地機器上已經有一joestairway登陸定義。

打開SQL Server Management Studio,並確保對象資源管理器窗口可見,並鏈接到SQLServer實例。
展開服務器對象的樹視圖,而後展開安所有分。您將看到幾個子節點,如圖2.2所示。


圖2.2。一個服務器的對象資源管理器中的安所有分,在那裏你能夠定義登陸。

右鍵單擊登陸節點,從彈出菜單選擇新的登陸,打開登陸–新對話框。
確保選中了Windows身份驗證單選按鈕。
您能夠經過如下兩種方式選擇Windows登陸。第一種方法是直接輸入域名或計算機名,而後一個反斜槓和用戶的Windows登陸名。第二,通常容易,方法是點擊「搜索」按鈕打開「選擇用戶或組」對話框。鍵入用戶名並單擊「檢查名稱」按鈕以找到確切名稱。若是找到用戶,將在框中顯示全名,如圖2.3所示。單擊OK選擇該用戶。


圖2.3。查找要添加到SQLServer的Windows登陸。

在登陸–新建對話框,設置adventureworks2012數據庫登陸的默認數據庫。這是當用戶鏈接到服務器而不指定數據庫時使用的數據庫。它不限制用戶只能訪問該數據庫。圖2.4顯示告終果在機命名爲馬拉松的Windows joestairway用戶登陸,用默認的數據庫設置爲樣本adventureworks2012數據庫。

圖2.4。登陸-新對話框使Windows登陸能夠訪問SQLServer實例。

提示:
永遠不要將默認數據庫設置保留到主數據庫。我從痛苦的經歷中說:鏈接服務器太容易,忘記更改數據庫。若是您運行的腳本在主數據庫中建立了數百個數據庫對象,那麼手工刪除這些對象以清理主數據庫將是一項很是單調乏味的工做。

接下來,讓用戶訪問數據庫。從對話框左側的列表中選擇「用戶映射」頁。經過檢查框旁邊的數據庫名稱授予用戶訪問數據庫的adventureworks2012。SQL Server自動將用戶映射到數據庫中具備相同名稱的用戶,如在表中的第三列中能夠看到的那樣,儘管您能夠更改用戶名,若是您願意的話。在數據庫中分配銷售做爲用戶的默認模式,或者在默認模式列中鍵入它,或者單擊省略號(…)按鈕從列表中選擇它。對話框應該如圖2.5所示。

圖2.5。授予Windows登陸訪問數據庫的adventureworks2012。

提示:
設置登陸的默認數據庫並授予對數據庫的訪問權限有區別。默認數據庫僅僅意味着SQL Server試圖在用戶登陸時將上下文更改成該數據庫,而不指定數據庫。但這並不授予任何權限在數據庫中作任何事情,甚至不容許訪問數據庫。這意味着能夠分配一個用戶不能訪問的默認數據庫。要讓用戶在訪問數據庫後作任何有用的事情,就須要顯式地授予用戶權限。

默認狀況下,新的Windows登陸訪問服務器。可是,若是要顯式拒絕對服務器的登陸訪問,請從登陸左側頁面列表中選擇「新對話框」,而後選擇「拒絕單選」按鈕。還能夠經過選擇禁用按鈕臨時禁用登陸。圖2.6顯示了這些選項。

圖2.6。授予或拒絕訪問服務器並臨時禁用登陸賬戶的選項。

單擊OK建立用戶。
您也能夠以一樣的方式向Windows Server添加一個Windows組。在這種狀況下,組中的任何成員均可以訪問數據庫服務器,不管您將該組的訪問權限用於數據庫中的對象,均可以訪問數據庫服務器。

使用用戶名和密碼
當您使用SQL Server登陸認證,客戶端應用程序必須提供一個有效的用戶名和密碼以鏈接到數據庫。這些SQL Server登陸保存在SQL Server中,沒有說起Windows。登陸時,若是沒有賬戶匹配用戶名和密碼,SQLServer將引起錯誤,用戶沒法訪問SQLServer。

儘管Windows身份驗證更安全,你能夠選擇在某些狀況下,而不是使用SQL Server登陸。對於不具備普遍安全需求的簡單應用程序,SQL Server身份驗證更容易管理,它可讓您避免與Windows安全混淆。若是客戶端是在舊版本的Windows上運行(基本上,比Windows 2000以上)或非Windows操做系統,你必須使用SQL Server登陸。

建立一個SQL Server登陸,使用相同的登陸–新Windows登陸對話框。可是,不要選擇Windows登陸,鍵入一個惟一的登陸名,沒有域或機器名,並提供密碼。例如,圖2.7顯示瞭如何建立新的SQL Server登陸Casper,adventureworks2012他的默認數據庫。

圖2.7。建立SQL服務器登陸。

全部的用戶定位和地位的其餘選項都是相同的SQL Server登陸他們的Windows登陸。

SQL Server登陸經過Transact-SQL
還可使用Transact-SQL代碼執行相同的操做。清單2.1中的建立登陸代碼用至關強的密碼建立了一個SQLServer登陸黃玉:

CREATE LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v'; GO

清單2.1。建立一個新的T-SQL SQL Server登陸代碼。
而後,給黃玉進入adventureworks2012數據庫,使用建立用戶聲明和分配一個默認的模式,

USE AdventureWorks2012;
GO

CREATE USER Topaz FOR LOGIN Topaz
    WITH DEFAULT_SCHEMA = HumanResources;
GO

清單2.2。建立與SQL Server登陸相關聯的數據庫用戶的代碼。
提示:
與級別爲1的樓梯同樣,若是您但願在sql服務器的本地實例中運行這些代碼示例,您可能須要對代碼示例進行一些更改。清單2.2中的代碼假定你有adventureworks2012數據庫安裝。之後的代碼示例假定你的機器上運行代碼,命名爲馬拉松在Windows中有joestairway用戶。能夠隨意命名您的機器馬拉松或建立具備該名稱的用戶,或酌情更改代碼。

像Windows登陸,你能夠地圖服務器的登陸黃玉其餘一些名稱數據庫。清單2.3中的代碼映射黃玉在adventureworks2012 topazd用戶數據庫:

DROP USER Topaz;
GO
CREATE USER TopazD FOR LOGIN Topaz WITH DEFAULT_SCHEMA = HumanResources;
GO

清單2.3。刪除現有用戶的代碼,而後添加與登陸名不一樣的名稱的數據庫用戶。

謹防SA登陸
若是你配置你的SQL Server支持的SQL Server登陸,有一個內置的SQL Server登陸,你須要提防sa登陸,你可能已經注意到了掛在對象資源管理器登陸節點。SA或系統管理員登陸主要包括與舊版本的SQL Server的向後兼容性。sa登陸名映射到sysadmin固定服務器角色,誰登陸到SQL Server做爲SA是一個完整的系統管理員,以不可撤銷的權利在整個SQL Server實例中全部數據庫它。這是一個強大的登陸,確實。

不能修改或刪除SA登陸。若是在安裝SQL Server時選擇混合模式身份驗證,則提示您爲SA用戶提供一個密碼。沒有密碼,任何人均可以用沒有密碼的SA登陸,玩「讓咱們管理服務器」,不用說,這是你最不但願你的用戶作的事情。若是其餘系統管理員不可用或忘記了Windows密碼,請使用SA登陸做爲後門登陸。若是發生這種狀況,你可能須要新的管理員!

永遠不要使用SA登陸來訪問應用程序中的數據庫。若是黑客可以得到應用程序的控制權,那麼這樣作可使黑客管理級別控制你的數據庫服務器。在遙遠的過去,這是攻擊服務器的一種簡單方式,是一種可怕的作法。相反,要麼爲應用程序設置一個定製的Windows或SQLServer登陸,而後給該登陸應用程序運行所需的絕對最低權限(實現最小特權原則)。

提示:
事實上,您應該考慮徹底禁用SA登陸,使用您剛纔看到的登陸屬性對話框的狀態頁。這樣一來,攻擊者就不能使用這個功能強大的登陸來得到服務器實例的控制權,不管您是否擁有強大的SA密碼。

密碼策略和實施
在2005以前的SQL服務器版本中,系統管理員沒有容易的方法來執行密碼策略,從而有助於使系統更安全。例如,SQL Server沒有辦法強制用戶建立最短長度的強密碼和字母數字和其餘字符的混合。若是有人想爲密碼建立一個帶有一個字母的登陸,那麼就不能配置SQL Server來阻止它。一樣,也沒有辦法使密碼按期過時,好比每三個月一次。一些人理所固然地認爲這是不使用SQL Server登陸的主要緣由。

SQL Server的更新版本能夠鏈接到Windows Server 200三、Windows Vista或更高版本的密碼策略。密碼仍然存儲在SQL Server中,但SQL Server打電話到netvalidatepasswordpolicy() Windows API的方法,這是首次推出的Windows Server 2003。這個API功能適用於Windows密碼政策的SQL Server登陸並返回一個值,指示是否密碼是有效的。當用戶建立、設置或重置密碼時,SQLServer調用此函數。

您能夠在Windows控制面板的管理工具中經過本地安全設置小程序定義Windows密碼策略。密碼策略部分如圖2.8所示,具備默認設置。applet有一個單獨的賬戶鎖定策略部分,如圖2.9所示,當用戶作出太多不成功的登陸嘗試時生效。默認狀況下,在一個新的Windows安裝中禁用鎖定策略。

圖2.8。Windows本地安全策略小程序,顯示默認密碼策略。

圖2.9。Windows本地安全策略小程序,顯示默認賬戶鎖定策略。

表2.1列出了密碼策略以及默認值以及關於它們如何工做的一些註釋。

Category Policy Name Default Notes
Password Policy Enforce password history 0 passwords remembered Prevents users from reusing old passwords, such as alternating between two passwords.
Minimum password length 0 characters Use this to require longer passwords to make them harder to break.
Password must meet complexity requirements Disabled Minimum mix of alphanumeric and other characters, and does not contain the user name.
Password Expiration Maximum password age 42 days Number of days before a user is prompted to change their password.
Minimum password age 0 Days Number of days before a user is allowed to change a password.
Account Lockout Policy Account lockout duration Not applicable Time in minutes that the account is locked out if the lockout threshold is enabled.
Account lockout threshold 0 invalid login attempts Maximum number of unsuccessful login attempts before the account is locked out.
Reset account lockout counter after Not applicable Time in minutes after which the counter of unsuccessful attempts is reset; enabled when the lockout threshold is enabled.

 

表2.1。Windows密碼策略設置。

在建立登陸時,能夠啓用或禁用密碼策略執行。登陸–新對話框,啓用當你建立一個SQL Server登陸名下的部分,如圖2-10。


圖2-10。爲新登陸執行密碼策略。

密碼策略適用於當您使用Transact-SQL建立登陸以及。例如,若是您在Windows 2003 Server或更高版本運行SQL Server並啓用了密碼策略,清單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_expiration選項控制是否對SQL Server檢查政策和check_policy密碼時代適用於其餘政策。一個must_change選項可用,迫使用戶在下次登陸時更改密碼。

若是用戶作了太多失敗的登陸嘗試,超過了賬戶鎖定策略中設置的數量,管理員可使用解鎖選項重置賬戶,如清單2.6所示。

ALTER LOGIN Topaz WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v' UNLOCK

清單2.6。解鎖因爲失敗的登陸嘗試而鎖定的登陸的代碼。

在Windows Server 2003以前在Windows版本上運行SQL Server時,能夠啓用強制密碼策略。可是SQL Server使用默認設置的最小長度爲六個字符,檢查密碼與登陸名的全部部分或任何部分不匹配,而且是大寫字母、小寫字母、數字和其餘字符的組合。不能更改這些默認值。但但願您不會在這樣一箇舊版本的Windows上運行SQL Server,若是隻是由於那時的安全性有了很大的改進的話!

總結
在SQL Server安全性的這個級別中,您已經瞭解了SQL Server中可用的許多身份驗證選項。Windows集成身份驗證是最安全的,但並不老是可行的,微軟多年來使得SQL Server認證更加完善和安全。可是,若是您使用混合模式身份驗證,請不要忘記給SA登陸一個很是強的密碼,或者更好地禁用它!最喜歡的對象,你能夠創造和改變了他們使用的很好的GUI界面管理工做室或T-SQL代碼。若是您在一個現代版本的Windows上運行SQL Server,則能夠鏈接到本地安全策略的密碼策略中。

本文是SQL Server安全樓梯的一部分。

相關文章
相關標籤/搜索