【数据库】MSSQL等保核查命令大全亲测有效 持续更新解决以下3个痛点1️⃣能查到的大部分检查命令没有运行结果的截图无法确定命令是否有效。2️⃣不同版本的被侧目标可能使用不同的命令过时或者较新的命令可能无法有效运行明显降低检查效率**。**3️⃣网络公开的检查方法整体缺乏系统性与持续维护测试环境虚拟机测试镜像版本cn_windows_server_2019_updated_july_2020_x64_dvd_2c9b67da.iso数据库版本Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64)目录结构一、身份认证与账户策略* 1.1 认证模式检查 * 1.2 sa 账户状态 * 1.3 空账户 * 1.4 登录失败锁定【未查看】 使用 Windows 身份验证 使用 SQL Server 身份验证 (如sa账户) * 1.5 密码复杂度策略二、权限管理与最小特权* 2.1 sysadmin 成员列表 * 2.2 公共角色权限 (public) * 2.3 Guest 用户状态 * 2.4 xp_cmdshell 状态 * 2.5 其他扩展存储过程状态查询三、网络与表面面积配置* 3.1 端口/IP 查看 * 3.2 检查远程连接开关 * 3.3 加密连接四、审计与日志* 4.1 登录审计 * 4.2 日志轮转 * 4.3 日志信息 * 4.4 默认跟踪配置五、数据保护与加密* 5.1 数据库加密状态 * 5.2 敏感数据列加密六、补丁安全* 6.1 补丁/版本查看一、身份认证与账户策略1.1 认证模式检查1(仅 Windows 认证) 若为混合模式 (0)需确保sa已禁用或强密码。SELECT SERVERPROPERTY(IsIntegratedSecurityOnly);返回值含义身份验证模式1仅集成身份验证Windows 身份验证只能用 Windows 账号登录不支持 SQL Server 独立账号密码0混合模式身份验证SQL Server 和 Windows 身份验证既可以用 Windows 账号也可以用 sa 等独立账号登录1.2 sa 账户状态is_disabled 1(禁用) 若必须启用必须重命名且设置强密码。SELECT name, is_disabled FROM sys.sql_logins WHERE name sa;1.3 空账户默认结果为空严禁存在无密码账户。SELECT name FROM sys.sql_logins WHERE password_hash IS NULL;1.4 登录失败锁定【未查看】使用 Windows 身份验证• 当你使用 Windows 账户如DOMAIN\User登录 SQL Server 时SQL Server 完全依赖 Windows 操作系统进行身份验证。• 如果该 Windows 账户因为在其他服务如远程桌面、文件共享中密码输入错误过多而触发了Windows 账户锁定策略那么该账户在尝试登录 SQL Server 时也会失败并提示账户已锁定。• 此时SQL Server 只是“传递”了 Windows 的锁定状态。使用 SQL Server 身份验证 (如sa账户)•原生行为SQL Server 2019默认没有“连续失败 X 次自动锁定 Y 分钟”的原生配置功能。即使你开启了“强制实施密码策略” (CHECK_POLICY ON)这也只是强制密码符合 Windows 的复杂性要求长度、字符种类等并不包含失败计数锁定功能。•为何会被锁定手动禁用管理员通过ALTER LOGIN [name] DISABLE禁用了账户。映射关系如果该 SQL 登录名实际上映射到了一个 Windows 主体较少见通常 SQL 登录名是独立的则受 Windows 策略影响。误解很多时候应用报错“登录失败”被误认为是“账户锁定”实际上只是密码错误。第三方扩展/审计某些企业安全插件或触发器可能模拟了这种行为但这并非 SQL Server 引擎的标准功能。1.5 密码复杂度策略在Windows Server 2012 及更高版本包括 2016, 2019, 2022上创建新的 SQL 登录名时CHECK_POLICY的默认值通常是ON。如果此策略被启用密码必须满足以下条件不包含用户名密码不能包含用户账户名SAM Account Name或全名的一部分超过两个连续字符。长度至少 6 个字符这是 Windows API 的硬性下限尽管最佳实践建议更长。字符种类必须包含以下四类字符中的三类• 英文大写字母 (A-Z)• 英文小写字母 (a-z)• 数字 (0-9)• 非字母数字符号 (例如! $ # %)SELECT name AS 登录名, is_policy_checked AS 是否启用密码策略, is_expiration_checked AS 是否启用密码过期, type_desc AS 登录类型 FROM sys.sql_logins -- 只查SQL身份验证登录 ORDER BY name;针对单一用户的检查方式SQL Server 2019 Management Studio → 安全性 → 登录名 → 属性二、权限管理与最小特权2.1 sysadmin 成员列表仅限必要管理员加入严禁应用账号、普通用户加入此角色。EXEC sp_helpsrvrolemember sysadmin;2.2 公共角色权限 (public)• 每个数据库都有public角色所有数据库用户包括新建的用户默认自动成为其成员• 给public授权 给所有用户授权因此严禁给 public 分配过高权限如ALTER、CONTROL、DELETE等。• 全新数据库中public仅默认拥有CONNECT连接数据库、VIEW ANY COLUMN ENCRYPTION KEY DEFINITION等基础权限这是正常的• 若输出中出现SELECT、INSERT、EXECUTE等权限说明有人给public额外授权存在权限风险。SELECT * FROM sys.database_permissions WHERE grantee_principal_id 0;2.3 Guest 用户状态排查guest账户数据库默认来宾账户权限风险。SELECT * FROM sys.database_principals WHERE name guest;字段名含义关键说明is_disabledguest 账户是否禁用0 启用高风险1 禁用安全type_desc账户类型固定为SQL_USER是系统内置账户principal_id主体 IDguest 账户的固定 ID 为2不可修改2.4 xp_cmdshell 状态查看 xp_cmdshell 的启用状态run_value 1是高风险状态生产环境必须设为0EXEC sp_configure show advanced options, 1; RECONFIGURE; EXEC sp_configure xp_cmdshell;2.5 其他扩展存储过程状态查询USE master; GO SELECT sp_OACreate AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name sp_OACreate AND type P AND schema_id 4 -- schema_id4 是 sys 架构 ) THEN 存在 ELSE 已删除 END AS 存在状态, -- 检查 OLE 自动化功能是否启用控制 sp_OACreate 能否执行 (SELECT CAST(value_in_use AS VARCHAR) FROM sys.configurations WHERE name Ole Automation Procedures) AS OLE自动化启用状态, 高风险可创建OLE对象执行系统操作 AS 风险等级 UNION ALL SELECT xp_regread AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name xp_regread AND type P AND schema_id 4 ) THEN 存在 ELSE 已删除 END AS 存在状态, 无独立开关存在即可能执行 AS 启用状态说明, 中高风险可读取注册表敏感配置 AS 风险等级 UNION ALL SELECT xp_dirtree AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name xp_dirtree AND type P AND schema_id 4 ) THEN 存在 ELSE 已删除 END AS 存在状态, 无独立开关存在即可能执行 AS 启用状态说明, 中风险可遍历服务器文件目录泄露路径信息 AS 风险等级 UNION ALL SELECT xp_cmdshell AS 扩展存储过程名, CASE WHEN EXISTS ( SELECT 1 FROM sys.objects WHERE name xp_cmdshell AND type P AND schema_id 4 ) THEN 存在 ELSE 已删除 END AS 存在状态, (SELECT CAST(value_in_use AS VARCHAR) FROM sys.configurations WHERE name xp_cmdshell) AS 启用状态, 极高风险执行系统CMD命令 AS 风险等级; GO三、网络与表面面积配置3.1 端口/IP查看• 端口建议修改为非常用高位端口。• IP仅限非公网地址。配置管理器 - SQL server网络配置 - MSSQLSERVER的协议 - 属性 - 强制加密3.2 检查远程连接开关EXEC sp_configure remote access;远程DAC查看run_value 0 → 合规仅本地可用推荐 run_value 1 → 不合规允许远程使用DAC高风险。USE master; GO EXEC sp_configure show advanced options, 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure remote admin connections;3.3 加密连接需要改为 Yes同时需提前配置服务器证书否则用自签名证书。配置管理器 - SQL server网络配置 - MSSQLSERVER的协议 - 属性 - 强制加密四、审计与日志4.1 登录审计数据库管理工具 - 数据库名 - 属性 - 安全性 - 登录审核4.2 日志轮转数据库管理工具 - 管理 - SQL Server 日志 - 右键配置4.3 日志信息查看日志记录了的信息格式数据库管理工具 - 管理 - SQL Server 日志 - 选择对应日期的日志4.4 默认跟踪配置默认跟踪是 SQL Server 最轻量化的审计工具几乎不消耗服务器资源能自动记录以下关键操作安全审计必备• 数据库对象的创建 / 修改 / 删除表、存储过程、视图等• 登录账户的权限变更、创建 / 删除• 数据库备份 / 还原、分离 / 附加操作• 服务器配置选项的修改。status 1(运行中) 用于记录部分 DDL 操作和性能事件。SELECT * FROM sys.traces WHERE is_default 1;五、数据保护与加密5.1 数据库加密状态TDE透明数据加密是 SQL Server 对数据库文件的实时加密 / 解密作用是• 防止攻击者窃取数据库文件.mdf/.ldf后直接附加读取数据• TDE 保护的是数据库文件本身而非传输过程传输加密需配合 “强制加密连接”• 启用 TDE 后务必备份加密证书和私钥这是数据库恢复的关键。SELECT db.name, dek.encryption_state FROM sys.databases db LEFT JOIN sys.dm_database_encryption_keys dek ON db.database_id dek.database_id;进阶版USE master; GO SELECT db.name AS 数据库名, dek.encryption_state, CASE dek.encryption_state WHEN 0 THEN 未加密无加密密钥 WHEN 1 THEN 未加密有密钥但未启用 WHEN 2 THEN 加密进行中 WHEN 3 THEN 已加密合规 WHEN 4 THEN 密钥变更进行中 WHEN 5 THEN 解密进行中 WHEN 6 THEN 保护程序变更进行中 ELSE 未知状态 END AS 加密状态说明, dek.encryptor_type AS 加密器类型 FROM sys.databases db LEFT JOIN sys.dm_database_encryption_keys dek ON db.database_id dek.database_id ORDER BY db.name;字段 / 值含义 合规要求encryption_state 3数据库已启用 TDE 加密合规状态核心业务库推荐配置encryption_state 0/NULL未加密无加密密钥非核心库可接受核心库高风险tempdb加密状态只要实例中有任意数据库启用 TDEtempdb 会自动加密属于正常现象encryptor_type加密器类型CERTIFICATE证书推荐、ASYMMETRIC KEY非对称密钥5.2 敏感数据列加密实机核查密码、电话、身份证等敏感信息是否加密。非通用型手段【根据实际列命名决定】-- 遍历所有用户数据库检查敏感列加密状态 DECLARE DBName NVARCHAR(128); DECLARE SQL NVARCHAR(MAX); -- 创建临时表存储检查结果 CREATE TABLE#SensitiveColumns ( 数据库名 NVARCHAR(128), 表名 NVARCHAR(128), 列名 NVARCHAR(128), 数据类型 NVARCHAR(128), 是否AlwaysEncrypted BIT, 加密类型 NVARCHAR(50), 风险等级 NVARCHAR(10) ); -- 遍历所有用户数据库排除系统库 DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE name NOT IN (master, model, msdb, tempdb) AND state 0; -- 仅检查在线数据库 OPEN db_cursor; FETCH NEXT FROM db_cursor INTO DBName; WHILE FETCH_STATUS 0 BEGIN SET SQL N USE [ DBName N]; INSERT INTO #SensitiveColumns SELECT DBName N AS 数据库名, SCHEMA_NAME(t.schema_id) . t.name AS 表名, c.name AS 列名, ty.name AS 数据类型, CASE WHEN c.encryption_type IS NOT NULL THEN 1 ELSE 0 END AS 是否AlwaysEncrypted, ISNULL(c.encryption_type_desc, 未加密) AS 加密类型, CASE WHEN c.encryption_type IS NULL AND ( c.name LIKE %idcard% OR c.name LIKE %id_number% OR -- 身份证相关列 c.name LIKE %phone% OR c.name LIKE %mobile% OR -- 手机号相关列 c.name LIKE %password% OR c.name LIKE %pwd% OR -- 密码相关列 c.name LIKE %bank% OR c.name LIKE %card_no% -- 银行卡相关列 ) THEN 高风险 ELSE 合规 END AS 风险等级 FROM sys.columns c JOIN sys.tables t ON c.object_id t.object_id JOIN sys.types ty ON c.system_type_id ty.system_type_id WHERE -- 匹配敏感列命名规则可根据业务调整 c.name LIKE %idcard% OR c.name LIKE %id_number% OR c.name LIKE %phone% OR c.name LIKE %mobile% OR c.name LIKE %password% OR c.name LIKE %pwd% OR c.name LIKE %bank% OR c.name LIKE %card_no%;; EXEC sp_executesql SQL; FETCH NEXT FROM db_cursor INTO DBName; END; CLOSE db_cursor; DEALLOCATE db_cursor; -- 输出检查结果 SELECT * FROM#SensitiveColumns WHERE 风险等级 高风险 -- 仅显示未加密的敏感列 ORDER BY 数据库名, 表名, 列名; -- 清理临时表 DROP TABLE#SensitiveColumns;六、补丁安全6.1 补丁/版本查看SELECT VERSION AS 完整版本信息, SERVERPROPERTY(ProductVersion) AS 产品版本号, -- 核心用于匹配补丁 SERVERPROPERTY(ProductLevel) AS 补丁级别, -- RTM/SPx/CUx/GDR SERVERPROPERTY(Edition) AS 版本类型, -- 企业版/标准版/开发版 SERVERPROPERTY(BuildClrVersion) AS CLR版本, SERVERPROPERTY(ComputerNamePhysicalNetBIOS) AS 服务器名;关键标识说明•RTM初始发布版本无补丁必须升级•SPx服务包Service Pack大版本补丁•CUx累积更新Cumulative Update月度安全补丁•GDR安全更新仅修复高危漏洞无功能更新。学习资源如果你也是零基础想转行网络安全却苦于没系统学习路径、不懂核心攻防技能光靠盲目摸索不仅浪费时间还消磨自己信心。这份 360 智榜样学习中心独家出版《网络攻防知识库》专为转行党量身打造01内容涵盖这份资料专门为零基础转行设计19 大核心模块从 Linux系统、Python 基础、HTTP协议等地基知识到 Web 渗透、代码审计、CTF 实战层层递进攻防结合的讲解方式让新手轻松上手真实实战案例 落地脚本直接对标企业岗位需求帮你快速搭建转行核心技能体系这份完整版的网络安全学习资料已经上传CSDN【保证100%免费】**读者福利 |***CSDN大礼包《网络安全入门进阶学习资源包》免费分享 *安全链接放心点击02 知识库价值深度 本知识库超越常规工具手册深入剖析攻击技术的底层原理与高级防御策略并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等提供了独到的技术视角和实战验证过的对抗方案。广度 面向企业安全建设的核心场景渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点是应对复杂攻防挑战的实用指南。实战性 知识库内容源于真实攻防对抗和大型演练实践通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。03 谁需要掌握本知识库负责企业整体安全策略与建设的CISO/安全总监从事渗透测试、红队行动的安全研究员/渗透测试工程师负责安全监控、威胁分析、应急响应的蓝队工程师/SOC分析师设计开发安全产品、自动化工具的安全开发工程师对网络攻防技术有浓厚兴趣的高校信息安全专业师生04部分核心内容展示360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式既夯实基础技能更深入高阶对抗技术。内容组织紧密结合攻防场景辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合是你学习过程中好帮手。1、网络安全意识2、Linux操作系统3、WEB架构基础与HTTP协议4、Web渗透测试5、渗透测试案例分享6、渗透测试实战技巧7、攻防对战实战8、CTF之MISC实战讲解这份完整版的网络安全学习资料已经上传CSDN【保证100%免费】**读者福利 |***CSDN大礼包《网络安全入门进阶学习资源包》免费分享 ***安全链接放心点击**文章来自网上侵权请联系博主