在保密你的服務(wù)器和數(shù)據(jù),防備當(dāng)前復(fù)雜的攻擊,SQL Server有你需要的一切。但在你能有效使用這些安全功能前,你需要理解你面對(duì)的威脅和一些基本的安全概念。這篇文章提供了基礎(chǔ),因此你可以對(duì)SQL Server里的安全功能充分利用,不用在面對(duì)特定威脅,不能保護(hù)你數(shù)據(jù)的功能上浪費(fèi)時(shí)間。
身份驗(yàn)證是驗(yàn)證主體(需要訪問SQL Server數(shù)據(jù)庫的用戶或進(jìn)程,是聲稱是的人或物)的過程。主體需要唯一的身份,這樣的話SQL Server可以決定主體有哪個(gè)許可。在提供安全訪問數(shù)據(jù)庫對(duì)象中,正確的身份驗(yàn)證是必須的第一步。
SQL Server支持身份驗(yàn)證的兩個(gè)途徑:Windows集成身份驗(yàn)證和SQL Server身份驗(yàn)證。你使用的途徑取決于網(wǎng)絡(luò)環(huán)境,應(yīng)用程序訪問數(shù)據(jù)庫的類型和這些應(yīng)用程序的用戶類型。
- Windows身份驗(yàn)證:這個(gè)身份驗(yàn)證方式依賴于Windows來擔(dān)當(dāng)重任——當(dāng)用戶登錄到Windows是驗(yàn)證身份。訪問SQL Server對(duì)象的許可然后會(huì)分配給Windows登錄。只有當(dāng)SQL Server運(yùn)行在支持Windows NT或Kerberos身份驗(yàn)證的Windows版本上才可以使用,這個(gè)自Windows 2000起已經(jīng)幾乎是標(biāo)準(zhǔn)。
- SQL Server身份驗(yàn)證:SQL Server可以完全自主完成身份驗(yàn)證。在這個(gè)情況下,你可以創(chuàng)建唯一的用戶名——在SQL Server調(diào)用登錄——和密碼。連接到SQL Server的用戶或應(yīng)用程序提供這些憑證來訪問。許可然后直接分配到那個(gè)登錄或通過角色里的資格。
在SQL Server里在這2個(gè)類型之間配置身份驗(yàn)證不是一個(gè)非此即彼的選擇(可以混合使用)。你可以在任何兩個(gè)方式里配置身份驗(yàn)證:
- 混合身份驗(yàn)證模式:服務(wù)器同時(shí)支持SQL Server和Windows身份驗(yàn)證。
- Windows身份驗(yàn)證模式:服務(wù)器只支持Windows身份驗(yàn)證。
只要可能的話,微軟強(qiáng)烈推薦使用Windows身份驗(yàn)證。Windows擁有可靠的驗(yàn)證選項(xiàng),包括密碼策略,但正真正的應(yīng)用程序里,Windows身份驗(yàn)證并不總是可行的。SQL Server身份驗(yàn)證可以嵌入Windows驗(yàn)證的一些功能,但它不太安全。
Windows身份驗(yàn)證
如果你配置你的SQL Server在Windows身份驗(yàn)證里操作,SQL Server認(rèn)為與Windows服務(wù)器有信任關(guān)系。當(dāng)它們登錄到Windows里時(shí),SQL Server認(rèn)為Windows已經(jīng)驗(yàn)證用戶。然后SQL Server檢查用戶賬號(hào),任何Windows組和任何SQL Server角色,看用戶是否是其成員之一來決定用戶是否允許與各個(gè)SQL Server對(duì)象打交道。
與SQL Server身份驗(yàn)證比,Windows身份驗(yàn)證有很多優(yōu)勢(shì),包括:
用戶一次登錄即可,因此她不需要單獨(dú)登錄到SQL Server審計(jì)功能簡(jiǎn)單化登錄管理密碼策略(在Windows Server 2003及后續(xù)版本)
Winows身份驗(yàn)證的另一個(gè)大優(yōu)勢(shì)是你對(duì)Windows用戶和組的任何修改會(huì)自動(dòng)在SQL Server里生效,因此你不需要單獨(dú)管理它們。然后,如果你對(duì)Windows用戶做出的修改,它們此時(shí)剛好連接到SQL Server,這些修改不會(huì)生效,直到下次用戶連接到SQL Server才會(huì)生效。
配置SQL Server安全設(shè)置
當(dāng)你安裝SQL Server時(shí),你可以選擇SQL實(shí)例允許的驗(yàn)證模式。安裝完成后你可以在SSMS里的服務(wù)器屬性對(duì)話框里修改這個(gè)設(shè)置。這些設(shè)置適用于SQL Server實(shí)例里的所有數(shù)據(jù)庫和其它對(duì)象。因此如果你需要為任何數(shù)據(jù)庫使用SQL Server身份驗(yàn)證,你需要為服務(wù)器設(shè)置為混合模式。
插圖2.1顯示了在SSMS里選擇了【安全性】頁的【服務(wù)器屬性】對(duì)話框。為了打開這個(gè)對(duì)話框,在對(duì)象瀏覽器里右擊服務(wù)器實(shí)例名,從彈出的菜單里選擇【屬性】,然后點(diǎn)擊【安全性】頁。通過點(diǎn)擊對(duì)應(yīng)的單選框和點(diǎn)擊【確定】提交修改,就可以修改驗(yàn)證模式。
![](/d/20211017/db4aa4ded60475f3f00f258421e9f2a6.gif)
插圖2.1:為SQL Server實(shí)例配置驗(yàn)證模式
添加一個(gè)Windows登錄
使用Windows身份驗(yàn)證,你的用戶在能訪問SQL Server前需要驗(yàn)證Windows登錄賬號(hào)。然后你可以授予一個(gè)Windows組連接到SQL Server,或者你可以授予許可給單獨(dú)的Windows用戶,如果你不想授予集體許可。
使用SSMS管理安全的一個(gè)好處是你可以同時(shí)配置登錄和數(shù)據(jù)庫訪問。啟用Windows登錄到訪問SQL Server和AdventureWorks2012數(shù)據(jù)庫。使用下列步驟,并假定本地機(jī)器已經(jīng)定義了woodytu用戶。
1.打開SSMS,確保對(duì)象瀏覽器窗體可見,并且你已經(jīng)連接到SQL Server實(shí)例
2.展開服務(wù)器對(duì)象的樹狀視圖,然后展開【安全性】節(jié)點(diǎn)。你會(huì)看到如插圖2.2所示的多個(gè)子節(jié)點(diǎn)。
![](/d/20211017/f3bf60d27b99770453f8da601362d547.gif)
插圖2.2:服務(wù)器對(duì)象瀏覽器的安全性部分,你定義的登錄的地方
3.右擊【登錄名】節(jié)點(diǎn),從彈出的菜單里選擇【新建登錄名】來打開【登錄名】——新的對(duì)話框
4.確?!網(wǎng)indows身份驗(yàn)證】單選框已經(jīng)選擇
5.你可以用任何2種方式選擇Windows登錄。第一種方式是直接輸入域名或機(jī)器名,然后一個(gè)\和所使用的Windows登錄名。第二個(gè)方式,通常更簡(jiǎn)單的方式點(diǎn)擊【搜索】按鈕來打開【選擇用戶或組】對(duì)話框。輸入用戶名,點(diǎn)擊【檢查名稱】來查找具體的名稱。如果找到用戶,完整的名字在對(duì)話框里出現(xiàn),如插圖2.3里所示。點(diǎn)擊【確定】選擇那個(gè)用戶。
![](/d/20211017/f759bffd6d32864bf88496ddf0eac1e2.gif)
插圖2.3:找到一個(gè)Window登錄來添加到SQL Server
6.回到【登錄名-新建】對(duì)話框,設(shè)置AdventureWorks2012數(shù)據(jù)庫作為登錄的默認(rèn)數(shù)據(jù)庫。當(dāng)用戶連接到服務(wù)器且不指定數(shù)據(jù)庫時(shí),這是用戶使用的數(shù)據(jù)庫。這不限制用戶只訪問那個(gè)數(shù)據(jù)庫。插圖2.4展示對(duì)于在WIN10的機(jī)器上Windows的登錄用戶woodytu,設(shè)置默認(rèn)數(shù)據(jù)庫為示例數(shù)據(jù)庫AdventureWorks2012的登錄配置。
![](/d/20211017/4ca9316bbb0464d56d87b8958fac665a.gif)
插圖2.4:【登錄名—新建】對(duì)話框啟用Windows登錄到訪問SQL Server實(shí)例。
提示:
絕不保持默認(rèn)數(shù)據(jù)庫為master數(shù)據(jù)庫。這個(gè)是慘痛的教訓(xùn):連接到服務(wù)器,太容易忘記修改數(shù)據(jù)庫了。到時(shí)候如果你運(yùn)行腳本在master數(shù)據(jù)庫上創(chuàng)建上百個(gè)數(shù)據(jù)庫對(duì)象,你會(huì)花大量的精力來人為刪除這些對(duì)象,清理master數(shù)據(jù)庫。
7.接下來,給用戶訪問一個(gè)數(shù)據(jù)庫。從對(duì)話框的左邊清單里選擇【用戶映射】頁。通過選擇數(shù)據(jù)庫名旁的選擇框授予用戶訪問AdventureWorks2012數(shù)據(jù)庫。SQL Server自動(dòng)映射用戶用同樣的用戶名到數(shù)據(jù)庫里的用戶,如你在表里的第3列所見,如果你想要的話,可以修改用戶名。分配Sales作為用戶在數(shù)據(jù)庫里默認(rèn)的架構(gòu),可以在【默認(rèn)架構(gòu)】列里輸入,或者點(diǎn)擊【...】按鈕從列表里選擇。對(duì)話框應(yīng)該如插圖2.5所示。
![](/d/20211017/92bbc56d8f0d9877a2bdf91d2f0c6f8d.gif)
插圖2.5:授予Windows登錄訪問AdventureWorks2012數(shù)據(jù)庫
提示:
為登錄設(shè)置默認(rèn)數(shù)據(jù)庫和授予訪問到數(shù)據(jù)庫之間是有區(qū)別的。當(dāng)用戶登錄沒有指定數(shù)據(jù)庫時(shí),默認(rèn)數(shù)據(jù)庫指的是SQL Server嘗試修改上下文到那個(gè)數(shù)據(jù)庫。但這不授予在數(shù)據(jù)庫里做任何事的任何許可,或者甚至允許訪問到數(shù)據(jù)庫。這就是說分配用戶完全不能訪問的數(shù)據(jù)庫是可能的。一旦數(shù)據(jù)庫被訪問了,為了讓用戶可以進(jìn)行一些操作,你需要授權(quán)用戶許可。
8.默認(rèn)情況下,新的Windows登錄可以訪問到服務(wù)器。但是如果你想禁止登錄訪問服務(wù)器,從【登錄名—新建】的左邊列表選擇【狀態(tài)】,勾選【拒絕】單選框。你也可以通過選擇【禁止】按鈕臨時(shí)禁用登錄。插圖2.6顯示了這些選項(xiàng)。
![](/d/20211017/918399eee6d45fd1687b9c5ca79c5738.gif)
插圖2.6:授予和拒絕連接到數(shù)據(jù)庫和臨時(shí)禁用登錄賬號(hào)選項(xiàng)點(diǎn)擊【確定】創(chuàng)建用戶。
你也可以在同樣的方式里添加Windows組到SQL Server,組的任何成員也可以訪問數(shù)據(jù)庫服務(wù)器,包括你給組的數(shù)據(jù)庫里的任何對(duì)象 。
SQL Server身份驗(yàn)證
當(dāng)你使用SQL Server登錄作為驗(yàn)證時(shí),客戶端應(yīng)用程序需要提供有效的用戶名和密碼來連接到數(shù)據(jù)庫。這些SQL Server登錄在SQL Server里保存,與Windows無關(guān)。當(dāng)在登錄時(shí),如果沒有匹配的用戶名和密碼,SQL Server拋出錯(cuò)誤,用戶不能訪問數(shù)據(jù)庫。
盡管Windows身份驗(yàn)證更加安全,在一些情況或許你只能選擇SQL Server登錄來代替。對(duì)于簡(jiǎn)單沒有廣泛安全需求的應(yīng)用程序,SQL Server身份驗(yàn)證更容易管理,它允許你避免Windows安全的復(fù)雜。而且如果客戶端運(yùn)行在更老版本的Windows(比Windows 2000還老)或非Windows的操作系統(tǒng),你必須使用SQL Server登錄。
創(chuàng)建SQL Server登錄,使用和Windows登錄同樣的【登錄名-新建】對(duì)話框。但不是選擇Windows登錄,輸入沒有域名或機(jī)器名的用戶名,并提供密碼。例如,插圖2.7顯示了如何創(chuàng)建一個(gè)新的SQL Server登錄user,把AdventureWorks2012作為他的默認(rèn)數(shù)據(jù)庫。
![](/d/20211017/6d0331b8bf3c279f25cc87b77813c235.gif)
插圖2.7:創(chuàng)建SQL Server登錄
對(duì)于用戶映射和狀態(tài)的所有其它選項(xiàng)的SQL Server登錄和Windows登錄是一樣的。
通過T-SQL的SQL Server登錄
你也可以用T-SQL代碼來進(jìn)行同樣的操作。在代碼2.1里的Create Login代碼創(chuàng)建一個(gè)有強(qiáng)勁密碼的SQL Server登錄Tudou。
CREATE LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v';
GO
代碼2.1:使用T-SQL創(chuàng)建新的SQL Server登錄的代碼
然后,授予Tudou訪問AdventureWorks2012數(shù)據(jù)庫,使用CREATE USER語句并分配默認(rèn)的架構(gòu),如代碼2.2所示。
USE AdventureWorks2012;
GO
CREATE USER Tudou FOR LOGIN Tudou
WITH DEFAULT_SCHEMA = HumanResources;
GO
代碼2.2:用SQL Server登錄關(guān)聯(lián)創(chuàng)建數(shù)據(jù)庫用戶的代碼
提示:
如第一篇,如果你想在本地SQL Server實(shí)例運(yùn)行它們的話,很可能你需要對(duì)代碼做些改動(dòng)。在代碼2.2里假定你已經(jīng)安裝了AdventureWorks2012數(shù)據(jù)庫。
像Windows登錄,你可以映射服務(wù)器登錄Tudou到數(shù)據(jù)庫里其它一些名稱。代碼2.3里在AdventureWorks2012數(shù)據(jù)庫里映射TudouZ到Tudou用戶。
DROP USER Tudou;
GO
CREATE USER TudouZ FOR LOGIN Tudou WITH DEFAULT_SCHEMA = HumanResources;
GO
代碼2.3:刪除現(xiàn)存用戶增加用不同登錄名的數(shù)據(jù)庫用戶名的代碼
謹(jǐn)防sa登錄
如果你配置你的SQL Server支持SQL Server登錄,有一個(gè)SQL Server內(nèi)建的SQL Server登錄需要留意——sa登錄——在對(duì)象瀏覽器里的【安全性】節(jié)點(diǎn),【登錄名】里可以看到。sa或系統(tǒng)管理員,登錄是為了SQL Server的早期版本的向后兼容性。sa登錄映射到sysadmin服務(wù)器角色,任何以sa登錄到SQL Server的任何人有完全的系統(tǒng)管理員權(quán)限,在整個(gè)SQL Server實(shí)例和所有里面的數(shù)據(jù)庫都有不可撤銷的權(quán)利。這的確是個(gè)強(qiáng)大的登錄。
你不能修改或刪除sa登錄。當(dāng)你安裝SQL Server的時(shí)候,如果你選擇了混合驗(yàn)證模式,你會(huì)提示為sa用戶輸入密碼。沒有密碼的話,任何人可以不輸密碼直接以sa登錄,玩弄起“我來管理服務(wù)器”。不用說,這是你讓你的用戶最后做的事。如果沒有其他系統(tǒng)管理員或忘記了它們的Windows密碼,使用sa登錄只是個(gè)后門。如果那個(gè)發(fā)生的話,你需要新的管理員!
絕不要在應(yīng)用程序里使用sa登錄來訪問數(shù)據(jù)庫。如果黑客拿到應(yīng)用程序的控制權(quán),這樣做的話會(huì)給黑客真?zhèn)€數(shù)據(jù)庫服務(wù)器的管理權(quán)限。在早期,這是黑入服務(wù)器的最簡(jiǎn)單方法,是個(gè)可怕的實(shí)例。相反,為應(yīng)用程序設(shè)置一個(gè)自定義的Windows或SQL Server登錄來使用,給這個(gè)登錄來運(yùn)行程序的絕對(duì)最小的必須許可(實(shí)現(xiàn)最小權(quán)限原則)。
提示:
事實(shí)上,你應(yīng)該考慮使用剛才看到的登錄屬性對(duì)話框的【狀態(tài)】頁完全禁用sa登錄。那樣的話攻擊者不能使用這個(gè)全能登錄來控制你的服務(wù)器實(shí)例,不管你是否設(shè)置了強(qiáng)悍的sa密碼。
密碼策略與執(zhí)行
在SQL Server 2005之前的版本,對(duì)于可以讓系統(tǒng)更安全,對(duì)系統(tǒng)管理員的強(qiáng)制密碼策略,沒有一個(gè)簡(jiǎn)單的方法。例如,SQL Server米有辦法強(qiáng)制用戶創(chuàng)建最短長度、數(shù)字和其它字符混合的強(qiáng)壯密碼。如果有人要用一個(gè)字母創(chuàng)建登錄的密碼,你不能配置SQL Server來阻止它。同樣,密碼也沒方法設(shè)置它定期過期,例如每三個(gè)月。一些人剛好看到了這個(gè)主要原因,不使用SQL Server登錄。
SQL Server的最近版本可以嵌入Windows Server 2003及后續(xù)版本的密碼策略。密碼還是保存在SQL Server里,但SQL Server調(diào)用了NetValidatePasswordPolicy() Windows API方法,這個(gè)是在Windows Server 2003首次引入的。這個(gè)API函數(shù)應(yīng)用Windows密碼策略到Server登錄,返回一個(gè)值表示密碼是否有效。當(dāng)用戶創(chuàng)建,設(shè)置或重置密碼時(shí),SQL Server調(diào)用這個(gè)函數(shù)。
你可以通過Windows控制面板管理工具里的本地密碼策略來定義Windows密碼策略。默認(rèn)密碼策略部分如插圖2.8所示。這個(gè)小程序有獨(dú)立的賬號(hào)鎖定策略,如插圖2.9所示,當(dāng)用戶嘗試太多的失敗登錄時(shí)生效。默認(rèn)情況下,新安裝的Windows鎖定策略是禁用的。
![](/d/20211017/e56323c296a40815a3b09145a1ffcbf5.gif)
插圖2.8:Windows本地安全策略小程序,顯示默認(rèn)的密碼策略。
![](/d/20211017/0e030024098c545758f4aac14b8b2256.gif)
插圖2.9:Windows本地安全策略小程序,顯示默認(rèn)的賬號(hào)鎖定策略。
下表列出默認(rèn)值的密碼策略和它們?nèi)绾芜\(yùn)作的說明。
類別 策略名 默認(rèn)值 說明
密碼策略 強(qiáng)制密碼歷史 0個(gè)記住的密碼 阻止用處重用舊密碼,例如在2個(gè)密碼之間修改
密碼長度最小值 0個(gè)字符 使用這個(gè)要求密碼長度,讓它們很難破解
密碼必須符合復(fù)雜性要求 已禁用 至少6個(gè)字母或數(shù)字和其它字符,不包含用戶名
密碼過期 密碼最長使用期限 42天 在用戶修改密碼前的天數(shù)
密碼最短使用期限 0天 在允許用戶可以修改密碼前的天數(shù)
賬戶鎖定策略 賬戶鎖定時(shí)間 不適用 如果鎖定閾值啟用的話則鎖定
賬戶鎖定閾值 0次無效登錄 賬戶鎖定前失敗登錄次數(shù)
重置賬戶鎖定計(jì)數(shù)器 不適用 重置失敗登錄次數(shù);
當(dāng)鎖定閾值啟用的時(shí)候啟用
表2.1:Windows密碼策略設(shè)置
當(dāng)你創(chuàng)建登錄的時(shí)候,你可以啟用或禁用執(zhí)行密碼策略?!镜卿浢?新建】對(duì)話框在登錄名下,在你創(chuàng)建SQL Server登錄的時(shí)候,有個(gè)啟用部分,如插圖2.10所示。
![](/d/20211017/d327b34a041f8ff3637954bc165af2d8.gif)
插圖2.10:對(duì)于新的登錄執(zhí)行密碼策略
當(dāng)你使用T-SQL創(chuàng)建登錄的時(shí)候,也可以應(yīng)用密碼策略。例如,如果你在Windows 2003 Server后后續(xù)版本上運(yùn)行SQL Server并啟用了密碼策略,代碼2.4會(huì)運(yùn)行失敗。
USE master;
GO
CREATE LOGIN SIMPLEPWD WITH PASSWORD = 'SIMPLEPWD';
GO
代碼2.4:嘗試創(chuàng)建違反密碼策略的登錄
這個(gè)代碼運(yùn)行失敗的原因是密碼不能和用戶名一樣。
當(dāng)你創(chuàng)建或修改登錄時(shí),你可以控制策略。代碼2.5關(guān)閉了過期檢查和策略。
ALTER LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v',
CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF;
代碼2.5:只對(duì)修改登錄來禁止密碼策略的代碼(只對(duì)這次登錄)
CHECK_EXPIRATION
選項(xiàng)控制SQL Server檢查密碼的策略里年齡,CHECK_POLICY
應(yīng)用到其他策略。MUST_CHANGE
選項(xiàng)執(zhí)行用戶下次登錄必須修改密碼。
如果用戶有太多次數(shù)的失敗登錄,超過了賬號(hào)鎖定策略的設(shè)置數(shù),管理員可以使用UNLOCK
來重置,如代碼2.6所示。
復(fù)制代碼 代碼如下:
ALTER LOGIN Tudou WITH PASSWORD = 'yBqyZIPT8}b]b[{5al0v' UNLOCK
代碼2.6:由于太多失敗登錄而鎖定登錄,解鎖的代碼。
當(dāng)你在Windows Server 2003之前的版本上運(yùn)行SQL Server,你可以啟用強(qiáng)制密碼策略。但SQL Server默認(rèn)使用至少6個(gè)字符的密碼,密碼里不能包含你的用戶名,而且是大小寫字母,數(shù)字和其他字符的混合體。你不能修改這些默認(rèn)設(shè)置。但希望你不要這么老的版本上運(yùn)行SQL Server,因?yàn)樽阅且院笥辛舜蟮陌踩倪M(jìn)。
小結(jié)
在這篇SQL Server安全文章里,你學(xué)習(xí)了SQL Server里的多個(gè)驗(yàn)證選項(xiàng)。Windows集成身份驗(yàn)證是最安全的,但并不是都是可行的,微軟多年來已經(jīng)讓SQL Server驗(yàn)證更加安全。但是如果你使用混合驗(yàn)證模式,不要忘記給sa足夠強(qiáng)悍的密碼,甚至停用它。同樣大多數(shù)對(duì)象,你都可以使用SSMS里的圖形界面或T-SQL來創(chuàng)建或修改它們。如果你在當(dāng)下的Windows版本上運(yùn)行SQL Server,你可以將本地安全策略嵌入密碼策略。
感謝關(guān)注!
原文鏈接:
http://www.sqlservercentral.com/articles/Stairway+Series/109975/
您可能感興趣的文章:- sqlserver 無法驗(yàn)證產(chǎn)品密匙的完美解決方案[測(cè)試通過]
- win2003安裝sqlserver 2000提示無法驗(yàn)證產(chǎn)品密鑰的解決方法
- SQL Server 2012 安裝圖解教程(附sql2012下載地址)
- Microsoft SQL Server 2012 數(shù)據(jù)庫安裝圖解教程
- sqlserver服務(wù)器驗(yàn)證改為混合驗(yàn)證模式步驟
- sql server2012附加數(shù)據(jù)庫問題解決方法
- php使用sql server驗(yàn)證連接數(shù)據(jù)庫的方法
- 圖文詳解Windows Server2012 R2中安裝SQL Server2008