【发布时间】: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