依据PASSWORD_VERIFY_FUNCTION可以设置oracle用户的密码复杂度,比如密码长度>=10,必须包含字母/数字等

首先需要创建一个密码验证的function,然后设置profile的PASSWORD_VERIFY_FUNCTION即可

SQL> select TEXT from dba_source where NAME='VERIFY_JUSTIN_USER';

TEXT

------------------------------------------------------------------------------------------------------------------------------------

FUNCTION verify_JUSTIN_user (  username VARCHAR2,

password VARCHAR2,

old_password varchar2 )

RETURN boolean

IS

passwordMinLength   INTEGER;

passwordLength      INTEGER;

differ              INTEGER;

differMinLength     INTEGER;

isDigit             BOOLEAN;

isChar              BOOLEAN;

isPunct             BOOLEAN;

digitArray          VARCHAR2(20);

punctArray          VARCHAR2(25);

charArray           VARCHAR2(52);

BEGIN

digitArray         := '0123456789';

charArray          := 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

punctArray         := '!"#$%&()``*+,-/:;<=>?_';

passwordMinLength  := 10;

differMinLength    := 2;--HAD-1

passwordLength     := LENGTH(password);

isDigit            := FALSE;

isChar             := FALSE;

isPunct            := FALSE;

-- +------------------------------------------------+

-- | Check if the password is same as the username  |

-- +------------------------------------------------+

IF NLS_LOWER(password) = NLS_LOWER(username) THEN

raise_application_error( -20001, 'Password same as or similar to user' );

END IF;

-- +-------------------------------------------------+

-- | Check that password is more than [x] characters |

-- | in length.                                      |

-- +-------------------------------------------------+

IF (LENGTH(password) < passwordMinLength) THEN

raise_application_error( -20002, 'Password must be greater than '

||

passwordMinLength

||

' characters.' );

END IF;

-- +----------------------------------------------------+

-- | Check if the password is too simple. A dictionary  |

-- | of words may be maintained and a check may be made |

-- | so as not to allow the words that are too simple   |

-- | for the password.                                  |

-- +----------------------------------------------------+

IF NLS_LOWER(password) IN (   'welcome'

, 'database'

, 'account'

, 'user'

, 'password'

, 'oracle'

, 'computer'

, 'abcd') THEN

raise_application_error(-20003, 'Password too simple');

END IF;

-- +-----------------------------------------------------+

-- | Check if the password contains at least one letter, |

-- | one digit and one punctuation mark.                 |

-- +-----------------------------------------------------+

-- +-----------------------------------------------------+

-- | (1.) Check for the digit                            |

-- +-----------------------------------------------------+

FOR i IN 1..10 LOOP

FOR j IN 1..passwordLength LOOP

IF SUBSTR(password,j,1) = SUBSTR(digitArray,i,1) THEN

isDigit := TRUE;

GOTO findchar;

END IF;

END LOOP;

END LOOP;

IF isDigit = FALSE THEN

raise_application_error(-20004, 'Password should contain at least '

||

' one digit,'

||

' one character and'

||

' one punctuation');

END IF;

-- +-----------------------------------------------------+

-- | (2.) Check for the character                        |

-- +-----------------------------------------------------+

<>

FOR i IN 1..LENGTH(charArray) LOOP

FOR j IN 1..passwordLength LOOP

IF SUBSTR(password,j,1) = SUBSTR(charArray,i,1) THEN

isChar := TRUE;

GOTO findpunct;

END IF;

END LOOP;

END LOOP;

IF isChar = FALSE THEN

raise_application_error(-20004, 'Password should contain at least '

||

' one digit,'

||

' one character and'

||

' one punctuation');

END IF;

-- +-----------------------------------------------------+

-- | (3.) Check for the punctuation                      |

-- +-----------------------------------------------------+

<>

FOR i IN 1..LENGTH(punctArray) LOOP

FOR j IN 1..passwordLength LOOP

IF SUBSTR(password,j,1) = SUBSTR(punctArray,i,1) THEN

isPunct := TRUE;

GOTO endsearch;

END IF;

END LOOP;

END LOOP;

IF isPunct = FALSE THEN

raise_application_error(-20004, 'Password should contain at least '

||

' one digit,'

||

' one character and'

||

' one punctuation');

END IF;

<>

-- +-----------------------------------------------------+

-- | Check that the new password is not null.            |

-- +-----------------------------------------------------+

IF old_password = '' THEN

raise_application_error(-20005, 'Old password is null');

END IF;

-- +-----------------------------------------------------+

-- | Check if the password differs from the previous     |

-- | password by at least [x] letters.                   |

-- +-----------------------------------------------------+

differ := ABS(LENGTH(old_password) - LENGTH(password));

IF differ < differMinLength THEN

IF LENGTH(password) < LENGTH(old_password) THEN

passwordLength := LENGTH(password);

ELSE

passwordLength := LENGTH(old_password);

END IF;

FOR i IN 1..passwordLength LOOP

IF SUBSTR(password,i,1) != SUBSTR(old_password,i,1) THEN

differ := differ + 1;

END IF;

END LOOP;

IF differ < differMinLength THEN

raise_application_error(-20006, 'Password should differ by at least '

||

differMinLength

||

' characters.');

END IF;

END IF;

-- +-----------------------------------------------------+

-- | Well, looks like we passed all of the requirements. |

-- | Simple return 'true'.                               |

-- +-----------------------------------------------------+

RETURN(true);

END;

188 rows selected.

SQL> select * from dba_profiles;

PROFILE                        RESOURCE_NAME                    RESOURCE LIMIT

------------------------------ -------------------------------- -------- ----------------------------------------

JUSTIN_PROFILE                 PASSWORD_VERIFY_FUNCTION         PASSWORD VERIFY_JUSTIN_USER

此后创建user可以指定该profile,密码若验证无法通过泽用户创建会失败

SQL> create user sagda identified by"asd245(" profile JUSTIN_PROFILE;

create user sagda identified by"asd245(" profile JUSTIN_PROFILE

*

ERROR at line 1:

ORA-28003: password verification for the specified password failed

ORA-20002: Password must be greater than 10 characters.

SQL> create user sagda identified by"asd245234155" profile JUSTIN_PROFILE;

create user sagda identified by"asd245234155" profile JUSTIN_PROFILE

*

ERROR at line 1:

ORA-28003: password verification for the specified password failed

ORA-20004: Password should contain at least  one digit, one character and one punctuation

oracle password_verify_function,使用PASSWORD_VERIFY_FUNCTION设置用户密码复杂度相关推荐

  1. oracle设置用户密码永不过期

    oracle设置用户密码永不过期 转载:原文链接https://blog.csdn.net/chenqi3166/article/details/125141774 转载:原文链接https://bl ...

  2. Oracle 修改SYS、system用户密码

    Oracle 修改SYS.system用户密码 by:授客 QQ:1033553122 概念 SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户.在数据库安装完之后,应 ...

  3. linux设置用户密码、查看linux用户信息、root用户管理普通用户(passwd命令使用)

    1 切换root用户和给root用户设置密码 1.1 切换到root用户 1.使用su 命令 或 su root命令切换到root用户的时候报错:su: Authentication failure ...

  4. 服务器上Oracle System如何修改system用户密码

    服务器上Oracle System如何修改system用户密码 1,服务器上oracle经常会使用plsql developer访问,很多时候我们用的服务器,或者之前的密码我们并不知道,这个时候需要修 ...

  5. Kubernetes Dashboard 设置用户密码登陆

    Kubernetes Dashboard 设置用户密码登陆 Kubernetes 2019年05月20日 K8s 文档 K8s 1.13源码安装 k8s dashboard token访问 仪表板是基 ...

  6. oracle scott密码忘记,oracle忘记sys/system/scott用户密码的解决方法

    这篇文章主要为大家详细介绍了oracle忘记sys/system/scott用户密码的解决方法,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 一 ...

  7. Linux命令之设置用户密码passwd

    概述 passwd 命令可以设置用户密码.通过 useradd 命令创建的用户初始是没有密码的,需要通过 passwd 命令来为其设置密码,未设置密码的用户不能登录系统. 注:超级用户可以为自己和其他 ...

  8. Linux常用命令(中)、时间日期类、date 显示当前时间、ntpdate命令、cal 查看日历、useradd 添加新用户、passwd 设置用户密码、id 查看用户是否存在

    文章目录 1.3 时间日期类 1.3.1 date 显示当前时间 1.3.2 date 显示非当前时间 1.3.3 date 设置系统时间 1.3.4ntpdate命令 ntpdate常用服务器 国内 ...

  9. 如何解锁oracle用户界面操作,oracle 解锁用户以及重新设置用户密码

    在安装完Oracle 10g之后,想打开sql*plus来学习,然后按照书上的步骤用scott用户来连接数据库,可输了好几次都提示一个错误. error: the account is locked ...

最新文章

  1. QIIME 2教程. 11元数据Metadata(2020.11)
  2. R语言ggplot2可视化:可视化堆叠的直方图、在bin中的每个分组部分添加数值标签、使用position_stack函数设置
  3. python套接字编程_Python网络编程 Python套接字编程
  4. 《失业的程序员》(六):加班
  5. CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记
  6. IPropertySet接口
  7. 十一游玩新发现(见怪不怪)
  8. Apache 基金会宣布 Apache Kylin 成为顶级项目
  9. IT兄弟连 JavaWeb教程 Servlet 状态管理 会话跟踪
  10. netty源码阅读之编码之flush刷新buffer队列
  11. Android地图开发之OpenStreetMap基础教程
  12. 测试-APP端常见测试功能点
  13. 树和二叉树的基本概念及性质
  14. 用Java语言开发物联网设备应用(5)
  15. linux如何安装声卡驱动
  16. 三、基于ZK实现分布式锁
  17. 表格内单元格可点击,查看详情
  18. 乐佰小迪智能机器人怎么使用_麦咭智能机器人价格及说明(麦咭智能机器人怎么恢复出厂设置)...
  19. 处理打包后的.air文件不能打开的情况
  20. 香港科技大学 计算机科学排名,香港科技大学世界排名及专业排名汇总(QS世界大学排名版)...

热门文章

  1. 3D打印机分类与速度
  2. P4491 [HAOI2018]染色
  3. 使用 markdown-it 解析 markdown 代码(读 VuePress 三)
  4. 为创世纪图书馆(Library Genesis)作镜像
  5. python-冒泡排序
  6. 于明:必应发力海外业务 中国搜索营销市场暗流涌动
  7. 《 Java并发编程从入门到精通》Thread安全与不安全
  8. PL/SQL Virtual Machine Memory Usage
  9. 妙用SQL Server聚合函数和子查询迭代求和
  10. 逻辑斯蒂回归(logisic regression)和SVM的异同