多数 Oracle 数据库用户都使用默认配置文件创建用户帐户。自从 Oracle 8 开始,就可以通过创建一个配置文件,然后使用以下两个语句之一分配给它一个用户来锁定一个帐户。
CREATE USER myuser . . . PROFILE myprofile;
ALTER USER myuser [被屏蔽广告]PROFILE myprofile;
入侵数据库帐户的一个典型尝试是试用几个常用的口令,比如“welcome”或者用户名之类的。可以使用配置文件标记FAILED_LOGIN_ATTEMPTS 阻止多次失败的登录尝试。
CREATE PROFILE myprofile LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1;
分配给这个配置文件的用户将会在五次以不正确的口令尝试登录之后被拒之于门外。帐户将会在一天之内不可访问,直至 DBA 发出了一个ALTER USER
ACCOUNT UNLOCK 命令。
即使在几年之后,我还发现在以前的项目中我的老口令依然能够使用。这是一个很好的反面例子,说明我们要对口令的生存时间设置一个期限,使其在特定的一段时间(也就是合同的结束之日)之后过期。另外还有一种选择,即允许一个特定的宽限期,这对不经常使用的项目很有用。如果用户在口令过期之前不登录,用户依然可以连接,但是会显示一个警告,直到宽限期过期。在配置文件中使用PASSWORD_LIFE_TIME 和PASSWORD_GRACE_TIME 标记能够启用这些特性。
ALTER PROFILE myprofile LIMIT
PASSWORD_LIFE_TIME 30
PASSWORD_GRACE_TIME 3;
分配给那个配置文件的用户将会在口令修改的30之后不能使用他们的帐户。30天之后,尝试登录将会出现一个警告消息,提示还有三天帐户就会被锁。
很多用户会看到这些限制并且简单地尝试将他们的口令重设为他们以前使用的口令,而不是每次都使用一个新口令。可以使用PASSWORD_REUSE_TIME 和PASSWORD_REUSE_MAX 标记阻止用户重用一个口令。
ALTER PROFILE myprofile LIMIT
PASSWORD_REUSE_TIME 30
PASSWORD_REUSE_MAX 100;
这个配置文件的用户将不能重用一个口令超过30天,或者使用同一口令不能超过100次。
最后,一些用户使用容易猜出的口令。通过创建一个 PL/SQL 过程来检验口令就可以限制一个口令的格式(比如检查最小长度、字母、数字或者大小写混合,或者确认口令不是用户名的变种)。必须以如下格式创建存储过程:
CREATE OR REPLACE FUNCTION verify_password
(
userid varchar(30),
password varchar(30),
old_password varchar(30)
) RETURN BOOLEAN
. . .
可以以如下方式分配这个函数(可以是任何名称,但是必须属于 SYS 帐户):
ALTER PROFILE myprofile LIMIT
PASSWORD_VERIFY_FUNCTION verify_password;