【问题标题】:Password check-constraint SQL server密码检查约束 SQL server
【发布时间】:2015-08-07 19:21:14
【问题描述】:

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

-至少1个大写

-至少 1 个数字

-至少 5 个字符长

我已经搜索了很多,但我无法让它工作

例如,我试过这个

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

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

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

这也不起作用,我尝试了许多来自 stackoverflow 的代码 sn-ps,人们已将其标记为已回答,这让我想知道,这是我的问题还是我做错了什么?我现在很迷茫

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

这个应该不允许密码:“wefwefew123”对吧?嗯,确实如此。虽然它不接受“wefwefew”,但它确实适用于 0-9,A-Z 有什么问题?

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

【问题讨论】:

  • 您是否检查过您的表/数据库上的排序规则是否设置为区分大小写?
  • 存储密码通常是一个非常糟糕的计划——通常最好存储(加盐的)密码哈希——这意味着您不必设置最大密码长度。因此,密码策略通常在应用程序中得到更好的执行。
  • 我关注了这个stackoverflow.com/questions/3296428/…,结果是不区分大小写
  • @Damien_The_Unbeliever 是的,我打算稍后再使用它,我只是想先完成这项工作
  • @stefan 如果您稍后要对其进行哈希处理,那么将此逻辑放在数据库端是没有意义的,请将其放在您的应用程序中

标签: sql sql-server check-constraint


【解决方案1】:

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

(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'

【讨论】:

  • 我正在尝试使用大写和数字的组合,当它的唯一小写示例时,此代码接受:密码1 = 正确密码1 = 不正确密码 = 不正确
  • 在我的测试中,我在 = 中留下了道歉。本来应该是 更新的现在应该可以工作了
  • 没问题,很高兴它有帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多