PD:有些名字是西班牙语的,对不起。
我有一个包含列Usuario
和Contraseña
的表。
对于每一个,都需要确定:登录用户(在系统和标识中是唯一的(和访问密码(必须包含5个字母和2个数字,确切长度为7(。考虑登录名必须有正好10个字符的
创建的表格如下:
CREATE TABLE Empleado
(
Usuario varchar(10) NOT NULL UNIQUE
CHECK(LEN([Usuario]) = 10),
Contraseña varchar(7) NOT NULL
CHECK (LEN([Contraseña]) = (7) AND [Contraseña] LIKE '%[0-9]%' AND [Contraseña] LIKE '%[A-Z]%')
)
数据是这样插入的:
INSERT INTO Empleado (Usuario, Contraseña)
VALUES ('santiago21', 'qwerty1')
INSERT INTO Empleado (Usuario, Contraseña)
VALUES ('FaaacuuUwU', 'qwertY1')
问题是第二个插件应该接受它,但第一个插件不应该接受,这是它不做的。
有人知道我该怎么做吗?非常感谢。
我们可以在这里利用SQL Server增强的LIKE
运算符:
CREATE TABLE Empleado (
Usuario varchar(10) NOT NULL UNIQUE CHECK(LEN([Usuario]) = 10),
Contraseña varchar(7) NOT NULL CHECK (
LEN([Contraseña]) = 7 AND
[Contraseña] LIKE '%[0-9]%[0-9]%' AND -- 2 numbers
[Contraseña] LIKE '%[A-Za-z]%[A-Za-z]%[A-Za-z]%[A-Za-z]%[A-Za-z]%') -- 5 letters
)
);
编辑:
通常,您应该而不是在数据库中存储明文密码。原因是,如果任何人(内部或外部(能够访问您的Empleado
表,他们将能够访问整个系统中的每个凭据。
相反,更安全的方法是首先不可逆地散列每个密码,然后存储散列。然后,在不太可能的情况下,不受欢迎的人可能会访问你的表,他们不会得到密码,只是带有一些胡言乱语的密码散列的用户名,他们无法轻易地恢复到原始密码。