这个问题指出,各种 DMV(动态管理视图)都需要“查看服务器状态”权限,但我找不到任何关于你做什么和不想授予权限的信息。
现在我当然了解“最少权限”,以及为什么您不想将其授予任何人,但我找不到任何关于如何评估是否应该授予它的指导。
所以,我的问题是:授予用户“查看服务器状态”权限的安全性和性能影响是什么。他们能做什么,他们可能不应该被允许做......
更新:一个暗示是用户将能够使用 DMV 来查看查询。如果查询或查询参数可能包含用户无法看到的机密信息,则允许查看服务器状态将允许他们这样做(即 dob = 或 ssn =)。
授予此权限后,我不会想到任何重大的性能问题。从安全的角度来看,您冒着让用户看到您的弱点的最详细信息的风险,例如,恶意用户可以查看您最常见的等待统计信息,这可以帮助他们针对您的服务器进行 DoS 攻击.
这可能吗?确实。这可能吗?我不得不说不,但请记住,据估计,针对公司的攻击中有 90% 来自内部攻击者。
作为管理员,您会将此信息视为在您的域中(性能/索引使用等),但有潜在的令人信服的原因是开发组织希望将这些信息用于他们支持的大型遗留系统 - 识别仅被触及的僵尸表例如,通过维护过程。
最后,它总是最终成为“运气和慷慨”的问题,因为关于任何特定请求是否合理的呼吁最终成为一个软选择,而不是一个明确的公式。在不考虑上下文的情况下使用最佳实践模式本身就是一种非常讨厌的反模式,而现实是许多人以“与手交谈”作为起点来接近他们的立场。
关于性能影响,我不知道对此或任何其他许可有任何影响。
关于:
简而言之,他们可以看到他们可能不应该看到的东西。不要仅仅从 SQL Server 的角度来考虑这一点。此特定权限还管理 DMV,例如sys.dm_os_sys_info和许多其他提供对主机(硬件、服务等)的洞察的权限。你并不总是知道哪些信息可以用来对付你。而且,即使您现在对某人看到此权限允许的所有内容感到满意,有时 DMV 会添加到服务包/累积更新中,因此可能会暴露您不知道的新信息。
既然您已经提到给人们所需的最低权限,那么这实际上归结为:是否有人需要此权限才能临时使用?意思是,是否有人需要灵活地提出自己的查询?创建一个或多个存储过程和/或多语句 TVF 会起作用吗?如果是这样,那么您不需要向任何用户授予权限(然后他们可以自由地使用该权限所允许的任何内容),而是您将权限授予代码(它只执行它被编码的操作)。模块签名是您完成此任务的方式。一般概念是:
EXECUTE
执行这些操作所需的任何用户和/或角色ADD SIGNATURE
)[master]
数据库(即[master]
使用用于签署模块的证书的公钥创建证书。[master]
有关一些示例,请参阅:
如何维护跨域的数据库所有权恢复?
无需将高级权限授予任何人即可安全轻松地使用高级权限:服务器级
这是一个安全问题。如果你遵循最小特权原则,你永远不会出错。换句话说,如果身份验证主体不需要特定权限,则不要将其提供给他们。您是否将有关您门上锁类型的信息提供给不需要了解您房屋的其他人?我希望不会。他们可能不会做任何事情,但仍然不谨慎。
如果我们基于运气和慷慨的数据原则,我们会更频繁地遇到更大的麻烦。安全性是一个方面,只有当您可以捍卫您授予的原因时,您才应该授予。 你只是给某人提供了比他们需要知道的更多的信息。不要这样做。服务器状态仍然敏感。