SQL Assessment API 自定义 Probe 的权限需求(Permission Requirement)配置指南
发布时间:2026/9/25 2:51:15来源:尧图网络
示例工程数据库教程后端【免费下载链接】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 允许用户深度自定义规则集ruleset与探针probe其中权限需求Permission Requirement用于显式声明 probe 运行所需的最低权限避免因权限不足导致评估过程中途失败。本文基于 sql-server-samples 仓库中 PermissionRequirement.md 的规范结合仓库内置 ruleset.json 的真实 probe 定义完整讲解权限需求的名称格式、取值规则、JSON 写法与底层判定机制帮助你在自定义规则集时准确声明权限并理解跳过行为。为什么需要声明权限需求SQL Assessment API 的评估流程由多条规则rule驱动每条规则通过一个或多个 probe 获取数据。默认情况下只要某个 probe 在执行中抛错整个评估流程就会立即终止导致后续所有检查都无法运行最终得到不完整的结果。典型场景下面这个DBMetaInfoprobe 使用DBCC DBINFO读取数据库元数据该命令要求调用者拥有sysadmin角色权限。如果当前登录用户不是sysadminprobe 会直接报错并中断整个评估DBMetaInfo: [ { type: SQL, target: { type: Database }, implementation: { query: DBCC DBINFO(TargetName) WITH TABLERESULTS,NO_INFOMSGS } } ]通过在 probe 的requires属性中显式声明前置条件SQL Assessment API 会在执行查询之前先校验权限不满足时不会执行查询所有依赖该 probe 的检查都会被跳过并仅向用户返回一条警告而不是中断整个评估DBMetaInfo: [ { type: SQL, target: { type: Database }, implementation: { query: DBCC DBINFO(TargetName) WITH TABLERESULTS,NO_INFOMSGS }, requires: { role: [ sysadmin ] } } ]关于该机制的完整说明可参见 Probe requirements 总览 以及 Probe.md 中requires与runFor两个属性的语义定义。权限需求的名称格式权限需求permission requirement的键名遵循如下格式securable_class permission [on securable_name]各部分含义如下组成说明securable_class安全对象securable的类别名称类型为sysname。示例值DATABASE、OBJECT、REMOTE SERVICE BINDING、SERVERpermission需要校验的具体权限名称如SELECT、ALTER TRACEon securable_name可选的限定部分。指定权限针对的具体安全对象名称类型为sysname支持多部分名称multipart name如[msdb].[dbo].[sysalerts]方括号[...]表示on securable_name这一部分是可选的关键约定当安全对象本身是服务器SERVER或数据库DATABASE时securable_name部分应当省略直接写作server permission或database permission形式。支持的取值范围权限需求的允许值取决于securable_class对应的安全对象类别。SQL Server 为不同类别定义了各自的权限集合与层次结构服务器级权限如ALTER TRACE、ADMINISTER BULK OPERATIONS、VIEW SERVER STATE适用于SERVER类数据库级权限如SELECT、VIEW DATABASE STATE、ALTER ANY DATABASE适用于DATABASE类对象级权限如表、视图、存储过程上的SELECT、EXECUTE等适用于OBJECT类此时必须通过on securable_name指明具体对象其他安全对象类别如REMOTE SERVICE BINDING同样遵循对应类别的权限定义。权限校验的底层依据是 SQL Server 系统函数 sys.fn_my_permissions——该函数返回当前主体principal在指定安全对象上实际生效的权限列表SQL Assessment API 正是基于它来判断 probe 的权限需求是否满足。更完整的权限清单与层次关系可参考 SQL Server 官方文档中的SQL Server Permissions与Permissions Hierarchy两篇资料。实战示例原文档与内置规则集的双重印证服务器级权限ALTER TRACErequires的值是一个 JSON 对象属性名即需求名称属性值为字符串数组列出需要校验的权限。下面的声明要求当前用户拥有ALTER TRACE服务器权限requires: { server permission: [ ALTER TRACE ] }这一写法在仓库内置规则集 ruleset.json 中被真实使用CountBlackBoxTraces与CountDefaultTraces两个 probe 都通过sys.traces视图查询服务器跟踪信息而查询该视图需要ALTER TRACE权限因此它们都在requires中声明了相同权限见 ruleset.json 第 18412 行CountBlackBoxTraces: [ { type: SQL, target: { engineEdition: SqlServer, ManagedInstance, version: [11.0,) }, requires: { server permission: [ ALTER TRACE ] }, implementation: { query: SELECT COUNT(id) AS [BlackBoxTraceCount] FROM [sys].[traces] WITH (NOLOCK) WHERE [path] LIKE %blackbox%.trc AND status 1; } } ]对象级权限对 msdb 系统表加 SELECT当 probe 需要读取某个具体对象如表、视图时使用object permission on 对象名形式声明。例如读取msdb数据库中的sysalerts表需要SELECT权限requires: { object permission on [msdb].[dbo].[sysalerts]: [ SELECT ] }内置规则集中的SysAlertsprobe 正是这一写法见 ruleset.json 第 18879 行其查询体直接读取[msdb].[dbo].[sysalerts]因此需求与实现严格对应SysAlerts: [ { type: SQL, target: { engineEdition: SqlServer, ManagedInstance, version: [11.0,) }, requires: { object permission on [msdb].[dbo].[sysalerts]: [ SELECT ] }, implementation: { query: SELECT DISTINCT severity, message_id FROM [msdb].[dbo].[sysalerts] WITH (NOLOCK) } } ]多权限需求同时声明多个对象权限requires对象内可以包含多个权限需求键同一 probe 可同时校验多个对象上的权限。内置规则集中的DeprecatedFeaturesJobsprobe 需要同时读取sysjobs与sysjobsteps两张 msdb 表因此在requires中并列声明了两项object permission见 ruleset.json 第 19078 行requires: { object permission on [msdb].[dbo].[sysjobs]: [ SELECT ], object permission on [msdb].[dbo].[sysjobsteps]: [ SELECT ] }需要说明的是权限需求数组中的多项权限按与的关系判定——即当前用户必须同时满足数组中声明的全部权限probe 才会执行缺少任意一项probe 都会被跳过并触发警告。requires 与 runFor 的区别权限需求只是 probe 需求Probe Requirements体系中的一种。与之并列的还有角色role、功能特性feature与服务service三类需求。所有需求的 JSON 形态一致属性名为需求类型名称属性值为字符串数组。更值得关注的是probe 上有两个承载需求的属性它们在语义上存在关键差异属性判定失败时的行为requiresprobe不执行所有依赖该 probe 的检查被跳过用户会收到一条警告runForprobe 不执行但立即返回空结果集不产生任何警告runFor适用于某场景下 probe 本就不该运行、跳过是正常预期的情况。例如探测数据库镜像端点的 probe 在未启用 HADR高可用与灾难恢复的实例上运行没有意义若用requires声明每次对非 HADR 实例评估都会冒出警告反而造成困扰改用runFor后则静默跳过AGEndpoints: [ { type: SQL, target: { type: Server }, implementation: { query: … }, runFor: { feature: [ HADR ] } } ]内置规则集中AGConfiguration、AGDatabases等 Always On 相关 probe 均采用这一模式见 ruleset.json 第 19946 行保证未配置可用性组的实例在评估时不被无关警告打扰。需求类型速查role / feature / service需求类型名称格式支持的取值说明角色需求roleSQL Server 角色名如sysadmin、bulkadmin、diskadmin校验当前用户所属服务器角色详见 RoleRequirement.md权限需求securable_class permission [on securable_name]取决于安全对象类别本文主题校验当前用户对指定安全对象的权限详见 PermissionRequirement.md功能特性需求featureHADR高可用与灾难恢复 / Always On 可用性组校验实例是否启用某项功能详见 FeatureRequirement.md服务需求serviceMSSQL、SQLAgent、MSOLAP、ReportServer、MsDtsServer、MSSQLFDLauncher、SQLBrowser校验 SQL Server 相关服务是否运行详见 ServiceRequirement.md角色需求的 JSON 写法示例要求用户同时属于bulkadmin与diskadmin角色requires: { role: [ bulkadmin, diskadmin ] }内置规则集中的VLFprobe 即使用role: sysadmin声明需求因为其查询体执行DBCC LOGINFO见 ruleset.json 第 18926 行。在自定义规则集中落地权限需求要把权限需求应用到自己的规则集中只需在自定义 ruleset 的probes部分为对应 probe 添加requires或runFor属性。仓库提供了可直接参考的完整自定义样例 MakingCustomChecks_sample.json其中展示了rules与probes两个顶级节点的完整结构内置 ruleset.json 与可读版本 DefaultRuleset.csv 则收录了数百条生产级规则的真实写法可作为命名与取值的最佳实践参考。在动手编写前建议遵循以下要点需求与查询严格对应probe 查询体访问了哪些安全对象、需要哪些权限就逐一在requires中声明对照SysAlerts与DeprecatedFeaturesJobs的写法服务器/数据库级权限省略对象名server permission、database permission不需要on子句对象级权限必须给出完整对象名建议使用[库].[架构].[对象]形式的多部分名称避免歧义区分 requires 与 runFor权限不足属于异常场景用requires保留警告特性未启用属于正常场景用runFor静默跳过先评估、后发布自定义规则集可先通过 PowerShell SqlServer 模块Install-Module -Name SqlServer -AllowClobber -Force配合 QuickStart.md 中的Get-SqlInstance -ServerInstance localhost | Invoke-SqlAssessment流程做小范围验证观察警告与跳过行为是否符合预期。小结权限需求是 SQL Assessment API 自定义规则集中最常用的前置校验手段之一它以securable_class permission [on securable_name]为名称格式以sys.fn_my_permissions为底层判定依据配合requires失败即跳过 警告与runFor失败即返回空集两种承载属性让规则集在最小权限账户、异构实例环境下依然能完整、安静、可预期地完成评估。结合 ruleset.json 中CountBlackBoxTraces、SysAlerts、DeprecatedFeaturesJobs等 probe 的真实声明你可以在自己的自定义规则集中精确复刻这一模式。赞分享示例工程数据库教程后端【免费下载链接】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 自定义探测指南用 T-SQL Probe 驱动 SQL Server 配置评估SQL Assessment API 自定义探测指南用 T SQL Probe 驱动 SQL Server 配置评估 SQL Assessment API 通示例工程数据库教程后端Langflow 核心概念指南Flow、Project、Playground 与组件一次看懂Langflow 核心概念指南Flow、Project、Playground 与组件一次看懂 Langflow 是一款开源的 AI 工作流可视化构建工具帮助示例工程数据库教程后端SQL Assessment API 实战禁用内置检查规则的自定义规则集配置指南SQL Assessment API 实战禁用内置检查规则的自定义规则集配置指南 SQL Assessment API 是官方开源的 SQL Server 最示例工程数据库教程后端上一篇突破30FPS限制Windows远程桌面60FPS流畅体验的专业优化方案下一篇如何彻底掌控你的数字记忆微信聊天记录永久备份终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网