如何创建仅可查看及读取指定数据库的SQL登录账号
如何让SQL Server登录账号仅可见授权的数据库
要实现登录账号仅能看到被允许读取的数据库,核心是调整数据库可见性权限——默认情况下所有登录账号通过public角色拥有VIEW ANY DATABASE权限,这会让他们看到服务器上所有数据库。具体操作步骤如下:
1. 创建目标登录账号(若尚未存在)
CREATE LOGIN [LimitedReader] WITH PASSWORD = 'YourStrongPasswordHere', CHECK_EXPIRATION = ON;
2. 撤销全局数据库可见权限
先移除该登录账号的VIEW ANY DATABASE权限,避免它看到所有数据库:
REVOKE VIEW ANY DATABASE TO [LimitedReader];
注意:如果
public角色本身被授予了VIEW ANY DATABASE权限(默认配置),你也可以选择撤销public的这个权限,但这会影响所有未单独授权的登录账号,需谨慎操作:REVOKE VIEW ANY DATABASE FROM PUBLIC;
3. 在目标数据库中创建用户并授予读取权限
以你想让用户访问的TargetDB为例,创建对应的数据库用户并加入db_datareader角色:
USE [TargetDB]; CREATE USER [LimitedReader] FOR LOGIN [LimitedReader]; ALTER ROLE db_datareader ADD MEMBER [LimitedReader];
4. 授予目标数据库的可见权限
最后给登录账号授予目标数据库的VIEW DEFINITION权限,这样它就能在SSMS或其他工具中看到这个数据库:
GRANT VIEW DEFINITION ON DATABASE::[TargetDB] TO [LimitedReader];
完成以上操作后,LimitedReader登录后只会看到TargetDB,其他数据库会被隐藏。需要注意:如果登录账号属于sysadmin等高权限角色,这些限制会失效,因为高权限角色拥有所有数据库的访问和可见权限。
内容的提问来源于stack exchange,提问作者ksaliya
相关产品推荐
相关产品推荐

