一般情况下,在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
不要把Login映射到数据库上,选择数据库属性,修改所有者为该Login,在执行
USE master GO DENY VIEW ANY DATABASE TO test GO
需要注意的是用该Login登录SQL,是SA的权限,权限管控部分暂时没有找到管控的方法