使用 MS SQL 的表中的用户名和密码字段的约束



我希望对我的表"管理员"中的密码字段进行约束。我想要的约束是密码不应少于 6 个字符,并且应包含混合字符(数字 + 数字)。

这个约束的关键字是什么,语法是什么。我已经谷歌了一段时间,我在我的办公室,我必须尽快完成这项任务。我正在使用MS SQL

这是我写的,

CREATE TABLE Administrators
(
 Id int NOT NULL IDENTITY(1,1) PRIMARY KEY,
 UserName varchar(255) NOT NULL,
 PassWord varchar(255) NOT NULL,
 Email varchar(255) NOT NULL
);

您可以在表上有一个检查约束,并且可以将验证逻辑封装在 UDF 中。这样,您可以随时更改逻辑。

    CREATE TABLE CheckTbl (col1 varchar(20), col2 varchar(20));
    CREATE FUNCTION CheckPassword(@pass varchar(20))
    RETURNS int
    AS 
    BEGIN
       DECLARE @retval int
        if len(@pass)>6 and PATINDEX('%[0-9]%', @pass) >0 and PATINDEX('%[a-zA-Z]%', @pass) >0
        SET @retval = 1
        else
        SET @retval = 0
       RETURN @retval
    END;
ALTER TABLE CheckTbl
ADD CONSTRAINT CheckPasswordRules CHECK (dbo.CheckPassword(col1) >= 1 );

SQL 小提琴

测试用例

insert into CheckTbl (col1, col2) values('as33dasd', '') --success
insert into CheckTbl (col1, col2) values('33sdasd', '') --success
insert into CheckTbl (col1, col2) values('sdasd22', '') --success
insert into CheckTbl (col1, col2) values('33dasd', '') --fail requires length >6

如果您绝对必须在数据库层上进行此验证,并且不在乎密码是否存储为纯文本,请使用 TRIGGER .它将使您能够最大程度地控制如何接受或拒绝密码。你也可以使用Shantanu Gupta的策略。同样,仅当您不介意以纯文本形式存储的密码时。

现在,恕

我直言,正确的做法是在应用程序的业务逻辑层中进行此验证,并将密码存储为哈希。

但是,由于您在评论中提到您不希望学习触发器如何工作或将应用拆分为逻辑层,因此您始终可以在客户端上进行验证。这是非常错误的,但如果你不愿意学习正确的做事方式,并且你可以轻松地向客户出售廉价的应用程序,那么它可能是你正在寻找的替代方案。

最新更新