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次密码,再输入正确可以直接进入数据库,账户没有被锁定
总结:勾选数据库强制密码过期,设置操作系统密码锁定策略