我有一组 5 名开发人员,他们需要能够查看他们为数据库编写的查询计划,并且仅限于该数据库。我拒绝让他们成为系统管理员的成员。我不希望他们能够在此服务器上运行跟踪,也不希望他们能够运行 dmv。
这 5 个开发人员是一个 windows 组的成员。我已让他们成为 db_owner 的成员。
这是我发现的:
- 尝试查看 SHOWPLAN 输出时,拒绝服务器权限 ALTER TRACE 的服务器主体将遇到错误 262
- 即使数据库主体具有 GRANT for SHOWPLAN 数据库权限,也会发生这种情况
- 发生这种情况是因为 ALTER TRACE 权限隐含了 SHOWPLAN 权限
- 如果数据库主体是数据库所有者,则不会发生这种情况
- 具有 GRANT 的服务器权限 ALTER TRACE 的服务器主体将能够获得 SHOWPLAN 输出,而无需为单个数据库显式授予 SHOWPLAN
只有 sysadmin 并且如果您映射到 db 中的 dbo 用户名,它不会执行检查。
有没有办法让这些开发人员能够在没有系统管理员角色或授予更改跟踪或授予查看服务器状态的情况下查看计划的能力?
DENY 胜过 GRANT,所以是的,如果您明确拒绝他们更改跟踪的能力,您就不能让人们查看计划。但仅仅因为您没有拒绝一项权利并不意味着它已被授予。
此示例显示您的数据库用户可以在已被授予(并且未添加到角色)的数据库中运行查询并收集执行计划,
SHOWPLAN
只要db_owner
服务器级登录没有被明确拒绝ALTER TRACE
.它还表明,除非您明确授予任何与跟踪相关的权限,否则他们将无法读取跟踪数据,甚至无法判断是否有跟踪正在运行,除非他们以其他方式继承了这些权限( Windows 组、服务器角色等)。因此,您无需显式拒绝
ALTER TRACE
以保护这些用户的跟踪数据 - 请注意,他们可以在没有显式授权的情况下继承它。