当我查看sys.sql_logins时,我看到了一个名为is_policy_checked的列。我是否可以相信,对于列值为1的所有登录,都已检查了我的密码策略?
发布于 2015-04-30 15:28:56
##No。虽然文献资料目前对此标志的含义有以下含糊的说明:
检查密码策略。
它真正意味着,而且应该说,国旗有两个目的:
(请注意,“策略”还指强制过期和用户在下一次登录时必须更改密码的事实,但由于复杂性通常是审计操作的重点,我将只关注这个方面。)
is_policy_checked位在CREATE LOGIN或ALTER LOGIN事件期间被设置为1 if CHECK_POLICY = ON,即使当时没有检查策略。正如您可能从上面收集到的那样,这种检查不会在以下情况中发生:
HASHED关键字指定的(在服务器之间迁移登录或将登录复制到日志发送/镜像/ AG次要文件时,这是一种非常常见的策略)。如果您没有预散列值,显然不可能检查密码的复杂性。ALTER LOGIN,并且仍然可以更改标志(感谢@AMtwo给出了这个例子)。我怀疑这可能是聪明的人在愚弄审计师。这些问题都很容易证明。
由于我所讨论过的大多数人总是认为is_policy_checked实际上意味着当前的密码符合当前的密码策略,所以我认为重要的是在这里进行一些更改,以便使用户有正确的期望,并理解这个标志并不一定意味着一切都好。至少应该更新这些文件,以反映实际情况,就像我前面指出的那样。但也有其他的事情可以做。
CHECK_POLICY = ON,但实际上无法检查策略,则可能会引发警告(因为密码是用哈希指定的,或者因为密码策略已被禁用,或者因为该命令只是绕过或设置标志的简单尝试,例如ALTER LOGIN blat WITH CHECK_POLICY = ON;)。CHECK_POLICY,而支持ACTIVELY_CHECK_POLICY和CHECK_POLICY_ON_NEXT_CHANGE。sys.sql_logins中的列应该是policy_has_been_checked和policy_will_be_checked。我没有嫁给这些名字,但它们比目前的措辞准确得多。ACTIVELY_CHECK_POLICY = ON,并且在执行命令时无法检查策略,则应该收到错误消息,并且不应将标志设置为1 (甚至登录创建或密码更改也不会成功)。0,就可以识别这种旁路)。今天,没有可靠的方法--如果不手动将他们的密码更改为您知道是安全的--来审核您的SQL登录并确信它们都符合您的复杂性策略。在这个数据不断增加的时代,越来越多的数据被破坏,而且显然需要更加严格地保护系统,这是一个需要解决的问题。我在博客上写了这篇文章,并创建了一个连接条目:
我鼓励您对Connect项目进行投票,更重要的是,确保您不会对DDL选项和元数据的工作方式有错误的认识。
请不要把这看作是一个“非问题”,因为你对它的工作方式非常满意,并且已经知道这个标志不能被信任--你不是我担心的用户,而是其他人。
https://dba.stackexchange.com/questions/99262
复制相似问题