Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle中至少包含两个大写和两个小写字母的密码正则表达式_Sql_Oracle_Oracle18c_Oracle Xe 18.4 - Fatal编程技术网

Sql Oracle中至少包含两个大写和两个小写字母的密码正则表达式

Sql Oracle中至少包含两个大写和两个小写字母的密码正则表达式,sql,oracle,oracle18c,oracle-xe-18.4,Sql,Oracle,Oracle18c,Oracle Xe 18.4,我在oracle 18 xe中对数据库执行约束时遇到问题 我需要的是密码已被修改 至少5个字符 至少两个大写字母 至少两个小写字母 至少一位数字 我已经做了足够多的搜索,但找不到正确的方法,到目前为止我穿这个 ALTER TABLE USER ADD CONSTRAINT PASSWORD_CHECK REGEXP_LIKE(PASSWORD, '^.*[0-9]', 'c') AND REGEXP_LIKE(PASSWORD, '^.*[A-Z]{2,}', 'c'); AND REG

我在oracle 18 xe中对数据库执行约束时遇到问题

我需要的是密码已被修改

  • 至少5个字符
  • 至少两个大写字母
  • 至少两个小写字母
  • 至少一位数字
我已经做了足够多的搜索,但找不到正确的方法,到目前为止我穿这个

ALTER TABLE USER 
ADD CONSTRAINT  PASSWORD_CHECK
REGEXP_LIKE(PASSWORD, '^.*[0-9]', 'c')
AND REGEXP_LIKE(PASSWORD, '^.*[A-Z]{2,}', 'c');
AND REGEXP_LIKE(PASSWORD, '^.*[a-z]{2,}', 'c');
AND REGEXP_LIKE(PASSWORD, '^[a-zA-Z0-9]{5,}$', 'c');

谢谢你的支持

唉,如果Oracle的正则表达式引擎支持lookaheads,那么您可以只使用一种模式:

^(?=.*[A-Z].*[A-Z])(?=.*[a-z].*[a-z])(?=.*[0-9]).{5,}$
但是,它不支持lookarounds,所以我们基本上坚持您当前的方法。您当前的模式有一些小问题,而且类似于的可以与部分匹配一起工作,因此在大多数情况下不需要^和$锚定。考虑这个版本:

altertable用户
添加约束密码检查
类REGEXP_(密码,[0-9],'c')--1+位
和REGEXP_LIKE(密码,[A-Z].[A-Z]','c');--2+鞋面
和REGEXP_LIKE(密码,[a-z].[a-z]','c');--2+降低
和REGEXP_LIKE(密码,^[a-zA-Z0-9]{5,}$,'c');--长度>=5
如果您没有密码只能是数字和字母的限制,则可以将最终条件替换为以下内容:

LENGTH(PASSWORD) >= 5

您可以使用
PASSWORD
列上的
notnull
CHECK
约束,如下所示:

CREATE TABLE USERS (PASSWORD VARCHAR2(10) NOT NULL); -- NOT NULL

ALTER TABLE USERS ADD CONSTRAINT PASSWORD_CHECK
CHECK (REGEXP_COUNT(PASSWORD, '[0-9]') >= 1      -- 1 digit
       AND REGEXP_COUNT(PASSWORD, '[A-Z]') >= 2  -- 2 or more uppercase characters    
       AND REGEXP_COUNT(PASSWORD, '[a-z]') >= 2  -- 2 or more lowercase characters         
       AND LENGTH(PASSWORD) >= 5);               -- minimum length must be 5

非空
密码列上的约束将是必需的,因为
检查
约束将不会应用于
值,如果未创建列上的
非空
约束,它将允许插入
值。

如果您这样做是为了学习使用ReXEP在数据库中,这是好的,但是代替存储密码或将它们发送到数据库中,请考虑在UI中散列密码,并且仅通过网络发送散列值来存储在数据库中,在用户输入上应用验证规则。这就是人们被黑客攻击的方式。即使你的问题只是为了一个作业,你也需要知道这是一个可怕的、不道德的编码实践。至少,使用像
STANDARD_HASH
这样的东西来代替明文。