Azure SQL中查询sys.objects、sys.partitions的最低用户权限配置方法
SQL Server 受限统计用户最优实现方案
我们采用存储过程封装+最小权限分配的方案实现需求,既满足统计需求,又严格限制用户权限范围,完全符合最小权限原则。
实现步骤
- 第一步:在目标业务库中创建封装统计逻辑的专用存储过程,直接内置你需要执行的查询语句
CREATE PROCEDURE dbo.GetTableRecordCount WITH EXECUTE AS OWNER -- 执行时使用存储过程所有者权限,无需给用户开放底层对象权限 AS BEGIN SET NOCOUNT ON; 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' -- 如果需要只开放指定schema的统计,可额外加过滤条件,例如: -- AND Schema_name(A.schema_id) = '业务Schema名' GROUP BY A.schema_id, A.NAME; END GO
- 第二步:创建对应的SQL登录和数据库用户(如果已存在可跳过)
-- 创建服务器登录,自行替换强密码 CREATE LOGIN TableStatsUser WITH PASSWORD = '自定义强密码'; GO -- 切换到目标业务库 USE 你的业务库名称; GO -- 创建数据库用户映射到登录 CREATE USER TableStatsUser FOR LOGIN TableStatsUser; GO
- 第三步:仅给用户授予该存储过程的执行权限,无需分配任何其他权限
GRANT EXECUTE ON dbo.GetTableRecordCount TO TableStatsUser; GO
方案优势
该方案权限控制粒度极细:用户除了执行存储过程获取表行数统计结果之外,没有任何额外权限,既无法读取任意用户表的实际业务数据,也不能直接查询系统视图获取其他未授权信息,实现成本极低,安全性最高。
内容的提问来源于stack exchange,提问作者Kenny_I
相关产品推荐
相关产品推荐

