SQL Server安全配置全面检查与优化方案实用指南
平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“SQL Server安全配置全面检查与优化方案”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
目录
- 一、说明
- 1.1 覆盖操作系统和数据库版本
- 1.2 查询最小权限要求
- 二、SQL语句
- 2.1 数据库用户密码复杂度认证
- 2.2 数据库用户密码有效期策略
- 2.3 连接会话限制
- 2.4 连接数据库进程数限制
- 2.5 物理备份
- 2.6 网络传输加密
- 2.7 数据库存储加密
- 2.8 透明加密
- 2.9 连接超时机制
- 2.10 数据库版本补丁
- 2.11 弱口令
- 2.12 C2审计
- 2.13 SQL审核
- 2.14 SQL注入
- 三、总结
一、说明
1.1 覆盖操作系统和数据库版本
- 落到代码里,SQL Server版本要求:需覆盖2008 R2及以上版本。所有脚本中的命令都需在不同版本中经过实际测试,同时能正常输出结果。
- 操作系统版本要求:需覆盖Linux和Windows。
- 若在不同版本中有不同的命令,请在文档中明确标注版本和命令差异。
1.2 查询最小权限要求
比如新建的shijw用户,授权如下所示:
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 数据库用户密码复杂度认证
SELECT name, is_policy_checked FROM sys.sql_logins;
SQL得到结果:
- 得到值=1时,表示合规(pass)。
- 得到值不等于1时,表示存在风险(Risk)。
2.2 数据库用户密码有效期策略
SELECT name, is_policy_checked FROM sys.sql_logins;
SQL得到结果:
- 得到值=1时,表示合规(pass)。
- 得到值不等于1时,表示存在风险(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得到结果:
- 得到值<95时,表示合规(pass)。
- 得到值>95时,表示存在风险(Risk)。
2.4 连接数据库进程数限制
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得到结果:
- 得到值<95时,表示合规(pass)。
- 得到值>95时,表示存在风险(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得到结果:
- 有得到结果时,表示合规(pass)。
- 无得到结果时,表示存在风险(Risk)。
2.6 网络传输加密
SELECT DISTINCT (encrypt_option) FROM sys.dm_exec_connections;
SQL得到结果:
- 得到结果=true时,表示合规(pass)。
- 无得到结果时,表示存在风险(Risk)。
2.7 数据库存储加密
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得到结果:
- 得到结果=Encrypted时,表示合规(pass)。
- 得到结果不等于Encrypted时,表示存在风险(Risk)。
2.8 透明加密
SELECT name, is_encrypted FROM sys.databases;
SQL得到结果:
- 得到结果=1时,表示合规(pass)。
- 得到结果不等于1时,表示存在风险(Risk)。
2.9 连接超时机制
SELECT COMMENT, value FROM SYS.SYSCONFIGURES WHERE COMMENT LIKE 'remote%';
SQL得到结果:
- 得到结果≠0时,表示合规(pass)。
- 得到结果=0时,表示存在风险(Risk)。
2.10 数据库版本补丁
SELECT @@VERSION;
SELECT SERVERPROPERTY('ProductVersion');
- SQL得到结果: 需根据实际输出填写。
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得到结果: 需根据实际输出填写。
2.12 C2审计
SELECT value FROM sys.sysconfigures WHERE comment = 'c2 audit mode';
SQL得到结果:
- 得到结果为1时,表示合规(pass)。
- 得到结果为其他值时,表示存在风险(Risk)。
2.13 SQL审核
SELECT status FROM sys.dm_server_audit_status WHERE status = 1;
SQL得到结果:
- 得到结果为1时,表示合规(pass)。
- 得到结果为其他值时,表示存在风险(Risk)。
2.14 SQL注入
SELECT value FROM sys.sysconfigures WHERE comment = 'Enable or disable command shell';
SQL得到结果:
- 得到结果为0时,表示合规(pass)。
- 得到结果为其他值时,表示存在风险(Risk)。
三、总结
从实现思路看,这些SQL脚本常用来检查SQL Server数据库的安全设置,确保数据库在操作系统、权限控制、备份、加密以及其他关键领域符合最佳实践。根据执行结果,系统管理员能够针对发现的问题采取相应的补救措施,进一步加强数据库的安全性。
在这个场景下,以上就是SQL Server安全设置全面检查与优化方案的详细内容,更多关于SQL Server安全设置检查与优化的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:
- SQL Server 2000安全设置详解
- SQL Server 2000的安全设置
- win2008 r2 服务器php+mysql+sqlserver2008运行环境设置(从安装、优化、安全等)
相关资讯
-
09.08
Git本地操作进阶之版本回退,撤销修改与文件删除全攻略实用指南
-
09.08
git版本回退or回滚实现方式方式实用指南
-
09.08
SQL Server修改数据库名称的常用做法实用指南
-
09.08
SQL Server安全配置全面检查与优化方案实用指南
-
09.08
SQL Server限制IP访问数据库的设置做法实用指南
-
09.08
.NET Core实现方式RabbitMQ消息队列的示例代码实用指南
游戏推荐
推荐专题
热门阅读
-
- git版本回退or回滚实现方式方式实用指南
- 09.08
-
-
-
-
- .NET开发中全局数据存储的常见方式实用指南
- 09.08
推荐下载
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏