Проверьте ограничение - проверьте, что пароль содержит как минимум одно число / специальный символ / заглавные буквы
Я пытаюсь создать три отдельных проверочных ограничения для моей базы данных 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]%')
Источник: Как определить, содержит ли строка специальные символы?
Я надеюсь, что мой ответ помог вам. С уважением,
Рафал