我希望为我的SQL Server数据库创建三个单独的检查约束,以确保密码字段至少约束一个数字,一个大写字符和一个特殊字符。
我认为最好的方法是创建单独的检查约束,例如我创建了以下约束以确保密码长度最小为8
(len([password]) <= (8))
是否有人建议建立所需验证的方法。
谢谢
答案 0 :(得分:2)
您可以使用一个约束来执行此操作,例如:
check password like '%[0-9]%' and password like '%[A-Z]%' and password like '%[!@#$%a^&*()-_+=.,;:'"`~]%' and len(password) >= 8
关于大写比较的注释:这要求使用的排序规则区分大小写。您可能需要在比较中指定显式COLLATE
,以确保它区分大小写。
答案 1 :(得分:0)
我直接不知道你的问题的答案,但经过一些研究我发现了这个方法:
1)检查给定的字符串是否包含大写字符
SELECT CASE WHEN BINARY_CHECKSUM([password]) = BINARY_CHECKSUM(LOWER([password])) THEN 0 ELSE 1 END AS DoesContainUpperCase
GO
来源:http://www.sqlservercentral.com/Forums/Topic800271-338-1.aspx
2)检查给定的字符串是否包含至少一个特殊字符
我们可以简单地说明
IF ([password] LIKE '%[^a-zA-Z0-9]%')
来源:How to detect if a string contains special characters?
我希望我的回答对你有帮助。 亲切的问候,
拉法尔
答案 2 :(得分:0)
我必须删除特殊字符集合中的'a'并添加上述排序规则。感谢您的帮助!
([password] like '%[0-9]%' AND [password] like '%[A-Z]%' collate Latin1_General_BIN2 AND [password] like '%[!@#$%^&*()-_+=.,;:~]%' AND len([password])>=(8))