1帐户锁定
建立一个数据库用户XUDB,该帐户允许连续注册3次,超过3次就会引起帐户死锁。这样可以减少口令被猜中、穷举的可能性.它的环境文件名为lock_account。
Create Profile Lock_account limit
Failed_Login_Attempts3 Password_Lock_Time 1;
Create User XUDB Identmed By XU520;
Profile Lock_account;
ALTER USER XUDB PROFILE Lock_aecount;
如果XUDB帐户连续注册3次,那么该帐户就会被Oracle自动锁住,即使使用了正确的口令,也会提示出错。
CONNECT XUDB/XU520;
Error ORA-28000 the account is locked
在建立Lock_account时,因为指定Password_Lock_Time的值为1.所以当帐户锁定一天之后,ORACLE会自动解锁帐户。另外,要对帐户解锁,在DBA帐户下使用如下语句即可;
Alter User XUDB Account Unlock
2口令历史
可以通过环境文件Profile的资源PASSWORD_LIFE_TIME为帐户建立一个最大的期限。如要求用户每10天改变一次口令。
Alter Profile Limited_Profile Limit
Password_Life_Time 10;
如果口令过期,那么必须下次注册时修改它,一个过期帐户和锁定的帐户不同,一个锁定的帐户会随时间的推移自动解锁或用由来解锁;一个过期帐户,ORACLE会强制改变口令,否则不允许登录。
当往往有些用户在重新输入新口令的时候。又使用以前的旧口令,为了防止用户重用旧口令,强制该用户在口令终止10天之内不能重用以前的口令。具体实现方法如下:
Alter Profile password_history Limit
Password_Life Time10 Password_Grace_Time2
Password_Reuse_Time10 Password_Reuse_Max Unlimited;
将该Profile分配给用户才能起作用
AherUserxUDBProfile password_history;
当用户在前十二天没有修改口令,在第十三天登录时,0-RACLE会强制用户改变口令,如果用户仍然使用过去的口令,则口令修改不正确,并会有错误提示信息。
ERROR:ORA-28001:the password has expired
Changing password for XUDB
New password:
Retype new password:
ERROR:ORA-28007:the password cannot be reused
3口令复杂性验证
口令的复杂性验证程序可用PL/SQL脚本fUTLPWDMG.SQL)来创建自己的口令验证程序来指定,使用OCIPasswordChangeο改变口令。
DBAs授权的PL/SQL系统调用必须遵循以下格式:
Routine_name(
Userid_parameter IN VARCHAR2(30),
PaSSWOrd_parameter IN VARCHAR2(30),
Old_password_parameter IN VARCHAR2(30))
RETURN BOOLEAN
在程序创建之后使用用户的PROFILE或系统的缺省PRO-FILE,将其指定为口令验证程序:
Create/Alter PROFILE pmfile_name LIMIT
PASSWORD_VERIFY_FUNCTION routin_name
下面设计了一个程序来改进了原有口令,设置了缺省口令资源限制,创建了自己的复杂性检查程序,提供了口令复杂性最低限度的检查。
这个口令验证程序必须SYS所有。该缺省口令复杂性验证函数检查以下项目:(1)口令满足最小长度,不能少于4个字符;(2)口令至少包含一个字母、一个数字、一个特殊字符的组合要求;(3)口令不是一些常用名;(4)口令不能与用户名相同,用户可根据实际的需要修改这个函数。
该函数在SYS模式中创建,运行它之前以SYSDBA身份连接SYS。
程序如下:
CREATE OR REPLACE FUNCTION
verify_function
(username varchar2,
password varchar2)
RETURN boolean IS
n boolean;
m integer;
isdigit boolean;
ischar boolean;
ispunct boo1ean;
digitarray varehar2(25);
chararray varchar2(52);
punctarray varchar2(52);
Begin
digitarray:=‘0123456789’;
chararray:=‘abcdefghijklmnopqrstuvwxyzABCDEFGHUKLMNOPQRSTUVWXYZ’;
punctarray:=‘&0”*;<=>?_!”#$%+,-/:’;
IF password=username
THEN raise_application_error(-20001,‘Password same asuser’);
END IF
IF length(password)<4 THEN
Raise_application_error(-20002,‘Password length less than 4’);
IF NLS_LOWER(password)
IN(‘home’,‘abcd’,‘boy’,‘user’,‘password’,‘oracle’,‘dear’)THEN
Raise_application_error(-20003,‘Password should not use thecommon word’);
END IF
’
isdigit=FALSE;
m:=length(password);
FOR i IN 1..10 LOOP
FOR j IN 1..m LOOP
IF subst(password,j,1)=substr(digitarray,i,1)THEN
isdigit:=TRUE;
GOTO findchar;
END IF;
END LOOP;
END LOOP;
IF ischar=FASLE
THEN Raise_application_error(-20004,‘Password should contain at least one digit,one character and one punctuation’);
END IF;
2.4口令加密
对客户机.把SQLNET.ORA文件中的参数ORA_EN-CRYPT_LOGIN设置为TRUE;
对服务器,把INIT.ORA文件中的参数DBLINK_EN-CRYPT_LOGIN设置为TRUE;
这样口令以加密的形式在客户机到服务器和服务器到服务器之间传送。
另外需要强调的是数据库系统管理员对SYS和SYSTEM两个特殊的帐户的保密管理,要经常更改这两个帐户的口令,防止被盗用。
[@more@]
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11754099/viewspace-1006207/
,如需转载,请注明出处,否则将追究法律责任。