You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在SSMS中让测试用户仅可见有权限数据库且不设为db_owner

解决SQL Server测试用户仅可见授权数据库且无db_owner权限的方案

嗨,我来帮你搞定这个问题!你遇到的情况在SQL Server权限配置里挺典型的——既要让测试用户只看到自己有权限的数据库,又不想给他们风险极高的db_owner权限,之前用DENY VIEW ANY DATABASE导致完全看不到库,是因为权限逻辑没理顺,咱们一步步来调整:

第一步:撤销之前的DENY权限

首先得把之前的拒绝操作撤销掉,因为DENY的优先级最高,会覆盖所有允许的权限,导致用户连授权的库都看不到。执行这条语句:

REVOKE VIEW ANY DATABASE TO [你的测试用户名];
GO

第二步:给用户授予数据库的必要权限(替代db_owner)

根据测试用户的实际需求,给他们授予更精细的权限,比如只读+读写权限,而不是万能的db_owner

USE [目标数据库名];
GO
-- 授予读取数据权限
ALTER ROLE db_datareader ADD MEMBER [你的测试用户名];
-- 授予写入数据权限
ALTER ROLE db_datawriter ADD MEMBER [你的测试用户名];
GO

如果用户还需要执行存储过程或者做一些DDL操作,可以额外添加对应的权限,比如:

-- 授予执行存储过程权限
GRANT EXECUTE ON DATABASE::[目标数据库名] TO [你的测试用户名];
-- 或者授予有限的DDL权限(比如创建表)
ALTER ROLE db_ddladmin ADD MEMBER [你的测试用户名];
GO

按需选择就行,尽量遵循最小权限原则。

第三步:让用户能看到该数据库

默认情况下,没有VIEW ANY DATABASE权限的用户,只能看到自己是db_owner的数据库,或者被明确授予了VIEW DEFINITION权限的数据库。所以咱们给目标数据库加上这个权限:

USE [目标数据库名];
GO
GRANT VIEW DEFINITION ON DATABASE::[目标数据库名] TO [你的测试用户名];
GO

第四步:验证效果

让测试用户重新登录SSMS,刷新数据库列表,现在应该只能看到你授权的那个数据库了,而且用户的权限是你刚才配置的有限权限,再也不会拥有db_owner的全部控制权啦!

补充说明

之前你给用户db_owner权限时能看到库,是因为db_owner角色默认包含了数据库的VIEW DEFINITION权限,但这个角色的权限实在太大(能修改数据库结构、删除数据、管理用户等等),完全不适合测试用户。咱们上面的配置既实现了“仅可见授权库”的需求,又兼顾了安全性。

内容的提问来源于stack exchange,提问作者kevorski

火山引擎 最新活动