ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SQL Server Assessment API 自动变量(Automatic Variables)机制详解:attr::service 与 attr::target 命名空间实战指南

SQL Server Assessment API 自动变量(Automatic Variables)机制详解:attr::service 与 attr::target 命名空间实战指南 示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载在 SQL Server Assessment API微软官方 SQL Server 与 Azure SQL 评估解决方案仓库位置见 sql-assessment-api中评估数据由探针Probe采集而部分关键数据在首个探针被调用之前就已就绪——例如目标 SQL Server 的版本、探针运行所需的服务要求等。这类前置数据正是通过**自动变量Automatic Variables**暴露给规则编写者的。读完本文你将掌握自动变量的命名空间组织方式、attr::service::与attr::target::两个命名空间的全部可用变量并能在自定义规则中结合消息模板、条件表达式与本地变量写出可复现、可上线的合规检查规则。自动变量什么是前置数据在 AutomaticVariables/README.md 中自动变量的定义非常明确评估数据由探针probes交付。部分数据在第一个探针被调用之前就已可用例如目标 SQL Server 版本或探针的要求。这类数据可通过自动变量访问。这意味着自动变量与探针返回的普通数据有两处本质区别时序上更早探针数据需要先执行查询、再经过数据变换才能使用而自动变量在评估流程启动阶段即可解析规则引擎在展开条件condition与消息模板时不会因为数据缺失而失败。来源上更环境化自动变量描述的是目标对象本身是什么版本、跑在什么平台、提供了哪些服务、用什么账户运行而不是目标对象内部的数据如某个 DMV 的计数器值。自动变量按**命名空间namespace**分组当前仓库文档定义了三个入口其中两个为成熟的变量命名空间attr::service::——与目标 SQL Server 上运行的服务相关attr::target::——与目标对象服务器/数据库自身属性相关。此外LocalVariables.md 中定义的本地变量是检查check私有的派生变量与自动变量共同构成规则可引用的完整变量体系。attr::service:: 命名空间服务的存在性与运行账户变量来源attr::service::*命名空间下的变量与 Service requirement服务要求 配套提供。服务要求用于声明某个探针运行所依赖的 SQL Server 服务当规则系统解析自动变量时会按服务键service key从目标机器收集服务状态。服务键必须是服务要求所支持的取值之一即下表列出的服务服务键service key对应服务MSSQLSQL Server 数据库引擎服务SQLAgentSQL Server Agent 服务MSOLAPSQL Server Analysis ServicesReportServerSQL Server Reporting ServicesMsDtsServerIntegration ServicesMSSQLFDLauncherSQL Full-Text Filter Daemon Launcher全文筛选器守护进程启动器服务SQLBrowserSQL Server Browser 服务可用变量对每个服务attr::service::命名空间提供三个变量其中_key_为上述任一服务键变量名类型描述attr::service::_key_bool指示该服务是否存在已安装/正在运行attr::service::_key_.namestring服务的实际名称attr::service::_key_.accountstring运行该服务的用户账户名例如attr::service::SQLAgent为布尔值SQL Server Agent 是否存在、attr::service::SQLAgent.name为服务实际名称、attr::service::SQLAgent.account为 SQL Server Agent 运行账户。示例一检查 SQL Server Agent 是否运行在本地服务账户下在 AttrService.md 的第一个示例中当 SQL Server Agent 服务存在但未运行在本地服务账户下时消息模板将报告实际账户名{ … message: Account {attr::service::SQLAgent.account} is not supported for SQL Server Agent service., localServiceAccount: NT AUTHORITY\\LOCALSERVICE, condition: [ { not: attr::service::SQLAgent }, { ine: [ attr::service::SQLAgent.account, localServiceAccount ]} ], probes: [ IsClusteredServer ] }这段规则逐项解读如下message使用了 消息模板Message template 语法{attr::service::SQLAgent.account}会被替换为该服务的实际账户名因此告警信息天然携带上下文读者一眼即可看到当前到底用的是哪个账户localServiceAccount是规则的参数parameters与探针数据一同参与条件求值condition是 JSON 对象树形式的表达式。根据 Rule.md 的定义条件返回true表示最佳实践已被实现返回false时消息才会展示给用户。这里使用了not逻辑取反与ine不相等两个运算符第一个子条件not: attr::service::SQLAgent在服务不存在时短路为 true避免对不存在的服务误报第二个子条件检测attr::service::SQLAgent.account是否不等于本地服务账户NT AUTHORITY\LOCALSERVICEprobes声明本检查依赖的探针引用例如这里的IsClusteredServer。示例二扩展到集群服务器的多账户排除第二个示例在第一个的基础上针对集群clustered服务器扩展了不受支持账户清单。当服务器是集群节点时除本地服务账户外NT AUTHORITY\SYSTEM、LOCALSYSTEM、NT AUTHORITY\NETWORKSERVICE也被视为不受支持{ … message: Account {attr::service::SQLAgent.account} is not supported for SQL Server Agent service., localServiceAccount: NT AUTHORITY\\LOCALSERVICE, unsupportedAccounts: [ NT AUTHORITY\\SYSTEM, LOCALSYSTEM, NT AUTHORITY\\NETWORKSERVICE ], condition: [ { not: attr::service::SQLAgent }, { ine: [ attr::service::SQLAgent.account, localServiceAccount ], or: [ { not: is_clustered_server }, { not: { iin: [ attr::service::SQLAgent.account, unsupportedAccounts ] }} ] } ], probes: [ IsClusteredServer ] }这里的逻辑值得细品内层or的两个分支共同决定何时需要告警要么服务器非集群not: is_clustered_server此时仅按单机规则判断要么服务器是集群但账户不在unsupportedAccounts列表中iin为in检查not取反表示不在列表中两个分支任意为真即触发告警分支外层再与服务存在条件组合完整覆盖了单机与集群两种拓扑下的账户合规检查。attr::target:: 命名空间目标对象的自身属性attr::target::*命名空间包含与**目标模式target pattern**匹配的数据。目标模式是规则中target属性的取值用于筛选规则与探针实现适用的 SQL Server 实例和数据库详见 TargetPattern.md。变量名类型描述attr::target::versionversion目标 SQL Server 的版本attr::target::platformstring目标 SQL Server 宿主机平台如 Windows、Linuxattr::target::engine_editionstring目标引擎版本engine editionattr::target::server_namestring目标服务器名attr::target::machine_typestring目标机器类型attr::target::urnstring目标对象的 URN注意一个细节attr::target::urn是目标对象的统一资源名称URN指向评估引擎内部对目标对象实例或数据库的定位标识可用于在消息中明确展示这条建议针对的是哪个对象。与目标模式属性的对应关系attr::target::*变量与目标模式TargetPattern.md的属性一一对应理解目标模式是正确使用这些变量的前提。目标模式是一个 JSON 对象所有属性均可选——省略的属性表示匹配任意值engineEdition可选值PersonalOrDesktopEngine、Standard、Enterprise、Express、AzureDatabase、DataWarehouse、StretchDatabase、ManagedInstance同时支持快捷组合Azure AzureDatabase, DataWarehouse, StretchDatabase, ManagedInstance与SqlServer PersonalOrDesktopEngine, Standard, Enterprise, Express也支持逗号分隔的任意组合。例如engineEdtion: SqlServer, ManagedInstance匹配任意本地版本或 Azure 托管实例name目标 SQL Server 对象名数据库名或实例名的字符串模式如name: { not: [ master, tempdb, model]}匹配除系统数据库外的所有对象machineType宿主机类型支持Physical、AzureVm、Hypervisor、Other如machineType: [AzureVm, Physical]platform宿主机平台支持Windows、LinuxserverName实例名目标为数据库时指承载该数据库的实例名支持正则与取反模式如serverName: {not: /*.Test$/}type对象类型支持Server、Database检查的目标通常二选一探针则常两者皆可version版本区间列表遵循 NuGet 版本区间格式例如version: [[13.0.5026.0, 14.0), [12.0.6024.0, 13.0), [15.0)]匹配 SQL Server 2016 SP2、2014 SP3 与 2019。字符串模式与版本区间的详细语法同样收录在 TargetPattern.md 中字符串可以精确匹配也可以写成/…/包裹的 .NET 正则表达式默认不区分大小写c选项可切换为区分大小写还可以用{ not: … }对象表达取反版本区间则用方括号/圆括号表达开闭边界。实战组合把自动变量用进自定义规则自动变量本身不产生告警它们服务于三类场景消息模板插值、条件求值、探针参数传递。以下将结合 MessageTemplate.md 与 LocalVariables.md 给出完整的组合用法。在消息模板中插值消息模板类似 C# 字符串插值以开头、用花括号包裹变量即可完成替换如message: Account {attr::service::SQLAgent.account} is not supported for SQL Server Agent service.。模板还支持格式说明符{fragmentation:P2}会将数字乘以 100、保留两位小数并附加百分号输出如Current fragmentation level is 37.20%。对字符串变量#号会被替换为字符串本身且仅当字符串非空时才插入——例如message: Create index on {Table} with key columns {KeyCols}{IncludedCols: and included columns: #}在IncludedCols为空时输出简洁版本有值时输出带附加信息的完整版本。在条件表达式中求值条件表达式的语义为求值为true表示最佳实践已被遵循false则向用户展示message。运算符not、or、ine、iin、lt等的完整清单见 Operators.md。自动变量作为attr::…引用直接参与求值且因为它们在探针运行前就已就绪条件永远不会因探针未返回该字段而解析失败。结合本地变量做派生计算本地变量允许把自动变量、探针数据与字面量组合成新的派生变量。例如 LocalVariables.md 的示例将探针返回的最大工作线程数减 1 后参与区间判断{ probes: [SysDmOsSysInfo], locals: { workers: {sub: [ max_workers_count, 1 ] } }, message: Workers {workers}., condition: { lt: [ 0, workers ], lt: [ workers, 4 ] } }同理你完全可以在locals中把attr::target::version与固定版本常量比较后得出是否支持某特性的布尔派生变量供多个条件与消息复用。仓库实证内置规则集中自动变量的真实用法自动变量并非仅为文档展示而存在——内置规则集 ruleset.json 中大量规则直接引用了attr::service::*变量。从源码结构看服务账户合规检查是自动变量最典型的落地场景例如SQL Server Agent 运行账户检查message: Use another account to run SQL Server Agent service. Current account {attr::service::SQLAgent.account} is not recommended并配套not: attr::service::SQLAgent的存在性短路条件见 ruleset.json多服务共账户检查比较{attr::service::MSSQL.account}与{attr::service::SQLAgent.account}是否相同若相同则提示Use different accounts for SQL Server Agent service and SQL Server Database Engine service见 ruleset.json同样的模式还应用于 SQL BrowserSQLBrowser.account、Integration ServicesMsDtsServer.account、全文搜索服务MSSQLFDLauncher.account、Analysis ServicesMSOLAP.account等且常将attr::service::*.name作为探针参数ServiceName传入见 ruleset.json。从这些内置规则可以确认一个编写规律凡涉及某服务是否存在、以什么账户运行、多个服务是否共用一个账户的检查attr::service::*都是首选数据源其好处是无需编写任何查询探针即可获得服务级事实。延伸阅读自动变量是 SQL Assessment API 自定义规则体系的一部分建议按以下路径继续深入自定义规则总览与规则与探针的关系规则Rule属性详解了解target、condition、parameters等属性目标模式Target Pattern掌握attr::target::*变量的取值来源服务要求Service Requirement与探针要求总览了解requires/runFor如何与自动变量协同消息模板与本地变量掌握插值与派生变量的完整语法动手实践可参考 QuickStart、创建自定义规则教程以及内置规则集 ruleset.json 中的真实规则。赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐gVisor 如何隔离真实漏洞以 CVE-2020-14386 容器逃逸漏洞为例的纵深防御剖析gVisor 如何隔离真实漏洞以 CVE 2020 14386 容器逃逸漏洞为例的纵深防御剖析 导读 本文以 2020 年 9 月公布的 Linux 内核容器示例工程数据库教程后端快手自动化发布故障排查实战social-auto-upload sau kuaishou 命令全链路排障指南快手自动化发布故障排查实战social auto upload sau kuaishou 命令全链路排障指南 本文基于 social auto upload示例工程数据库教程后端Label Studio Image 标签完全指南图像标注界面的核心配置与源码解析Label Studio Image 标签完全指南图像标注界面的核心配置与源码解析 Label Studio 使用 XML 风格的标签Tag来定义标注界面示例工程数据库教程后端上一篇终极指南如何用CursorPro免费助手解决机器码限制支持动物保护事业下一篇像素级图像对比新选择pixelmatch全面性能评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表