我最近开始研究 SQL Server 2008 中的新策略管理,当我检查是否符合“公共未授予服务器权限”策略时,我的服务器未通过检查。原因是,我很确定这是默认设置,public 具有 TCP Endpoint 权限,以便用户可以连接到服务器。如果我要删除它,我将不得不单独为用户分配连接权。
这对我来说似乎很愚蠢。我不明白为什么微软会建议改变这个。我没有来宾帐户,所以只有指定的用户才能访问服务器。服务器在防火墙后面,甚至公司内只有一个子网可以访问它。有人对此有任何见解吗?
我最近开始研究 SQL Server 2008 中的新策略管理,当我检查是否符合“公共未授予服务器权限”策略时,我的服务器未通过检查。原因是,我很确定这是默认设置,public 具有 TCP Endpoint 权限,以便用户可以连接到服务器。如果我要删除它,我将不得不单独为用户分配连接权。
这对我来说似乎很愚蠢。我不明白为什么微软会建议改变这个。我没有来宾帐户,所以只有指定的用户才能访问服务器。服务器在防火墙后面,甚至公司内只有一个子网可以访问它。有人对此有任何见解吗?
安全最佳实践从锁定一切开始,然后只向真正需要使用它的人开放必要的部分。
通过允许“公众”访问甚至连接,不管他们无权做任何事情的事实,打开门只是一个裂缝。有时,这足以利用缓冲区溢出或其他类型的攻击。
更新
登录名和用户是两个不同的东西。登录是服务器级别的,用户是特定于数据库的。每个用户都应该有一个相应的登录名;但不是每个登录都会有一个数据库用户帐户。
假设您正在使用 Active Directory 集成安全性;并且您已经分配了一个特定的 AD 组来访问服务器。现在,只有组内的一些人可能实际上可以访问某些数据库。这些是您希望允许访问连接的人。而该组的其他成员没有常规的数据库用户帐户。
根据定义,这是一个问题,因为一些组成员可以连接并列出服务器上的数据库,即使他们无权访问这些数据库中的任何一个。这就是我所说的门上的“裂缝”。
如果您可以阻止这些人甚至无法连接,那么您在保护您的服务器方面已经走了很长一段路。
Public 角色还授予登录名的其他服务器级别权限。如果可能,您应该像关闭访客帐户一样关闭它。