SQL Server安全配置全面檢查與優(yōu)化方案
一、說明
1.1 覆蓋操作系統(tǒng)和數(shù)據(jù)庫版本
- SQL Server版本要求:需覆蓋2008 R2及以上版本。所有腳本中的命令都需在不同版本中經(jīng)過實(shí)際測試,并能正常輸出結(jié)果。
- 操作系統(tǒng)版本要求:需覆蓋Linux和Windows。
- 如果在不同版本中有不同的命令,請?jiān)谖臋n中明確標(biāo)注版本和命令差異。
1.2 查詢最小權(quán)限要求
例如創(chuàng)建的shijw用戶,授權(quán)如下:
ALTER SERVER ROLE [diskadmin] ADD MEMBER [shijw]; ALTER SERVER ROLE [processadmin] ADD MEMBER [shijw]; ALTER SERVER ROLE [securityadmin] ADD MEMBER [shijw]; ALTER SERVER ROLE [setupadmin] ADD MEMBER [shijw];
二、SQL語句
2.1 數(shù)據(jù)庫用戶密碼復(fù)雜度認(rèn)證
SELECT name, is_policy_checked FROM sys.sql_logins;
SQL返回結(jié)果:
- 當(dāng)返回值=1時,表示合規(guī)(pass)。
- 當(dāng)返回值不等于1時,表示存在風(fēng)險(xiǎn)(Risk)。
2.2 數(shù)據(jù)庫用戶密碼有效期策略
SELECT name, is_policy_checked FROM sys.sql_logins;
SQL返回結(jié)果:
- 當(dāng)返回值=1時,表示合規(guī)(pass)。
- 當(dāng)返回值不等于1時,表示存在風(fēng)險(xiǎn)(Risk)。
2.3 連接會話限制
SELECT CONVERT(Numeric(18,2), CONVERT(Numeric(18,2), c.value_in_use) / CONVERT(Numeric(18,2), maximum) * 100) AS user_count FROM sys.configurations c WHERE c.name = 'user connections';
SQL返回結(jié)果:
- 當(dāng)返回值<95時,表示合規(guī)(pass)。
- 當(dāng)返回值>95時,表示存在風(fēng)險(xiǎn)(Risk)。
2.4 連接數(shù)據(jù)庫進(jìn)程數(shù)限制
SELECT CONVERT(Decimal(18,0), (SUM(s.current_workers_count) * 1.0 / i.max_workers_count) * 100) AS CPU線程使用率 FROM sys.dm_os_sys_info i, sys.dm_os_schedulers s GROUP BY i.max_workers_count;
SQL返回結(jié)果:
- 當(dāng)返回值<95時,表示合規(guī)(pass)。
- 當(dāng)返回值>95時,表示存在風(fēng)險(xiǎn)(Risk)。
2.5 物理備份
SELECT bs.database_name,
BACKUPTYPE = CASE
WHEN bs.type = 'D' AND bs.is_copy_only = 0 THEN 'Full Database'
WHEN bs.type = 'D' AND bs.is_copy_only = 1 THEN 'Full Copy-Only Database'
WHEN bs.type = 'I' THEN 'Differential database backup'
WHEN bs.type = 'L' THEN 'Transaction Log'
WHEN bs.type = 'F' THEN 'File or filegroup'
WHEN bs.type = 'G' THEN 'Differential file'
WHEN bs.type = 'P' THEN 'Partial'
WHEN bs.type = 'Q' THEN 'Differential partial' END + ' Backup',
CASE bf.device_type
WHEN 2 THEN 'Disk'
WHEN 5 THEN 'Tape'
WHEN 7 THEN 'Virtual device'
WHEN 9 THEN 'Azure Storage'
WHEN 105 THEN 'A permanent backup device'
ELSE 'Other Device' END AS DeviceType,
bs.Backup_Start_Date,
BackupFinishDate = bs.Backup_Finish_Date,
[BackupStatus] = CASE bs.Backup_Start_Date WHEN NULL THEN '備份失敗' ELSE '成功' END,
LatestBackupLocation = bf.physical_device_name
FROM msdb.dbo.backupset bs
LEFT JOIN msdb.dbo.backupmediafamily bf ON bs.[media_set_id] = bf.[media_set_id]
WHERE bs.backup_start_date > DATEADD(MONTH, - 2, sysdatetime())
ORDER BY bs.database_name ASC, bs.Backup_Start_Date DESC;
SQL返回結(jié)果:
- 當(dāng)有返回結(jié)果時,表示合規(guī)(pass)。
- 當(dāng)無返回結(jié)果時,表示存在風(fēng)險(xiǎn)(Risk)。
2.6 網(wǎng)絡(luò)傳輸加密
SELECT DISTINCT (encrypt_option) FROM sys.dm_exec_connections;
SQL返回結(jié)果:
- 當(dāng)返回結(jié)果=true時,表示合規(guī)(pass)。
- 當(dāng)無返回結(jié)果時,表示存在風(fēng)險(xiǎn)(Risk)。
2.7 數(shù)據(jù)庫存儲加密
SELECT D.name AS 'Database Name',
CASE
WHEN E.encryption_state = 3 THEN 'Encrypted'
WHEN E.encryption_state = 2 THEN 'In Progress'
ELSE 'Not Encrypted'
END AS state
FROM sys.dm_database_encryption_keys E
RIGHT JOIN sys.databases D ON D.database_id = E.database_id
LEFT JOIN sys.certificates c ON E.encryptor_thumbprint = c.thumbprint;
SQL返回結(jié)果:
- 當(dāng)返回結(jié)果=Encrypted時,表示合規(guī)(pass)。
- 當(dāng)返回結(jié)果不等于Encrypted時,表示存在風(fēng)險(xiǎn)(Risk)。
2.8 透明加密
SELECT name, is_encrypted FROM sys.databases;
SQL返回結(jié)果:
- 當(dāng)返回結(jié)果=1時,表示合規(guī)(pass)。
- 當(dāng)返回結(jié)果不等于1時,表示存在風(fēng)險(xiǎn)(Risk)。
2.9 連接超時機(jī)制
SELECT COMMENT, value FROM SYS.SYSCONFIGURES WHERE COMMENT LIKE 'remote%';
SQL返回結(jié)果:
- 當(dāng)返回結(jié)果≠0時,表示合規(guī)(pass)。
- 當(dāng)返回結(jié)果=0時,表示存在風(fēng)險(xiǎn)(Risk)。
2.10 數(shù)據(jù)庫版本補(bǔ)丁
SELECT @@VERSION;
SELECT SERVERPROPERTY('ProductVersion');
- SQL返回結(jié)果: 需要根據(jù)實(shí)際輸出填寫。
2.11 弱口令
SELECT name, create_date, is_disabled FROM sys.sql_logins WHERE PWDCOMPARE('', password_hash) = 1;
SELECT name, create_date, is_disabled FROM sys.sql_logins WHERE PWDCOMPARE(name, password_hash) = 1;
- SQL返回結(jié)果: 需要根據(jù)實(shí)際輸出填寫。
2.12 C2審計(jì)
SELECT value FROM sys.sysconfigures WHERE comment = 'c2 audit mode';
SQL返回結(jié)果:
- 當(dāng)返回結(jié)果為1時,表示合規(guī)(pass)。
- 當(dāng)返回結(jié)果為其他值時,表示存在風(fēng)險(xiǎn)(Risk)。
2.13 SQL審核
SELECT status FROM sys.dm_server_audit_status WHERE status = 1;
SQL返回結(jié)果:
- 當(dāng)返回結(jié)果為1時,表示合規(guī)(pass)。
- 當(dāng)返回結(jié)果為其他值時,表示存在風(fēng)險(xiǎn)(Risk)。
2.14 SQL注入
SELECT value FROM sys.sysconfigures WHERE comment = 'Enable or disable command shell';
SQL返回結(jié)果:
- 當(dāng)返回結(jié)果為0時,表示合規(guī)(pass)。
- 當(dāng)返回結(jié)果為其他值時,表示存在風(fēng)險(xiǎn)(Risk)。
三、總結(jié)
這些SQL腳本主要用于檢查SQL Server數(shù)據(jù)庫的安全配置,確保數(shù)據(jù)庫在操作系統(tǒng)、權(quán)限控制、備份、加密以及其他關(guān)鍵領(lǐng)域符合最佳實(shí)踐。根據(jù)執(zhí)行結(jié)果,系統(tǒng)管理員可以針對發(fā)現(xiàn)的問題采取相應(yīng)的補(bǔ)救措施,進(jìn)一步加強(qiáng)數(shù)據(jù)庫的安全性。
以上就是SQL Server安全配置全面檢查與優(yōu)化方案的詳細(xì)內(nèi)容,更多關(guān)于SQL Server安全配置檢查與優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何將sql執(zhí)行的錯誤消息記錄到本地文件中實(shí)現(xiàn)過程
sql語句的錯誤信息都可以在sys.messages表里面找到,下面與大家分享下將sql 執(zhí)行的錯誤消息記錄到本地文件中,不會的朋友可以參考下哈2013-05-05
SQL Server的Windows身份驗(yàn)證和sa登錄都被禁用的完美解決方法
當(dāng)SQL Server的Windows賬戶被誤刪且sa禁用時,會導(dǎo)致登錄失敗,解決方法是通過單用戶模式啟動服務(wù),賦予管理員權(quán)限,使用SQLCMD重置sa密碼,最后重啟服務(wù)恢復(fù)訪問,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2025-09-09
SQL?IFNULL()函數(shù)詳細(xì)解析(最新推薦)
IFNULL()?函數(shù)用于判斷第一個表達(dá)式是否為?NULL,如果為?NULL?則返回第二個參數(shù)的值,如果不為?NULL?則返回第一個參數(shù)的值,這篇文章主要介紹了SQL?IFNULL()函數(shù)詳細(xì)解析,需要的朋友可以參考下2023-01-01
SQL?Server數(shù)據(jù)庫服務(wù)器內(nèi)存問題排查及解決方案
文章詳細(xì)介紹了處理SQL?Server數(shù)據(jù)庫服務(wù)器內(nèi)存爆滿的方案,包括立刻處理(快速釋放、恢復(fù))和永久優(yōu)化方案(穩(wěn)定運(yùn)行),同時,也提供了監(jiān)控預(yù)警的建議,感興趣的朋友跟隨小編一起看看吧2026-03-03
sql?server實(shí)現(xiàn)圖片的存入和讀取的流程詳解
這篇文章主要介紹了sql?server實(shí)現(xiàn)圖片的存入和讀取的詳細(xì)流程,文中通過代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-05-05
SQLServer Execpt和not in 性能區(qū)別
網(wǎng)上有很多 except 和 not in的返回結(jié)果區(qū)別這里就就提了2012-01-01

