【发布时间】:2019-08-13 13:11:27
【问题描述】:
我正在为我的 Web 应用程序上的用户注册创建一个新的存储过程。我需要验证用户密码的格式为:
- 必须至少包含一个数字或字母
- 必须至少包含一个特殊字符 我需要设法使用正则表达式来编写它。
这是针对我在 SQL Server 2017 中创建的新数据库。我的数据库可以正常工作,我的电子邮件验证也可以正常工作。
IF (@password NOT LIKE '%[a-zA-Z0-9]%' OR @password NOT LIKE '%~!@#$%^&*()_+-={}[]:"|\;,./<>?''%' OR LEN(@password) < 8)
BEGIN
SET @message = 'Invalid credentials'
RETURN;
END
ELSE
SET @message = 'Success'
RETURN;
END
这是我到目前为止的代码,老实说,我尝试了很多组合,但仍然没有。
我希望像 !Password123 这样的密码的输出是 Success 但我仍然得到“Invalid credentials”和像 Password123 这样的密码!我仍然收到“Invalid credentials”
【问题讨论】:
-
SQL Server 不支持正则表达式。它有一些 REGEX LIKE 功能。这可以在很长的时间内在数据库中完成,但最好在应用程序端完成。
-
如果您尝试在 RDBMS 中验证密码,则将其作为纯文本传递给 RDBMS;从而造成巨大的安全风险。在密码获取数据库附近的任何地方之前,它应该已经被加盐和散列。将纯文本密码传递给 RDBMS 将允许任何可以执行跟踪或使用扩展事件来拦截这些值的人。即使是
sysadmin也不应该能够找出用户的密码。 -
实际上,如果您编写 CLR proc,您可以在 SQL Server 中使用 REGEX。但我同意 Larnu 的观点,即数据库不是检查业务逻辑的地方。
标签: sql sql-server regex passwords