Azure SQL Server:如何隐藏无权限用户可见的架构列表?
解决Azure SQL Server隐藏无权限架构列表的问题
要让用户只能看到自己有权访问的架构,核心是利用SQL Server系统视图的权限过滤机制,调整角色和用户的权限:
- 撤销public角色对sys.schemas的SELECT权限
默认情况下,public角色拥有sys.schemas的SELECT权限,这会让所有用户看到所有架构的列表。执行以下语句撤销该权限,触发系统视图的权限过滤:
REVOKE SELECT ON sys.schemas TO public;
- 授予用户目标架构的VIEW DEFINITION权限
确保用户能看到自己有权访问的架构,给用户授予目标架构的VIEW DEFINITION权限(如果之前没设置的话):
GRANT VIEW DEFINITION ON SCHEMA::dbo TO someuser;
- (可选)针对多架构场景批量处理
如果有多个需要授权的架构,或者需要批量拒绝其他架构的权限,可以用动态SQL生成语句。比如批量拒绝用户对非dbo架构的VIEW DEFINITION:
DECLARE @sql NVARCHAR(MAX) = N''; SELECT @sql += N'DENY VIEW DEFINITION ON SCHEMA::' + QUOTENAME(name) + N' TO someuser;' + CHAR(13) FROM sys.schemas WHERE name NOT IN ('dbo'); -- 替换成你的授权架构列表 EXEC sp_executesql @sql;
执行完这些操作后,用户someuser就只能看到dbo架构,其他无权限的架构会被隐藏。
注意:撤销public角色的sys.schemas权限会影响所有用户,如果其他用户需要查看所有架构,可以单独给他们授予SELECT ON sys.schemas权限或者VIEW ANY DEFINITION服务器级权限。
内容的提问来源于stack exchange,提问作者Lev Gelman
相关产品推荐
相关产品推荐

