我想授予我们的团队成员必要的权限,以使用 Azure SQL 数据库的查询性能洞察功能,包括查看长时间运行的查询的查询文本的可能性。
他们已经具有“读者”和“监控贡献者”角色,因此他们可以访问 Azure 门户中的查询性能洞察功能并查看长时间运行的查询的 ID。但是,当他们单击长时间运行的查询时,他们看不到查询文本。显示错误,指示“运行查询时连接超时”。
如果我为他们分配“SQL DB 贡献者”角色,他们将能够使用该功能,但他们也可以更改数据库设置,例如定价层,这是我不想要的。
有满足我需要的角色分配吗?
我认为您需要创建一个 Azure 自定义角色,如 https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles 中所述。
您可以从 Reader 开始,然后添加您想要的权限,或者从 SQL DB Contributor 开始,然后删除您不需要的权限。 这需要实验。
从您的订阅中创建一个新的自定义角色:
然后从该角色中,您将添加或排除权限:
我感兴趣的权限是:
列出查询存储文本 - 用于添加到阅读器
和更新数据库 - 用于从数据库贡献者中排除
完成后,您将转到包含数据库的服务器的访问控制边栏选项卡,然后使用新的自定义角色添加用户。测试、调整、重复,直到获得所需的安全配置文件。您使用哪个角色作为基础取决于您希望采用的最小权限安全模型的接近程度。
编辑: 确定分配权限的一种可能方法是:
添加@WaitingForGuacamole 的答案:我们最终创建了一个包含
Microsoft.Sql/servers/databases/queryStore/write
和 Microsoft.Sql/servers/databases/topQueries/queryText/action
的自定义角色定义。将此自定义角色定义分配给已在 Azure SQL Server 上拥有 Reader
角色的团队成员,然后允许他们在 Query Performance Insight 中查看查询文本。
实际的两个权限是由一位非常乐于助人的 Azure 支持工程师向我们提供的。 YMMV,它也可能仅适用于
Microsoft.Sql/servers/databases/topQueries/queryText/action
(除了读取权限之外),如 Azure Docs Github 问题 所示。然而,支持工程师确信我们还需要 Microsoft.Sql/servers/databases/queryStore/write
,但我们没有跟进研究原因。
请在下面找到可用于自定义
SQL Reader
角色的操作
"Microsoft.Sql/*/read",
"Microsoft.Sql/servers/databases/queryStore/read",
"Microsoft.Sql/servers/databases/queryStore/queryTexts/read",
"Microsoft.Sql/servers/databases/topQueries/queryText/action",
"Microsoft.Insights/metrics/read",
"Microsoft.Insights/metricDefinitions/read",
"Microsoft.ResourceHealth/availabilityStatuses/read"
此集允许用户通过查询文本读取所有 SQL 资源、其指标和查询性能洞察,而无需任何写入操作。必须显式列出像
Microsoft.Sql/servers/databases/queryStore/read
这样的操作,因为 Microsoft.Sql/*/read
不足以查看查询文本,尽管将其包含在范围中。