默认的PUBLIC设置

有没有人知道任何安全风险与SQL 2005/8的默认PUBLIC设置?

我运行sp_helprotect并列出了公共授权,现在我有一个审计员告诉我,我有安全风险,因为PUBLIC有权访问系统信息。 在我开始介绍自己的案例之前,我想查看是否有任何人有任何链接或信息,他们可以提供详细说明如何默认设置允许安全风险。

为了logging,审计人员提到这些设置允许破解密码的能力,因为他们可以查看密码哈希值。 我一直无法validation该设置是否允许通过sys目录视图来查看该信息。

提前致谢

2000年以来,公共angular色的访问量比2005年多得多 – 这可能是审计师问题的根源。 用户/模式分离应该处理大多数问题,但是您应该使用最less的权限创build用户,并查看可以看到的内容。 你会想尝试:

master.sys.databases(以及其他任何可以提供存储在实例中的信息的信息)master.dbo.syslogins(包含密码哈希值–2000上的sysxlogins)

而且你也想改变master中的所有XP,所以公共angular色没有任何一个的执行权限。 这里有一篇文章和一段代码。

请注意,不build议以任何方式更改公共angular色本身。

希望这可以帮助!

PS如果您在syslogins表中取回密码的NULL,那是因为login不使用SQL身份validation。 仅使用Windows是消除此风险的好方法,但仍需为(已禁用)SA帐户设置密码。

这是一个BOL aritcle,解释公共angular色如何影响所有用户的元数据可见性: http : //msdn.microsoft.com/en-us/library/ms187113( SQL.90) .aspx

有些东西通常需要对每个人都可见,否则就会破坏(sys.databases就是其中的一个例子,即使它没有在这个文件中列出),由于历史原因,每个人都可以检索到服务器上所有数据库的列表,你当然可以撤销这个权限)。 当你开始撤销一些元数据的公共访问时,事情往往会变得有趣。

举个例子:如果你撤消公共权限从sys.databases中进行select,事情将会大打折扣。 正确的方法是从公共REVOKE VIEW ANY DATABASE – 然后sys.databases将被“过滤”,你将只能看到你有权限的数据库。 但它并没有给你任何真正的安全性,因为任何人都可以通过SELECT DB_NAME(X)并为X提供任意值(这是已知的漏洞)来枚举所有数据库。

就口令而言,在SQL2005和SQL 2008的默认configuration中,通过公共angular色,您只能通过sys.syslogins看到两个login名:你自己和sa。 而且你也不会看到任何一个密码散列。 所以通过这种方式获取散列值并不是一种select。 而破解这些哈希值无论如何都需要蛮力的方法,所以它只适用于弱密码或字典密码。

我与审计师的经验是,他们倾向于对公共权限这样的小事情模糊不清,但却错过了大事情。 因人而异。

HTH