【问题标题】:Min SQL user privilege to query sys.objects and sys.partitions in Azure SQL在 Azure SQL 中查询 sys.objects 和 sys.partitions 的最低 SQL 用户权限
【发布时间】:2025-12-24 22:55:06
【问题描述】:

我希望有一个 SQL 用户可以执行以下 SQL,但不能读取其他模式的内容。

什么是最好的实施方式?

SELECT (Schema_name(A.schema_id) + '.' + A.NAME ) AS TableName,
       Sum(B.rows) AS RecordCount
FROM sys.objects A
         INNER JOIN sys.partitions B
                 ON A.object_id = B.object_id
WHERE A.type = 'U'
GROUP BY A.schema_id, A.NAME 

【问题讨论】:

  • 无法读取其他模式的内容是什么意思,例如dbo 模式上的对象?
  • 创建一个运行该 SQL 的存储过程。然后授予用户对该单个存储过程的执行权限。
  • sys.objects 已被过滤为用户拥有(某些)权限的对象,因此防止他们在其他模式中看到任何内容的最佳方法是确保他们对这些模式中的对象没有权限(或架构本身)。

标签: sql-server azure-sql-database


【解决方案1】:

对于列,与对应的对象级权限不同的每个权限都有一行。如果列权限与对应的对象权限相同,则没有行,申请的权限就是对象的权限。

注意:列级权限覆盖对象级权限 同一个实体。

指定可以在架构上授予的权限。 Here.

在极少数情况下,结合 ALTER 和 REFERENCE 权限可能会允许被授权者访问数据或执行禁止的操作。例如,具有表的 ALTER 访问权限和函数的 REFERENCE 权限的用户可以在函数上构建和执行计算列。在这种情况下,用户还必须对计算列具有 SELECT 权限。

【讨论】: