Проверьте ограничение - проверьте, что пароль содержит как минимум одно число / специальный символ / заглавные буквы

Я пытаюсь создать три отдельных проверочных ограничения для моей базы данных SQL Server, чтобы гарантировать, что поле пароля ограничивает минимум одно число, один символ в верхнем регистре и один специальный символ.

Я считаю, что лучший способ подойти к этому - создать отдельные проверочные ограничения, например, я создал следующее ограничение, чтобы гарантировать, что длина пароля составляет минимум 8

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

Может ли кто-нибудь предложить способ установить требуемую проверку.

Спасибо

2 ответа

Решение

Вы можете сделать это с одним ограничением, что-то вроде:

check password like '%[0-9]%' and password like '%[A-Z]%' and password like '%[!@#$%a^&*()-_+=.,;:'"`~]%' and len(password) >= 8

Просто примечание о сравнении в верхнем регистре: для этого необходимо, чтобы используемые параметры сортировки учитывали регистр. Вам может потребоваться указать явный COLLATE в сравнении, чтобы быть уверенным, что он чувствителен к регистру.

Мне пришлось удалить букву "а" в наборе специальных символов и добавить упомянутую выше подборку. Спасибо за вашу помощь!

([password] like '%[0-9]%' AND [password] like '%[A-Z]%' collate Latin1_General_BIN2 AND [password] like '%[!@#$%^&*()-_+=.,;:~]%' AND len([password])>=(8))

Я не знал ответа на ваш вопрос напрямую, но после некоторых исследований я нашел следующие методы:

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]%')

Источник: Как определить, содержит ли строка специальные символы?

Я надеюсь, что мой ответ помог вам. С уважением,

Рафал

Другие вопросы по тегам