如何在Azure SQL中隐藏数据库?DENY命令报错无法生效的问题
解决Azure SQL中普通登录可见其他数据库的问题
问题原因
Azure SQL Database(单数据库/弹性池模式)不支持服务器范围的VIEW ANY DATABASE权限操作,这就是执行DENY VIEW ANY DATABASE TO [PUBLIC]/[USER1]时报错'Securable class 'server' not supported in the server scope in this version of SQL Server.'的原因。它的权限模型与本地SQL Server存在差异,无法直接在服务器级别批量隐藏所有数据库。
解决方案
要让USER1看不到DATABASE2,需在master数据库中针对单个数据库执行权限限制,操作步骤如下:
- 以系统管理员身份连接到Azure SQL服务器的master数据库
- 执行以下命令,拒绝USER1查看DATABASE2的元数据:
DENY VIEW DEFINITION ON DATABASE::DATABASE2 TO [USER1]; - 再执行撤销默认权限的命令,确保权限彻底生效:
REVOKE VIEW DEFINITION ON DATABASE::DATABASE2 TO [USER1];
完成后,USER1再次连接服务器时,将无法枚举或看到DATABASE2。若需对多个数据库执行此限制,只需替换命令中的DATABASE2为对应数据库名称,重复操作即可。
内容的提问来源于stack exchange,提问作者silverbackbg
相关产品推荐
相关产品推荐

