首先,在实例级,有一个 view any database的这个属性,打开时可以看到所有数据库的元数据表,因此能看到实例下所有数据库的名字。默认public角色拥有这个属性。所以新建的登陆是可以看到所有的数据库的,只是没有对应权限的打不开而已。
如果拒绝view any database权限,那么对应的登陆只能查看 master、tempdb 以及所拥有的数据库的元数据。
所以,要实现sqlserver客户端连接只显示特定数据库,将数据库的所有者改为需要设定的登陆,然后拒绝此登陆的view any database的权限即可。
需要注意的是:这种方法只能设定一个登陆有这种权限,因为一个数据库只能有一个所有者。