如何让登录的Longin链接SQL SERVER时,在数据库中只能看到有权限的数据库

一般情况下,在sql server中创建的Login,不管权限大小,都是可以看到其所在sql server中所有的数据库,可以通过以下T-SQL验证

IF EXISTS (SELECT * FROM sys.server_principals sp  WHERE name = 'test')  
   DROP LOGIN test  
GO  

CREATE LOGIN test WITH PASSWORD = 'test' 

GO   

--检查test是否有查看任何数据库以及连接SQL SERVER的权限  
 EXECUTE AS Login = 'test' 
 SELECT SUSER_NAME() LoginName,USER_NAME() DBUserName  

            ,HAS_PERMS_BY_NAME(null,null,'VIEW ANY DATABASE') HasViewAnyDB  

           ,HAS_PERMS_BY_NAME(null,null,'CONNECT SQL') HasConnectSQL  
 REVERT 
View Code

不要把Login映射到数据库上,选择数据库属性,修改所有者为该Login,在执行

USE master 

GO 

  

DENY VIEW ANY DATABASE TO test
 GO 


需要注意的是用该Login登录SQL,是SA的权限,权限管控部分暂时没有找到管控的方法

原文地址:https://www.cnblogs.com/Fly446854715/p/4260535.html