SQL server数据库本身没有密码复杂度策略设置,它是使用Windows操作系统的校验函数来校验账户密码的,所以查看SQL server数据库密码复杂度需要结合操作系统本地安全策略的密码策略来看。

下面实验一下,实验环境是在Windows server 2008虚拟机上装了SQL server20008数据库。

一、设置SQL server的密码复杂度策略

首先禁用服务器密码策略

 

 

 

使用sa账户登录SQL server,打开安全性-登录名-右键-输入登录名test,选择SQL server身份验证,输入密码“123”(此时勾选了强制实时密码策略),点击确定

 

 

 可以成功创建了test账户,并且设置了弱口令“123”,然后右键test账户看一下属性。

下图中显示test账户勾选了强制实施密码策略,密码位置:显示15个圈,是看不出弱口令的。

 

 

 用弱口令登录test账户也是没有问题的

 

 

 

 

 

 然后开启服务器密码策略,使用管理员sa新建一个弱口令账户

 

 

 依然使用sa账户登录SQL server,打开安全性-登录名-右键-输入登录名test1,选择SQL server身份验证,输入密码“123”(此时勾选了强制实施密码策略),点击确定

 

 

 此时数据库报错提示“密码有效性验证失败,该密码不够复杂,不符合Windows策略要求”,证明了开启服务器密码策略并勾选账户强制实施密码策略,是有效果的。

 

 

但我看了一下Windows操作系统的密码策略也是挺下饭-..-最少六个字符长!!

 

 

就是说即使开了密码策略,还可以将密码设置为Qwe!23的六位数

如果想要设置密码最小长度的话,在服务器密码策略上修改就可以了

 

 

 最后试一下开启Windows操作系统密码策略,不勾选数据库账户的强制实施密码策略,看看能不能,设置弱口令

 

 

 

 

 

 果然结果是可以的。

总结一下就是SQL server密码策略要同时满足开启Windows密码策略并且勾选SQL server账户的强制实施密码策略才算是符合,但即使这样的话一样可以设置6位长度的口令,所以还要设置服务器的密码最小长度值。

 

二、设置SQL server的账户锁定策略

SQL server的账户锁定策略原理也是一样的,都是参照Windows操作系统的校验函数来校验的,所以需要勾选账户的强制密码过期,并且开启操作系统的账户锁定策略。

然后我试了一下:

 

 

 1、只勾选数据库强制密码过期,不设置操作系统密码锁定策略

测试同一个账户输错10次密码,再输入正确直接进入数据库,账户没有被锁定

 

 

 

 2、勾选数据库强制密码过期,设置操作系统密码锁定策略

 输错三次密码,再输入正确密码,无法进入数据库,账户被锁定

 

 

 

3、取消数据库强制密码过期,设置操作系统密码锁定策略

此时使用同一个账户输错10次密码,再输入正确可以直接进入数据库,账户没有被锁定

 

总结:勾选数据库强制密码过期,设置操作系统密码锁定策略