数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle的口令管理


发布日期:2024年06月16日
 
Oracle的口令管理

编者按: 验证口令获得访问授权这是目前最常用的访问控制手段Oracle数据库也采用这样的安全策略在这一策略中口令的管理是关键然而要做好这项工作既保证数据的安全也保证用户使用方便却并非易事

在Oracle数据库中若要访问数据必须先具有该数据库的一个账户这个访问可以是直接访问(通过一个数据库的用户连接)或间接访问(通过在数据库链接中预设权限的访问)每个账户必须有一个与其相关的口令一个数据库账户可以连接到一个操作系统账户上

口令是在创建用户账户时为每一用户设置的并可在该账户创建后对它们进行变更用户变更账户口令的能力受他访问工具权限的限制数据库以加密的形式将口令存储在一个数据字典表中如果账户直接与操作系统账户相关就可以旁路口令检查在Oracle i中口令可以无效数据库管理员可以建立能重复使用口令的条件(通过一个数据库口令历史设置值)也可以使用环境文件为口令制定标准如最小长度或如果连续多次与账户连接不成功就可以自动锁定账户

环境文件

可以使用环境文件来限制用户能使用的系统和数据库资源并管理口令限制如果数据库中没有创建环境文件将使用缺省环境文件(Default)缺省环境文件对于所有用户资源没有限制列出了可以通过环境文件限制的资源

(注: PASSWORD_REUSE_MAX和PASSWORD_REUSE_TIME互不相容如果其中一个资源设置成一个值另一个必须设置成Unlimited)

如表所示许多资源都可以被限制在用户超过资源限制前不会发生任何动作一旦到达限值 SQL语句就被停止

环境文件是通过create profile命令创建的可以用alter profile命令修改下例所示的alter profile命令用于修改现有的环境文件在这个例子中数据库的缺省环境文件被修改成允许最大空闲时间为小时

alter profile DEFAULT limit idle_time ;

在Oracle i中可以使用环境文件来管理口令的终止重新使用和复杂性例如可以限制一个口令的寿命锁定口令过旧的账户也可以强制一个口令至少有一定程度的复杂性并锁定一个多次注册失败的账户

口令的锁定与过期

FAILED_LOGIN_ATTEMPTS用于设定账户允许的尝试次数可以防止恶意人员无限制地尝试账户口令来破解口令例如如果设置用户环境文件的FAILED_LOGIN_ATTEMPTS资源为该账户允许连续注册失败次失败就会引起账户被锁定

在下面的例子中创建一个供用户TestUser使用的TEST_PROFILE环境文件

create profile TEST_PROFILE limit

FAILED_LOGIN_ATTEMPTS ;

create user TESTUSER identified by abcd

profile TEST_PROFILE;

grant CREATE SESSION to TESTUSER;

如果连续次与TestUser账户的连接失败该账户将自动被Oracle锁定此后当输入TestUser账户的正确口令时会收到一条错误信息

ERROR:ORA: the account is locked

要对账户解锁可在数据库管理员账户中使用alter user命令的account unlock子句如下所示

alter user TESTUSER account unlock;

账户解锁后TestUser账户再一次被允许连接可以通过alter user命令的account lock子句来手动锁定一个账户

alter user TESTUSER account lock;

若一个账户由于多次连接失败而被锁定当超过其环境文件的PASSWORD_LOCK_TIME值时将自动解锁例如如果PASSWORD_LOCK_TIME设为前面例子中的TestUser账户就被锁定过后账户即被自动解锁

可以通过环境文件中的PASSWORD_LIFE_TIME资源建立一个口令的最大期限例如可以强制TEST_PROFILE环境文件的用户每天改变一次口令

alter profile TEST_PROFILE limit

PASSWORD_LIFE_TIME ;

在这个例子中alter profile命令用于修改TEST_PROFILE环境文件PASSWORD_LIFE_TIME值设为因此使用这个环境文件的每个账户在天后口令就会过期如果口令过期就必须在下次注册时修改它除非环境文件对过期的口令有一特定的宽限期宽限期参数叫做PASSWORD_GRACE_TIME如果在宽限期内没有修改口令账户就会过期

(注: 如果使用PASSWORD_LIFE_TIME参数就必须为用户提供一种便于其改变口令的方法)

过期账户与锁定账户不同锁定账户会随着时间的推移自动解锁而过期账户需要通过数据库管理员人工干预才能重新激活

(注如果使用口令过期特性就要确保拥有应用程序的账户具有不同的环境文件设置值否则它们会被锁定使得应用程序不能使用

如前面例子所述若要重新恢复一个过期账户需使用alter user命令在这个例子中用户TestUser首先由数据库管理员手工使其口令过期

alter user TESTUSER password expire;

接着TestUser试图连接其账户当他输入口令时立即被提示输入账户的新口令

也可以使用create user命令的password expire子句强制用户在第一次访问时修改口令不过create user命令不允许对用户设置的新口令设置限期日期要设置的话必须使用前面例子中的PASSW??????餀???? ??ORD_LIFE_TIME环境文件参数

若要查看任一账户的口令限期可查询DBA_USERS数据字典视图的Expire_Date列若用户自己想查看可查询USER_USERS数据字典视图的Expiry_Date列(通过SQL*Plus或一个基于客户机的查询工具)

防止口令重新使用

若要防止一个口令被重新使用可以使用两个环境文件参数的其中一个: PASSWORD_REUSE_MAX或PASSWORD_REUSE_TIME这两个参数互不相容如果给其中的一个设置了值另一个就必须设为Unlimited

PASSWORD_REUSE_TIME参数规定一个口令可以重新使用前必须经过的天数例如如果设置PASSWORD_REUSE_TIME为则在天内不能使用同一个口令

PASSWORD_REUSE_MAX参数指定一个口令可以重新使用前必须对其改变的次数如果试图在这个限制到达前重新使用该口令Oracle会拒绝口令的修改

例如可以为本章前面创建的TEST_PROFILE环境文件设置一个PASSWORD_REUSE_MAX参数

alter profile TEST_PROFILE limit

PASSWORD_REUSE_MAX

PASSWORD_REUSE_TIME UNLIMITED;

如果用户TestUser现在试图重新使用一个最近的口令修改口令就会失败例如如下修改口令

alter user TESTUSER identified by eye;

然后再次改变它

alter user TESTUSER identified by eye;

在下次修改口令时试图重新使用最近的口令就会失败他不能重新使用任何他最近用过口令必须提供一个新口令

口令历史被存储在SYS模式下一个叫USER_HISTORY$的表中在这个表中Oracle存储了用户资源识别符加密的口令值和创建该口令的日期/时间标记当PASSWORD_REUSE_TIME值已过期或口令修改次数超过PASSWORD_REUSE_MAX值时这个老的口令记录就从SYSUSER_HISTORY$表中删除如果一个新的密码与现有的密码一样这个新口令就被拒绝

由于老口令存储在SYS拥有的一个表中所以数据存储在System表空间中因此如果要为频繁修改口令的大量用户保留非常大的口令历史口令历史表SYSHISTORY$所需的空间就会影响System表空间的空间需求

设置口令复杂度

可以强制用户的口令符合复杂度标准例如可以要求口令的最小长度限制不能是一些简单的词至少包括一个数字或标点符号等create profilealter profile命令的PASSWORD_VERIFY_FUNCTION参数指定用于评估口令的函数名如果用户提出的口令不符合要求就不会被接受例如可以拒绝abcdeeye作为口令因为它们未包含任何数字值为简化实施口令复杂度的过程Oracle提供了一个函数VERIFY_FUNCTION在缺省情况下不创建这个函数只有在运行utlpwdmgsql脚本文件(该文件位于Oracle软件主目录下的/rdbms/admin子目录中)时才创建VERIFY_FUNCTION函数(注意这个函数应当在SYS模式下创建)

函数中的前三个条件子句检查口令是否与用户名相同是否少于个字符是否是一组特定的词之一可以任意修改这些检查或增加你的要求例如安全原则可能要求口令最少有六个字符运行前要简单地更新部分utlpwdmgsql文件

函数的下一个主要部分是对口令字符串内容的三段检查要通过这些检查口令中至少要包含一个字符一个数字和一个标点符号同前面的检查一样它们是可以编辑的例如可以不要求用户在其口令中使用标点符号只要简单地绕过那部分口令检查就可以

函数的下一部分是将新口令与老口令逐字符进行比较如果它们之间的不同之处少于三处新口令将不予接受

这个脚本文件中最后一条命令不属于该函数它是一条改变缺省环境文件的alter profile命令如果改变了缺省环境文件那么数据库中所有使用缺省环境文件的用户都会受到影响

要注意

上一篇:oracle修改字段类型的方法

下一篇:MySQL如何对抗解密高手