C:\Program Files (x86)\Microsoft SQL Server\number\Tools\Policies\DatabaseEngine\1033
我们已经在我们的每个 SQL Server 实例(此处的示例)上评估了 Microsoft“最佳实践”策略(位于)。以下问题已向我们报告:
这提供了一个指向 Microsoft 页面的链接,该页面将以下内容列为最佳实践:
不要将服务器权限授予服务器公共角色。
在审查安全性时,我们可以看到 public 角色默认具有查看任何数据库的服务器权限。我们已经运行了以下操作并重新评估了该政策,但问题仍然存在。
REVOKE VIEW ANY DATABASE TO [public] AS [sa];
此服务器角色的唯一其他权限是能够通过 TCP/VIA/命名管道/本地机器连接的端点权限。如果我们去掉这些,这个角色肯定是多余的。
问题
- 我们应该担心这个吗?这是我们真的应该解决的问题吗?
- 我们还需要做些什么来正确解决这个问题?
- 这样做或不这样做有什么影响吗?
是的,你应该解决这个问题。如果您在服务器中有多个数据库,则一个数据库中的合法用户可能与另一个数据库无关,并且不会是该数据库中的用户,因此不是“公共”用户。为什么要授予公共用户权限以查看/访问他们无权访问的数据库中的对象?
确保在修复这些问题后测试应用程序。有时,即使是合法用户也可能缺少适当的授予权限,并且可能一直基于公共访问权限工作,这在您修复“公共”角色访问权限后将无法正常工作。它们需要通过授予 stmt 对特定对象或通过数据库角色或通过用户角色授予显式访问权限。
当从公共服务器角色撤消“查看任何数据库”权限时,登录无法通过查询
select * from sys.databases
(除master
andtempdb
)再查看数据库,但他们可以通过以下查询轻松规避此撤消:因此,“最佳实践”听起来不错,但毫无价值。