在保密你的服務器和數據,防備當前複雜的攻擊,SQL Server有你須要的一切。但在你能有效使用這些安全功能前,你須要理解你面對的威脅和一些基本的安全概念。這篇文章提供了基礎,所以你能夠對SQL Server裏的安全功能充分利用,不用在面對特定威脅,不能保護你數據的功能上浪費時間。sql
身份驗證是驗證主體(須要訪問SQL Server數據庫的用戶或進程,是聲稱是的人或物)的過程。主體須要惟一的身份,這樣的話SQL Server能夠決定主體有哪一個許可。在提供安全訪問數據庫對象中,正確的身份驗證是必須的第一步。數據庫
SQL Server支持身份驗證的兩個途徑:Windows集成身份驗證和SQL Server身份驗證。你使用的途徑取決於網絡環境,應用程序訪問數據庫的類型和這些應用程序的用戶類型。小程序
在SQL Server裏在這2個類型之間配置身份驗證不是一個非此即彼的選擇(能夠混合使用)。你能夠在任何兩個方式裏配置身份驗證:瀏覽器
只要可能的話,微軟強烈推薦使用Windows身份驗證。Windows擁有可靠的驗證選項,包括密碼策略,但正真正的應用程序裏,Windows身份驗證並不老是可行的。SQL Server身份驗證能夠嵌入Windows驗證的一些功能,但它不太安全。安全
若是你配置你的SQL Server在Windows身份驗證裏操做,SQL Server認爲與Windows服務器有信任關係。當它們登陸到Windows裏時,SQL Server認爲Windows已經驗證用戶。而後SQL Server檢查用戶帳號,任何Windows組和任何SQL Server角色,看用戶是不是其成員之一來決定用戶是否容許與各個SQL Server對象打交道。服務器
與SQL Server身份驗證比,Windows身份驗證有不少優點,包括:網絡
Winows身份驗證的另外一個大優點是你對Windows用戶和組的任何修改會自動在SQL Server裏生效,所以你不須要單獨管理它們。而後,若是你對Windows用戶作出的修改,它們此時恰好鏈接到SQL Server,這些修改不會生效,直到下次用戶鏈接到SQL Server纔會生效。架構
當你安裝SQL Server時,你能夠選擇SQL實例容許的驗證模式。安裝完成後你能夠在SSMS裏的服務器屬性對話框裏修改這個設置。這些設置適用於SQL Server實例裏的全部數據庫和其它對象。所以若是你須要爲任何數據庫使用SQL Server身份驗證,你須要爲服務器設置爲混合模式。函數
插圖2.1顯示了在SSMS裏選擇了【安全性】頁的【服務器屬性】對話框。爲了打開這個對話框,在對象瀏覽器裏右擊服務器實例名,從彈出的菜單裏選擇【屬性】,而後點擊【安全性】頁。經過點擊對應的單選框和點擊【肯定】提交修改,就能夠修改驗證模式。工具
插圖2.1:爲SQL Server實例配置驗證模式
使用Windows身份驗證,你的用戶在能訪問SQL Server前須要驗證Windows登陸帳號。而後你能夠授予一個Windows組鏈接到SQL Server,或者你能夠授予許可給單獨的Windows用戶,若是你不想授予集體許可。
使用SSMS管理安全的一個好處是你能夠同時配置登陸和數據庫訪問。啓用Windows登陸到訪問SQL Server和AdventureWorks2012數據庫。使用下列步驟,並假定本地機器已經定義了woodytu用戶。
你也能夠在一樣的方式裏添加Windows組到SQL Server,組的任何成員也能夠訪問數據庫服務器,包括你給組的數據庫裏的任何對象 。
當你使用SQL Server登陸做爲驗證時,客戶端應用程序須要提供有效的用戶名和密碼來鏈接到數據庫。這些SQL Server登陸在SQL Server裏保存,與Windows無關。當在登陸時,若是沒有匹配的用戶名和密碼,SQL Server拋出錯誤,用戶不能訪問數據庫。
儘管Windows身份驗證更加安全,在一些狀況或許你只能選擇SQL Server登陸來代替。對於簡單沒有普遍安全需求的應用程序,SQL Server身份驗證更容易管理,它容許你避免Windows安全的複雜。並且若是客戶端運行在更老版本的Windows(比Windows 2000還老)或非Windows的操做系統,你必須使用SQL Server登陸。
建立SQL Server登陸,使用和Windows登陸一樣的【登陸名-新建】對話框。但不是選擇Windows登陸,輸入沒有域名或機器名的用戶名,並提供密碼。例如,插圖2.7顯示瞭如何建立一個新的SQL Server登陸user,把AdventureWorks2012做爲他的默認數據庫。
插圖2.7:建立SQL Server登陸
對於用戶映射和狀態的全部其它選項的SQL Server登陸和Windows登陸是同樣的。
你也能夠用T-SQL代碼來進行一樣的操做。在代碼2.1裏的Create Login代碼建立一個有強勁密碼的SQL Server登陸Tudou。
1 CREATE LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v'; 2 GO
代碼2.1:使用T-SQL建立新的SQL Server登陸的代碼
而後,授予Tudou訪問AdventureWorks2012數據庫,使用CREATE USER語句並分配默認的架構,如代碼2.2所示。
1 USE AdventureWorks2012; 2 GO 3 4 CREATE USER Tudou FOR LOGIN Tudou 5 WITH DEFAULT_SCHEMA = HumanResources; 6 GO
代碼2.2:用SQL Server登陸關聯建立數據庫用戶的代碼
提示:
如第一篇,若是你想在本地SQL Server實例運行它們的話,極可能你須要對代碼作些改動。在代碼2.2裏假定你已經安裝了AdventureWorks2012數據庫。
像Windows登陸,你能夠映射服務器登陸Tudou到數據庫裏其它一些名稱。代碼2.3裏在AdventureWorks2012數據庫裏映射TudouZ到Tudou用戶。
1 DROP USER Tudou; 2 GO 3 CREATE USER TudouZ FOR LOGIN Tudou WITH DEFAULT_SCHEMA = HumanResources; 4 GO
代碼2.3:刪除現存用戶增長用不一樣登陸名的數據庫用戶名的代碼
若是你配置你的SQL Server支持SQL Server登陸,有一個SQL Server內建的SQL Server登陸須要留意——sa登陸——在對象瀏覽器裏的【安全性】節點,【登陸名】裏能夠看到。sa或系統管理員,登陸是爲了SQL Server的早期版本的向後兼容性。sa登陸映射到sysadmin服務器角色,任何以sa登陸到SQL Server的任何人有徹底的系統管理員權限,在整個SQL Server實例和全部裏面的數據庫都有不可撤銷的權利。這的確是個強大的登陸。
你不能修改或刪除sa登陸。當你安裝SQL Server的時候,若是你選擇了混合驗證模式,你會提示爲sa用戶輸入密碼。沒有密碼的話,任何人能夠不輸密碼直接以sa登陸,玩弄起「我來管理服務器」。不用說,這是你讓你的用戶最後作的事。若是沒有其餘系統管理員或忘記了它們的Windows密碼,使用sa登陸只是個後門。若是那個發生的話,你須要新的管理員!
毫不要在應用程序裏使用sa登陸來訪問數據庫。若是黑客拿到應用程序的控制權,這樣作的話會給黑客真個數據庫服務器的管理權限。在早期,這是黑入服務器的最簡單方法,是個可怕的實例。相反,爲應用程序設置一個自定義的Windows或SQL Server登陸來使用,給這個登陸來運行程序的絕對最小的必須許可(實現最小權限原則)。
提示:
事實上,你應該考慮使用剛纔看到的登陸屬性對話框的【狀態】頁徹底禁用sa登陸。那樣的話攻擊者不能使用這個全能登陸來控制你的服務器實例,無論你是否設置了強悍的sa密碼。
在SQL Server 2005以前的版本,對於可讓系統更安全,對系統管理員的強制密碼策略,沒有一個簡單的方法。例如,SQL Server米有辦法強制用戶建立最短長度、數字和其它字符混合的強壯密碼。若是有人要用一個字母建立登陸的密碼,你不能配置SQL Server來阻止它。一樣,密碼也沒方法設置它按期過時,例如每三個月。一些人恰好看到了這個主要緣由,不使用SQL Server登陸。
SQL Server的最近版本能夠嵌入Windows Server 2003及後續版本的密碼策略。密碼仍是保存在SQL Server裏,但SQL Server調用了NetValidatePasswordPolicy() Windows API方法,這個是在Windows Server 2003首次引入的。這個API函數應用Windows密碼策略到Server登陸,返回一個值表示密碼是否有效。當用戶建立,設置或重置密碼時,SQL Server調用這個函數。
你能夠經過Windows控制面板管理工具裏的本地密碼策略來定義Windows密碼策略。默認密碼策略部分如插圖2.8所示。這個小程序有獨立的帳號鎖定策略,如插圖2.9所示,當用戶嘗試太多的失敗登陸時生效。默認狀況下,新安裝的Windows鎖定策略是禁用的。
插圖2.8:Windows本地安全策略小程序,顯示默認的密碼策略。
插圖2.9:Windows本地安全策略小程序,顯示默認的帳號鎖定策略。
下表列出默認值的密碼策略和它們如何運做的說明。
類別 策略名 默認值 說明
密碼策略 強制密碼歷史 0個記住的密碼 阻止用處重用舊密碼,例如在2個密碼之間修改
密碼長度最小值 0個字符 使用這個要求密碼長度,讓它們很難破解
密碼必須符合複雜性要求 已禁用 至少6個字母或數字和其它字符,不包含用戶名
密碼過時 密碼最長使用期限 42天 在用戶修改密碼前的天數
密碼最短使用期限 0天 在容許用戶能夠修改密碼前的天數
帳戶鎖定策略 帳戶鎖定時間 不適用 若是鎖定閾值啓用的話則鎖定
帳戶鎖定閾值 0次無效登陸 帳戶鎖定前失敗登陸次數
重置帳戶鎖定計數器 不適用 重置失敗登陸次數;
當鎖定閾值啓用的時候啓用
表2.1:Windows密碼策略設置
當你建立登陸的時候,你能夠啓用或禁用執行密碼策略。【登陸名-新建】對話框在登陸名下,在你建立SQL Server登陸的時候,有個啓用部分,如插圖2.10所示。
插圖2.10:對於新的登陸執行密碼策略
當你使用T-SQL建立登陸的時候,也能夠應用密碼策略。例如,若是你在Windows 2003 Server後後續版本上運行SQL Server並啓用了密碼策略,代碼2.4會運行失敗。
1 USE master; 2 GO 3 CREATE LOGIN SIMPLEPWD WITH PASSWORD = 'SIMPLEPWD'; 4 GO
代碼2.4:嘗試建立違反密碼策略的登陸
這個代碼運行失敗的緣由是密碼不能和用戶名同樣。
當你建立或修改登陸時,你能夠控制策略。代碼2.5關閉了過時檢查和策略。
1 ALTER LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v', 2 CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;
代碼2.5:只對修改登陸來禁止密碼策略的代碼(只對此次登陸)
CHECK_EXPIRATION
選項控制SQL Server檢查密碼的策略裏年齡,CHECK_POLICY
應用到其餘策略。MUST_CHANGE
選項執行用戶下次登陸必須修改密碼。
若是用戶有太屢次數的失敗登陸,超過了帳號鎖定策略的設置數,管理員可使用UNLOCK
來重置,如代碼2.6所示。
1 ALTER LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v' UNLOCK
代碼2.6:因爲太多失敗登陸而鎖定登陸,解鎖的代碼。
當你在Windows Server 2003以前的版本上運行SQL Server,你能夠啓用強制密碼策略。但SQL Server默認使用至少6個字符的密碼,密碼裏不能包含你的用戶名,並且是大小寫字母,數字和其餘字符的混合體。你不能修改這些默認設置。但但願你不要這麼老的版本上運行SQL Server,由於自那之後有了大的安全改進。
在這篇SQL Server安全文章裏,你學習了SQL Server裏的多個驗證選項。Windows集成身份驗證是最安全的,但並非都是可行的,微軟多年來已經讓SQL Server驗證更加安全。可是若是你使用混合驗證模式,不要忘記給sa足夠強悍的密碼,甚至停用它。一樣大多數對象,你均可以使用SSMS裏的圖形界面或T-SQL來建立或修改它們。若是你在當下的Windows版本上運行SQL Server,你能夠將本地安全策略嵌入密碼策略。
感謝關注!
http://www.sqlservercentral.com/articles/Stairway+Series/109975/