检查约束 - 检查密码包含至少一个数字/特殊字符/大写

时间:2014-04-20 14:37:42

标签: sql sql-server check-constraint

我希望为我的SQL Server数据库创建三个单独的检查约束,以确保密码字段至少约束一个数字,一个大写字符和一个特殊字符。

我认为最好的方法是创建单独的检查约束,例如我创建了以下约束以确保密码长度最小为8

(len([password]) <= (8))

是否有人建议建立所需验证的方法。

谢谢

3 个答案:

答案 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))