密码检查约束 SQL 服务器

Password check-constraint SQL server

我正在尝试创建必须包含的密码约束:

-至少 1 个大写

-至少1个号码

-至少5个字符长

我已经搜索了很多,但就是无法正常工作

例如,我试过这个

(len([PASSWORD])>(5) AND [PASSWORD] like '%[0-9]%' AND [PASSWORD] like '%[A-Z]%')

现在,如果密码包含数字,它会接受它,但当密码根本不包含大写字母或仅包含大写字母时,它也会接受它,这让我很困惑,我尝试了很多组合

[password] LIKE '%[^a-zA-Z0-9]%'

这也没有用,我尝试了很多来自 Whosebug 的代码片段,人们将其标记为已回答,这让我想知道,这是我的问题还是我做错了什么?我现在很困惑

(len([PASSWORD])>(5) AND [PASSWORD] like '%[A-Z]%' AND [PASSWORD] like '%[0-9]%')

这个应该不允许密码:"wefwefew123"对吗?好吧,确实如此。但它不接受 "wefwefew",所以它确实适用于 0-9,A-Z 有什么问题?

这可能是一个愚蠢的错误,之后我可能会觉得自己很愚蠢,但我无法自己解决,请记住我不是专业人士 ;)

尝试使用区分大小写的排序规则来帮助您解决问题,并将密码与小写版本进行比较,如下所示,使用您的代码:

(len([PASSWORD])>(5) AND [PASSWORD] like '%[0-9]%' 
AND [PASSWORD] <> Lower([PASSWORD]) COLLATE Latin1_General_CS_AI)

或者我自己的例子是这样的:

Declare @Password varchar(20) = 'Hello'
if @Password <> Lower(@Password) COLLATE Latin1_General_CS_AI
    PRINT 'Upper'
else
    PRINT 'lower'