尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

SQL Assessment API 探针特性要求(Feature Requirement)实战指南:以 HADR 为例理解 requires 与 runFor

发布时间:2026/9/25 2:25:16

资讯中心
01
ARTICLE

SQL Assessment API 探针特性要求(Feature Requirement)实战指南:以 HADR 为例理解 requires 与 runFor

SQL Assessment API 探针特性要求(Feature Requirement)实战指南:以 HADR 为例理解 requires 与 runFor
示例工程数据库教程后端【免费下载链接】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 Assessment API 的自定义规则集中探针Probe是获取 SQL Server 配置数据的最小单元而特性要求Feature Requirement决定了探针在目标实例上是否有意义地运行。本文围绕 FeatureRequirement.md 展开系统讲解特性要求的 JSON 写法、唯一受支持的 HADR 取值并通过requires与runFor两种挂载方式对比、以及仓库内置 ruleset.json 中的真实探针实现帮助你准确配置探针的启用条件避免因权限或功能缺失导致评估中断或产生误导性警告。一、什么是探针要求Probe Requirements在 SQL Assessment API 中探针用于从目标 SQL Server 实例、宿主机及其他来源获取评估所需的数据参见 Probe.md。默认情况下探针一旦执行出错整个评估流程会立即终止并抛出错误信息导致后续所有检查都无法运行、评估结果不完整。例如下面的探针需要当前用户具备sysadmin角色才能成功执行DBMetaInfo: [ { type: SQL, target: { type: Database }, implementation: { query: DBCC DBINFO(TargetName) WITH TABLERESULTS,NO_INFOMSGS, } } ]探针要求Probe Requirements机制正是为解决这类探针因权限不足或配置问题而无法取数的场景而设计的在探针中显式声明其运行所需的前提条件SQL Assessment API 会在执行前先行校验条件不满足时跳过探针及所有依赖它的检查并向用户返回警告而不是中断整个评估。四种受支持的探针要求类型完整清单见 ProbeRequirements/README.mdrole —— 当前用户所需角色permission —— 探针所需的特殊权限feature —— SQL Server 功能特性service —— SQL Server 相关服务二、特性要求Feature Requirement的格式2.1 名称格式特性要求以固定的字面量feature作为 JSON 属性名文档中以加粗的__feature__表示固定字面量__feature__2.2 受支持的值当前特性要求仅支持一个取值取值含义HADR高可用性与灾难恢复High Availability and Disaster Recovery即 Always On 可用性组也就是说feature: [HADR]表达的是仅当目标 SQL Server 实例启用了 Always On 可用性组HADR相关功能时该探针才应运行。2.3 基本示例在探针的runFor属性中声明特性要求runFor: { feature: [ HADR ] }三、requires 与 runFor两种挂载方式的行为差异特性要求既可以挂在requires属性下也可以挂在runFor属性下二者使用相同的 JSON 格式但语义与行为截然不同详见 Probe.md 对两个属性的定义属性校验不通过时的行为适用场景requires探针不执行所有依赖该探针的检查被跳过并向用户返回一条警告权限、角色等必须满足的硬性前提条件runFor探针不执行立即返回空结果集不产生任何警告功能特性等条件性前提无警告才合理3.1 requires需要显式警告的硬性前提以 ProbeRequirements/README.md 中的示例为例DBCC DBINFO查询要求当前用户具备sysadmin角色可在requires中显式声明DBMetaInfo: [ { type: SQL, target: { type: Database }, implementation: { query: DBCC DBINFO(TargetName) WITH TABLERESULTS,NO_INFOMSGS, }, requires: { role: [ sysadmin ] } } ]加入该属性后SQL Assessment API 会在运行查询前先检查当前用户是否拥有sysadmin角色若不满足查询不会执行依赖此探针的所有检查会被跳过并向用户发出警告。这对于权限确实缺失、需要提示用户补权的场景是合适的。3.2 runFor无需警告的逻辑前提再看探测数据库镜像端点的探针其查询如下SELECT [name] AS endpoint_name, is_encryption_enabled, encryption_algorithm, encryption_algorithm_desc FROM sys.database_mirroring_endpoints当实例未启用高可用性与灾难恢复HADR时该探针没有实际意义。此时若把要求挂在requires下AGEndpoints: [ { type: SQL, target: { type: Server }, implementation: { query: … }, requires: { feature: [ HADR ] } } ]用户会对每个未参与 HADR 的 SQL Server 实例都收到一条警告这显然会造成困扰。正确的做法是改用runFor——当实例不支持 HADR 时探针静默跳过、直接返回空集不产生任何警告AGEndpoints: [ { type: SQL, target: { type: Server }, implementation: { query: … }, runFor: { feature: [ HADR ] } } ]经验法则requires面向缺失即需要警示的前提如权限、角色runFor面向不满足是常态、无需打扰用户的逻辑前提如 HADR 功能是否启用。四、要求属性的通用 JSON 结构每种要求都由一个 JSON 属性表示属性名即要求名属性值为字符串数组列出要求的具体取值。例如下面的探针要求具备ALTER TABLE和ADMINISTER BULK OPERATIONS两个服务器权限requires: { server permission: [ ALTER TABLE, ADMINISTER BULK OPERATIONS ] }数组中的多个取值语义为全部满足——只有当列出的所有条件都成立时探针才会运行。这一结构对role、permission、feature、service四种要求类型通用。4.1 关联要求类型速览为了在自定义规则集中灵活组合前提条件这里补充另外三种要求类型的写法与特性要求共同构成完整的要求体系角色要求role名称格式为固定字面量role取值为 SQL Server 角色名。例如要求当前用户属于bulkadmin与diskadmin角色requires: { role: [ bulkadmin, diskadmin ] }权限要求permission名称格式为*securable_class* __permission__ __[__ __on__ *securable_name* __]__其中securable_class是安全对象类别如 DATABASE、OBJECT、SERVERsecurable_name为安全对象名服务器或数据库级时可省略支持多段名称。例如requires: { object permission on [msdb].[dbo].[sysalerts]: [ SELECT ] }服务要求service名称格式为固定字面量service取值为 SQL Server 系列服务的键名包括MSSQLSQL Server 主服务、SQLAgentSQL Server Agent、MSOLAPAnalysis Services、ReportServerReporting Services、MsDtsServerIntegration Services、MSSQLFDLauncher全文筛选器守护进程启动器、SQLBrowserSQL Server Browser。例如仅对启用了 Reporting Services 的实例运行探针runFor: { service: [ ReportServer ] }服务要求与 attr::service:: 自动变量 相关联可在规则消息与条件中引用服务是否存在、服务名及运行账户等信息。五、仓库源码级印证内置规则集中的 HADR 特性要求特性要求并非孤立的语法概念它已被广泛应用于 SQL Assessment API 自带的默认规则集 ruleset.json。搜索该文件可以发现多个与可用性组相关的探针都通过runFor.feature: [HADR]声明了运行前提例如AGConfigurationruleset.json采集可用性组与副本配置两个实现分别面向 SQL Server 2012–2014 的[11.0, 13.0)与 2016 及以上的[13.0,)版本区间都带runFor.feature: [HADR]AGDatabasesruleset.json采集可用性组数据库同步状态AGEndpointsruleset.json即上文示例中探测镜像端点的探针其真实查询正是SELECT [name] AS endpoint_name, is_encryption_enabled, encryption_algorithm, encryption_algorithm_desc FROM sys.database_mirroring_endpointsAGListenerruleset.json采集可用性组侦听器信息。从这些实现可以看出标准套路与 HADR 相关的探针统一使用runFor而非requires声明特性要求确保在未配置 Always On 可用性组的普通实例上静默返回空结果不打扰用户这也从侧面印证了文档中HADR 未启用时探针无意义、不应产生警告的设计初衷。六、在自定义规则集中落地特性要求结合 RulesetFileStructure.md 可知规则集是一个 JSON 文本文件顶层包含必填的name、version、schemaVersion当前为 1.0以及可选的rules与probes对象。探针定义位于probes下每个探针是一个由若干实现组成的 JSON 数组引擎会选择第一个目标模式target pattern匹配的实现因此实现顺序很重要另一规则集还可以在既有实现列表之上追加新实现。要在自定义规则集中使用特性要求直接在探针实现对象的requires或runFor属性中加入feature: [HADR]即可例如仿照内置AGEndpoints编写{ name: MyCustomRuleset, version: 1.0.0, schemaVersion: 1.0, probes: { AGEndpoints: [ { type: SQL, target: { type: Server, platform: [ Windows, Linux ], engineEdition: SqlServer, version: [11.0,) }, runFor: { feature: [ HADR ] }, implementation: { query: SELECT [name] AS endpoint_name, is_encryption_enabled, encryption_algorithm, encryption_algorithm_desc FROM sys.database_mirroring_endpoints } } ] }, rules: [] }需要注意的落地要点feature数组内目前只有HADR一个受支持取值编写时不要臆造其他特性名否则要求无法被引擎识别若希望未启用 HADR 也给出明确警示应改用requires挂载特性要求常规评估场景建议遵循内置规则集的做法使用runFor探针应设计为无副作用函数引擎可能重排探针调用顺序以优化目标实例负载且当没有检查需要某探针的数据时该探针根本不会被调用见 Probe.md——特性要求只决定满足条件时探针是否执行不改变这一调度模型。七、小结特性要求Feature Requirement是 SQL Assessment API 探针要求体系中的一员以feature: [HADR]的形式声明探针运行所需的 SQL Server 功能前提。它与role、permission、service要求共用同一套 JSON 结构通过requires不满足则跳过并警告与runFor不满足则静默返回空集两种挂载方式适配不同的提示语义。仓库内置的 ruleset.json 中AGConfiguration、AGDatabases、AGEndpoints、AGListener等探针均以runFor.feature: [HADR]作为标准实践可作为自定义规则集的首选参考模板。合理运用特性要求能让评估在功能缺失的实例上平稳运行、结果完整同时保持输出的可读性。赞分享示例工程数据库教程后端【免费下载链接】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点击查看免费下载相关推荐如何加入Android开发者的播客社区TheContext-Podcast的GitHub Issues讨论规则与实践如何加入Android开发者的播客社区TheContext Podcast的GitHub Issues讨论规则与实践 TheContext Podcast 是示例工程数据库教程后端YimMenu游戏助手终极教程从零开始掌握GTA V最强菜单YimMenu游戏助手终极教程从零开始掌握GTA V最强菜单 YimMenu是一款专为《GTA V》设计的开源游戏菜单工具旨在为玩家提供强大的游戏功能扩展和示例工程数据库教程后端Hap QuickTime视频编码器实现10倍性能提升的硬件加速视频编解码架构设计指南Hap QuickTime视频编码器实现10倍性能提升的硬件加速视频编解码架构设计指南 Hap QuickTime视频编码器是一款专为现代图形硬件优化的开源视示例工程数据库教程后端上一篇ControlNet-XS模型原理深度解析小体积大能力的AI图像控制技术下一篇用 Next.js 与 Nhost GraphQL 构建服务端渲染的电影数据库应用React Server Components 快速上手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。