SQL總結-最佳做法檢查表
總結:最佳做法檢查表
以下檢查表總結了本白皮書中討論的各種最佳做法。有關詳細信息,請參閱上面的討論。
管理員檢查表
在安裝之前設置環(huán)境物理安全防火墻確保服務器的物理安全。在服務器和Internet之間放置防火墻。總是在外圍防火墻上阻止TCP端口1433和UDP端口1434。如果命名實例在其他端口上偵聽,則還要阻止這些端口。在多層環(huán)境中,使用多個防火墻創(chuàng)建屏蔽子網(wǎng)。隔離服務,降低受到威脅的服務被利用來危害其他服務的風險。絕對不要在域控制器上安裝SQLServer。以單獨的Windows帳戶身份運行單獨的SQLServer服務。在多層環(huán)境中,在單獨的計算機上運行Web邏輯和業(yè)務邏輯。創(chuàng)建Windows帳戶,盡可能只讓其具有運行SQLServer服務所需的最小特權。使用NTFS。對關鍵的數(shù)據(jù)文件使用RAID。服務隔離服務帳戶文件系統(tǒng)安裝最新版本和ServicePack服務帳戶身份驗證模式強密碼總是安裝最新的ServicePack和安全修補程序。使用盡可能具有最低特權的帳戶運行SQLServer服務。使用企業(yè)管理器將服務與Windows帳戶相關聯(lián)。要求使用Windows身份驗證與SQLServer連接。即使在使用Windows身份驗證時,也總是為sa帳戶指派強密碼。對所有SQLServer帳戶都總是使用強密碼。安裝之后的配置選項和設置刪除或保護舊安裝文件在安裝之后刪除或存檔下列文件:sqlstp.log、sqlsp.log和setup.iss。對于默認安裝,這些文件位于:\\ProgramFiles\\MicrosoftSQLServer\\MSSQL\\Install文件夾中;對于命名實例,這些文件位于:\\ProgramFiles\\MicrosoftSQLServer\\MSSQL$\\Install文件夾中。如果當前系統(tǒng)是從SQLServer7.0升級的,請刪除下列文件:%Windir%文件夾中的setup.iss;WindowsTemp文件夾中的sqlsp.log。
為命名實例選擇靜態(tài)端口安裝之后的配置選項和設置(續(xù))設置登錄審核級別啟用安全審核即使在Windows身份驗證模式下也要保護sa帳戶的安全刪除示例數(shù)據(jù)庫
為SQLServer的命名實例分配靜態(tài)端口。將登錄審核級別設置為“失敗”或“全部”。對Sysadmin操作、固定角色成員身份更改、所有與登錄相關的活動以及密碼更改啟用安全審核。在選擇適當?shù)膶徍诉x項之后,應該編寫審核腳本,將它包裝在存儲過程中,并將該存儲過程標記為AutoStart。即使在配置為要求進行Windows身份驗證的服務器上,也要為sa帳戶指派強密碼。從生產(chǎn)服務器中刪除示例數(shù)據(jù)庫。安全操作安全模型備份策略減少功能、減小受攻擊范圍減少管理員強密碼跨數(shù)據(jù)庫所有權鏈接Xp_cmdshell加密角色和組權限分布式查詢學會使用SQLServer安全模型。定期備份所有數(shù)據(jù)并將副本存放在安全的非現(xiàn)場位置。測試災難恢復系統(tǒng)。通過只運行環(huán)境所必需的服務和功能,減小系統(tǒng)受到攻擊的范圍。限制少數(shù)幾個受信任用戶擁有sysadmin固定服務器角色的成員身份。確保對于所有的SQLServer帳戶使用復雜密碼。如果系統(tǒng)不使用跨數(shù)據(jù)庫所有權鏈接,請禁用它。在默認情況下,只有sysadmin角色的成員能夠執(zhí)行xp_cmdshell。不應更改此默認設置。不要將執(zhí)行xp_cmdshell的權限授予sysadmin角色成員以外的用戶。安裝證書以啟用SSL連接。證書應該使用服務器的完全限定的DNS名稱。在SQLServer服務帳戶下使用EFS加密數(shù)據(jù)庫文件。如果應用程序要求加密數(shù)據(jù),請考慮使用諸如Protegrity和ApplicationSecurityInc.之類的供應商的產(chǎn)品。將用戶匯集到SQLServer角色或Windows組中以簡化權限管理。絕對不要向public數(shù)據(jù)庫角色授予權限。在支持分布式查詢的環(huán)境中設置SQLServer時,使用鏈接服務器(而不要使用遠程服務器)。僅將鏈接服務器的訪問權限授予那些需要它的登錄。對于除sysadmin固定服務器角色的成員以外的所有用戶,禁止對除SQLOLEDB以外的所有提供程序進行特殊(adhoc)數(shù)據(jù)訪問。只允許對受信任的提供程序進行特殊數(shù)據(jù)訪問。
來賓帳戶安全操作(續(xù))服務帳戶不要啟用來賓帳戶。如果需要更改與SQLServer服務相關聯(lián)的帳戶,請使用SQLServer企業(yè)管理器。如果更改多個服務,則必須使用企業(yè)管理器將所做的更改分別應用于每個服務。建議的定期管理過程Microsoft基準安全分析器(MBSA)將MBSA添加到每周維護計劃中,并按照計劃中的任何安全建議操作。定期掃描帳戶,查看是否有使用空密碼的帳戶,并刪除使用空密碼的帳戶或為它們指派強密碼。刪除不再使用的帳戶。定期掃描固定服務器和數(shù)據(jù)庫角色,確保只將成員身份授予受信任用戶。驗證已被標記為AutoStart的存儲過程是否安全。確保數(shù)據(jù)庫用戶與服務器級登錄之間的映射正確無誤。定期運行帶有report選項的sp_change_users_login,確保映射按預期方式工作。不允許直接更新目錄。使用sp_dboption枚舉和驗證啟用了跨數(shù)據(jù)庫所有權鏈接的數(shù)據(jù)庫。掃描登錄枚舉固定角色成員成份啟動過程登錄到用戶的映射直接更新目錄跨數(shù)據(jù)庫所有權鏈接修補實例的最佳做法實例檢測和枚舉保留您所負責的SQLServer的所有版本和語言清單。在清單中包括MSDE實例。使用SQLScan和SQLCheck(可從Microsoft網(wǎng)站獲。,掃描域中的SQLServer實例。訂閱Microsoft安全公告。維護與生產(chǎn)系統(tǒng)的配置相匹配并且可用于測試新修補程序的測試系統(tǒng)。在將修補程序應用于生產(chǎn)系統(tǒng)之前,認真測試修補程序。考慮修補不需要太多測試的開發(fā)系統(tǒng)。公告修補應用程序開發(fā)人員檢查表
除上面的所有項目外,開發(fā)人員應將下列內容視為最佳做法。
常規(guī)有效地使用所有權鏈接
在單個數(shù)據(jù)庫中使用所有權鏈接來簡化權限管理。
使用角色來簡化權限管理和所有權打開加密功能(SSL或IPSEC)不將SQLServer錯誤傳播回到用戶防止受到SQL插入攻擊盡可能避免使用跨數(shù)據(jù)庫所有權鏈接。如果必須使用跨數(shù)據(jù)庫所有權鏈接,請確保這兩個數(shù)據(jù)庫總是部署為單個管理單元。向角色指派權限,而不要直接向用戶指派權限。如果希望在刪除擁有對象的用戶時不必更改應用程序,則可以讓角色擁有對象,而不是讓用戶直接擁有對象。對服務器啟用加密連接,并考慮只允許建立加密連接。如果允許使用SQLServer身份驗證,則強烈建議您使用IPSec加密網(wǎng)絡層或者使用SSL加密會話。您的應用程序不應該將SQLServer錯誤返回給最終用戶,而是將它們記錄到日志中或者將它們傳輸給系統(tǒng)管理員。通過先驗證所有的用戶輸入,然后將其傳輸?shù)椒⻊掌鳎乐故艿絊QL插入攻擊。只允許具有最小特權的帳戶將用戶輸入的內容發(fā)送到服務器,從而限制可能受損的范圍。使用必需的最小特權運行SQLServer本身。多層選項同一個域/受信任域(完整的Windows身如果應用程序服務器和數(shù)據(jù)庫服務器位于同一個域中或者位于受信份驗證)任域中,則應使用Windows身份驗證,并配置“完全提供”功能(所有客戶端上下文都與SQLServer建立通道連接)。這樣,可以審核訪問SQLServer的所有用戶,允許執(zhí)行Windows安全策略,并且無需將憑據(jù)存儲在中間層。在該方案中,客戶端連接到應用程序服務器,應用程序服務器從而模擬客戶端并連接到SQLServer。應用程序服務器上的每個用戶都必須在數(shù)據(jù)庫服務器上有一個有效的Windows登錄,且必須啟用委派功能。該方案中進行交互的所有系統(tǒng)(包括域控制器)都必須運行Windows201*或更高版本。用來運行應用程序的帳戶必須能夠委派其他帳戶(即,必須針對此帳戶打開ActiveDirectory用戶帳戶選項“帳戶可委派其他帳戶”)?蛻舳藥舯仨毮軌虮晃桑ù_保取消選中ActiveDirectory用戶帳戶選項“敏感帳戶,不能被委派”)。應用程序服務必須有一個有效的服務主體名稱(SPN)。注意如果安全計劃要求最小化用戶對數(shù)據(jù)庫服務器的訪問權限或者企業(yè)策略禁止委派,建議不要在跨數(shù)據(jù)庫或Internet級別的安裝中使用“完全提供”功能。
多層選項(續(xù))混合方案(部分Windows身份驗證)不同的非信任域或沒有域(不進行Windows身份驗證)如果在面向Internet的層中,并非每個用戶都有一個單獨的Windows域帳戶,則建議將身份驗證分成幾個階段。在驗證用戶身份的外層,如果不加密整個會話,至少應該使用SSL加密憑據(jù)。應該使用Windows身份驗證連接到數(shù)據(jù)庫服務器,并在特權很小、只具有執(zhí)行數(shù)據(jù)庫服務器功能所必需的權限的單獨安全上下文中轉發(fā)事務信息。這樣,可以將中間層有效地作為服務器和Internet之間的附加防御層。注意建議不要在中間層和SQLServer之間使用SQLServer身份驗證,因為使用SQLServer身份驗證需要存儲憑據(jù)。如果必須在中間層和SQLServer之間使用SQLServer身份驗證,那么應該創(chuàng)建幾個帳戶,并讓它們分別具有與不同種類的用戶對應的不同級別的特權。這要求您向中間層中添加邏輯,以便按照所需的特權級別分配連接。如果不能在各層之間使用Windows身份驗證,則應要求對登錄序列進行SSL加密。最好加密整個會話。還應使用DPAPI加密必須存儲的憑據(jù)。應將加密憑據(jù)存儲在用ACL保護的注冊表項中。軟件供應商檢查表
除上面的所有項目外,下列安全開發(fā)做法也已被證明對于提高各種開發(fā)環(huán)境中代碼的質量及安全性非常有用。
安全過程了解各種安全問題確保開發(fā)小組的成員了解主要的安全問題:當前存在的威脅、安全趨勢、更改安全環(huán)境以及受到攻擊的情形。要求對所有開發(fā)人員和測試人員進行相關的安全培訓。增強對跨站點腳本、緩沖區(qū)溢出、SQL插入和危險的API等問題的認識。確定對產(chǎn)品構成威脅的各種具體類型,例如拒絕服務、特權升級、欺騙、篡改數(shù)據(jù)、信息泄漏和丟棄。針對每個組件逐一分析產(chǎn)品受到的安全威脅;诋a(chǎn)品構建安全威脅檢查表。在產(chǎn)品開發(fā)周期的每個階段(從設計到測試)增加安全審核步驟。
安全過程(續(xù))安裝MSDE如果將MSDE與應用程序一起分發(fā),則應遵守下列附加準則:使用“Windows安全模式”作為默認設置安裝MSDE。絕對不要使用空的sa密碼。在向客戶分發(fā)MSDE時,應使用Microsoft提供的安裝程序,而不要使用合并模塊。在安裝將只作為本地數(shù)據(jù)存儲運行的MSDE實例時,應該禁用服務器網(wǎng)絡庫。如果產(chǎn)品中包括MSDE,則應讓您的客戶知道這一點。他們將來可能需要安裝或接受MSDE特定的軟件更新程序。MSDE在默認情況下安裝SQLServer代理,但是將服務啟動類型保持為“手動”。如果應用程序不使用SQLServer代理,則應將此設置更改為“禁用”。在產(chǎn)品文檔中包括安全性最佳做法信息。
擴展閱讀:SQL的一些重要操作方法總結
SQL的一些重要操作方法總結
一、對表中數(shù)據(jù)進行更新的情況說明
㈠、用一個表中的數(shù)據(jù)更新另一個表★實現(xiàn)方法:
先打開原始數(shù)據(jù)表;然后用循環(huán)的方式查找原始數(shù)據(jù)表,把相應的數(shù)據(jù)用UPDATE命令來更新目標表。
USEDOWHILE!EOF()
UPDATESETWHERESKIPENDDO
循環(huán)也可以用SCAN語句來實現(xiàn)。USESCAN
UPDATESETWHEREENDSCAN
㈡、從一個表中檢索出一些數(shù)據(jù)再用來更新另一個表所謂“檢索”是指從一個表中統(tǒng)計或計算出一些數(shù)據(jù)。★實現(xiàn)方法:
先用SELECT語句進行檢索,把檢索到的結果暫存到臨時表中;然后用循環(huán)的方式查找臨時表,用UPDATE語句來更新目標表。
SELECTFROMINTOCURSORDOWHILE!EOF()
UPDATESETWHERESKIPENDDO
當然也可以和前一種情況一下,循環(huán)用SCAN語句。㈢、在同一個表中更新
直接使用UPDATE語句即可(可一次更新多條記錄),不需要用循環(huán)。
二、在表中插入記錄的情況說明
㈠、插入記錄內容不是來自別的數(shù)據(jù)表直接使用INSERTINTO命令即可。㈡、需要從另一個數(shù)據(jù)表(源表)提取數(shù)據(jù)
這時不能直接用INSERTINTO命令,需要分兩步進行!飳崿F(xiàn)方法:
用SELECT語句從源表中提取數(shù)據(jù),并存入到一個數(shù)組中,然后使用INSERTINTO命令的格式二插入到目標表中。
SELECTFROMINTOARRAYINSERTINTOFROMARRAY注:如果用在SELECT語句后直接加上子句INTOTABLE的方式存入到目標表,會覆蓋目標表上的原有數(shù)據(jù)。三、SQL語句運行時出現(xiàn)錯誤解決方法1、分步調試,先調試基本部分是否正確。
2、檢查語句中出現(xiàn)的符號是否是半角(英文)符號。關掉中文輸入法重新鍵入相關的符號。
3、是否遺漏了相關的子句,單詞是否拼錯。檢查格式是否符合SQL語句的規(guī)定。
4、多表查詢時檢查表的順序(要確立主表,輔表,位置)5、檢查是否要分組。
6、如果分組了,有沒有分組條件,是否把分組條件放到了WHERE子句。
7、檢查WHERE條件中的條件是否寫錯,出現(xiàn)的字段名是否出現(xiàn)在表中。
8、檢查“:”號,是否多了或者少了。
9、檢查引號,只有在表示字符常量是才加引號,其它的一律不能加;另外引號不能是中文引號。
友情提示:本文中關于《SQL總結-最佳做法檢查表》給出的范例僅供您參考拓展思維使用,SQL總結-最佳做法檢查表:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。