oracle password_verify_function,使用PASSWORD_VERIFY_FUNCTION设置用户密码复杂度
依据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设置用户密码复杂度相关推荐
- oracle设置用户密码永不过期
oracle设置用户密码永不过期 转载:原文链接https://blog.csdn.net/chenqi3166/article/details/125141774 转载:原文链接https://bl ...
- Oracle 修改SYS、system用户密码
Oracle 修改SYS.system用户密码 by:授客 QQ:1033553122 概念 SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户.在数据库安装完之后,应 ...
- linux设置用户密码、查看linux用户信息、root用户管理普通用户(passwd命令使用)
1 切换root用户和给root用户设置密码 1.1 切换到root用户 1.使用su 命令 或 su root命令切换到root用户的时候报错:su: Authentication failure ...
- 服务器上Oracle System如何修改system用户密码
服务器上Oracle System如何修改system用户密码 1,服务器上oracle经常会使用plsql developer访问,很多时候我们用的服务器,或者之前的密码我们并不知道,这个时候需要修 ...
- Kubernetes Dashboard 设置用户密码登陆
Kubernetes Dashboard 设置用户密码登陆 Kubernetes 2019年05月20日 K8s 文档 K8s 1.13源码安装 k8s dashboard token访问 仪表板是基 ...
- oracle scott密码忘记,oracle忘记sys/system/scott用户密码的解决方法
这篇文章主要为大家详细介绍了oracle忘记sys/system/scott用户密码的解决方法,具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! 一 ...
- Linux命令之设置用户密码passwd
概述 passwd 命令可以设置用户密码.通过 useradd 命令创建的用户初始是没有密码的,需要通过 passwd 命令来为其设置密码,未设置密码的用户不能登录系统. 注:超级用户可以为自己和其他 ...
- 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常用服务器 国内 ...
- 如何解锁oracle用户界面操作,oracle 解锁用户以及重新设置用户密码
在安装完Oracle 10g之后,想打开sql*plus来学习,然后按照书上的步骤用scott用户来连接数据库,可输了好几次都提示一个错误. error: the account is locked ...
最新文章
- QIIME 2教程. 11元数据Metadata(2020.11)
- R语言ggplot2可视化:可视化堆叠的直方图、在bin中的每个分组部分添加数值标签、使用position_stack函数设置
- python套接字编程_Python网络编程 Python套接字编程
- 《失业的程序员》(六):加班
- CVPR 2018 STRCF:《Learning Spatial-Temporal Regularized Correlation Filters for Visual Tracking》论文笔记
- IPropertySet接口
- 十一游玩新发现(见怪不怪)
- Apache 基金会宣布 Apache Kylin 成为顶级项目
- IT兄弟连 JavaWeb教程 Servlet 状态管理 会话跟踪
- netty源码阅读之编码之flush刷新buffer队列
- Android地图开发之OpenStreetMap基础教程
- 测试-APP端常见测试功能点
- 树和二叉树的基本概念及性质
- 用Java语言开发物联网设备应用(5)
- linux如何安装声卡驱动
- 三、基于ZK实现分布式锁
- 表格内单元格可点击,查看详情
- 乐佰小迪智能机器人怎么使用_麦咭智能机器人价格及说明(麦咭智能机器人怎么恢复出厂设置)...
- 处理打包后的.air文件不能打开的情况
- 香港科技大学 计算机科学排名,香港科技大学世界排名及专业排名汇总(QS世界大学排名版)...