生产中我们不同用户通常有不同的策略,例如应用连接用户我们希望密码永不过期,维护用户为了安全要几个月修订一次,大家知道oracle非常强大,这些功能都能在oracle中实现。但是过程往往觉得很麻烦,如密码策略如何自建,profile格式等问题。其实oracle 自带的脚本中已经给我写好了密码校验策略。
本案就教大家最简洁的如何限定oracle用户密码复杂度,账户过期策略,密码过期策略以及针对不同用户设置不同的策略。
脚本位于$ORACLE_HOME/rdbms/admin/utlpwdmg.sql 中,我们只要修改部分语句就可以建立自己的密码策略。
数据库版本11.2.0.3
脚本如下,基本包含密码的各种策略,可以根据自己的要去自己修改。
CREATE OR REPLACE FUNCTION verify_function
(username varchar2,
password varchar2,
old_password varchar2)
RETURN boolean IS
n boolean;
m integer;
differ integer;
isdigit boolean;
ischar boolean;
ispunct boolean;
db_name varchar2(40);
digitarray varchar2(20);
punctarray varchar2(25);
chararray varchar2(52);
i_char varchar2(10);
simple_password varchar2(10);
reverse_user varchar2(32);
BEGIN
digitarray:= '0123456789';
chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
-- 校验密码长度至少为8位
IF length(password) < 8 THEN
raise_application_error(-20001, 'Password length less than 8');
END IF;
-- 校验密码是否和用户名相同
IF NLS_LOWER(password) = NLS_LOWER(username) THEN
raise_application_error(-20002, 'Password same as or similar to user');
END IF;
FOR i IN 1..100 LOOP
i_char := to_char(i);
if NLS_LOWER(username)|| i_char = NLS_LOWER(password) THEN
raise_application_error(-20005, 'Password same as or similar to user name ');
END IF;
END LOO