Oracle密码复杂度的设置
某些情况下,需要强制Oracle数据库中的某些用户(例如syssystem或者其他)的密码,不能太简单。虽然作为数据库管理人员,不会设置太简单的密码。但是,当需要数据库级别,不允许设置太简单的密码,如果设置太简单的密码,则拒绝本次操作。
首先:先查询一下当前数据库中,都有哪些profileSELECTDISTINCTprofileFROMdba_profiles
一般情况下,所有的用户,是使用一个名字叫DEFAULT的profile
下面这个语句,查询DEFAULT的profile,密码方面的设置。
SQLselect2RESOURCE_NAME3LIMIT4from5dba_profiles6where
f7profileDEFAULT8ANDRESOURCE_TYPEPASSWORD
RESOURCE_NAME
LIMIT
FAILED_LOGIN_ATTEMPTS
UNLIMITED
PASSWORD_LIFE_TIME
UNLIMITED
PASSWORD_REUSE_TIME
UNLIMITED
PASSWORD_REUSE_MAX
UNLIMITED
PASSWORD_VERIFY_FUNCTION
NULL
PASSWORD_LOCK_TIME
UNLIMITED
PASSWORD_GRACE_TIME
UNLIMITED
已选择7行。
注意到,那个PASSWORD_VERIFY_FUNCTION的LIMIT是NULL也就是没有任何的密码复杂度限制。
由于听说,直接执行那个utlpwdmgsql,会修改DEFAULT这个PROFILE,从而导致影响所有的用户。因此只好去找个那个verify_fu
ctio
的代码,手工做点修改处理。
原有的代码是数字大小写符号。长度要大于等于4现在修改为仅仅数字大小写,长度要大于等于10。
f验证密码复杂度参数:user
ame用户名password密码old_password旧密码返回值:验证是否通过CREATEORREPLACEFUNCTIONverify_fu
ctio
user
amevarchar2passwordvarchar2old_passwordvarchar2RETURNboolea
IS
boolea
用于暂存密码长度mi
tegerdifferi
teger是否包含数字判断标志isdigitboolea
是否包含小写字母判断标志ischar_lowerboolea
是否包含大写字母判断标志
fischar_upperboolea
数字字符digitarrayvarchar220小写字母字符chararray_lowervarchar226大写字母字符chararray_uppervarchar226BEGIN数字字符digitarray0123456789小写字符chararray_lowerabcdefghijklm
opqrstuvwxyz大写字符chararray_upperABCDEFGHIJKLMNOPQRSTUVWXYZ
检查是否用户名与密码是否相同IFNLS_LOWERpasswordNLS_LOWERuser
ameTHENraise_applicatio
_error20001PasswordsameasorsimilartouserENDIF
检查密码的长度是否符合要求IFle
gthpassword10THEN
fraise_applicatio
_error20002Passwordle
gthlesstha
10ENDIF
检查密码是否是简单的单词(这一段理论上执行不到,因为前面加了密码长度大于10的限制)IFNLS_LOWERpasswordINwelcomedatabaser