oracle 11g数据库安全加固注意事项
数据库安全配置中,需要做相关的安全加固工作。以确认数据库的安全,但是,有些时候,操作不当或者数据库业务账号修改密码后,而程序的连接数据库的配置封装在jar里,如果jar内的连接数据库的配置信息没有做相应的修改的话。就会对数据库的此业务账号造成严重的后果。
因此,真正了解Oracle安全数据库用户的状态,就显得尤为重要了。下面我们就看一下oracle数据库中的多种用户状态。
ORACLE数据库用户有多种状态,可查看视图USER_ASTATUS_MAP。
SQL>colstatusfora30 SQL>select*fromuser_astatus_map; STATUS#STATUS ---------------------------------------- 0OPEN 1EXPIRED 2EXPIRED(GRACE) 4LOCKED(TIMED) 8LOCKED 5EXPIRED&LOCKED(TIMED) 6EXPIRED(GRACE)&LOCKED(TIMED) 9EXPIRED&LOCKED 10EXPIRED(GRACE)&LOCKED 9rowsselected.
通过上面的查询我们可以看到在Oracle中account总共有9种不同的状态,对应dba_users视图中的account_status字段。
下面我分别就每种状态的含义和出现的情况做个简单的说明,以便于今后的系统管理和维护。
分析上面的9种状态不难看出,其实独立的状态只有OPEN、EXPIRED、LOCKED、EXPIRED(GRACE)、LOCKED(TIMED)5种形式。其他4种不过是前面几种形式的组合而已。
或者也可以这样理解:
以上的9种状态可以分为两大类:
1、基本状态(前五种为基本状态:0OPEN、1EXPIRED、2EXPIRED(GRACE)、4LOCKED(TIMED)、8LOCKED);
2、组合状态(后四种为组合状态:5EXPIRED&LOCKED(TIMED)、6EXPIRED(GRACE)&LOCKED(TIMED)、9EXPIRED&LOCKED、10EXPIRED(GRACE)&LOCKED);
后四种的组合状态可通过状态号STATUS#获得其状态的两个组合。掌握前五种即可。
具体详细解释请参考如下:
OPEN:这个是大家最常见的,就是表示这个是可用的,没有任何限制的帐户
LOCKED:表示这个帐户被DBA锁定.一般通过alteruserusernameaccountlock(unlock);
EXPIRED:表示该帐户被设置为口令到期,要求用户在下次logon的时候修改口令(系统会在该account被设置为expire后的第一次登陆是提示你修改密码)
EXPIRED(GRACE):当设置了grace以后(第一次成功登录后到口令到期后有多少天时间可改变口令,在这段时间内,帐户被提醒修改口令并可以正常登陆,account_status显示为EXPIRED(GRACE).
LOCKED(TIMED):这种状态表示失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定,需要注意的是,在Oracle10g中,默认的DEFAULT值是10次.
EXPIRED&LOCKED:表示此账户被设置为口令到期且被锁定。
EXPIRED(GRACE)&LOCKED(TIMED):当account_stutus为EXPIRED(GRACE)的时候,用户又尝试失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定
EXPIRED&LOCKED(TIMED):当设置了accountexpire后,用户又失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定
EXPIRED(GRACE)&LOCKED:用户account_status为EXPIRED(GRACE)后,又被DBA手工锁定帐户后的状态
下面通过实例操作来说明:
本人对oracle数据库的profile文件进行如下安全设置:(其中的FAILED_LOGIN_ATTEMPTS6是对用户尝试失败的登录最大次数的限制,这里只允许最多尝试失败6次)
SQL>ALTERPROFILEDEFAULTLIMIT FAILED_LOGIN_ATTEMPTS6 PASSWORD_LIFE_TIME60 PASSWORD_REUSE_TIME60 PASSWORD_REUSE_MAX5 PASSWORD_VERIFY_FUNCTIONverify_function_11g PASSWORD_LOCK_TIME1/24 PASSWORD_GRACE_TIME90;
通过以下语句查询当前用户的状态:
SQL>selectusername,account_statusfromdba_users; USERNAMEACCOUNT_STATUS -------------------------------------------------------------- DBA_USEROPEN DBSNMPOPEN SYSMANOPEN SCOTTOPEN FLOWS_FILESEXPIRED&LOCKED MDSYSEXPIRED&LOCKED WMSYSEXPIRED&LOCKED ORDDATAEXPIRED&LOCKED CTXSYSEXPIRED&LOCKED ANONYMOUSEXPIRED&LOCKED
接下来使用账号dba_user和scott,以错误的密码尝试连接数库6次以上后,再查看数据库用户状态:
SQL>selectusername,account_statusfromdba_users; USERNAMEACCOUNT_STATUS -------------------------------------------------------------- DBA_USEREXPIRED(GRACE)&LOCKED(TIMED) DBSNMPOPEN SYSMANOPEN SCOTTEXPIRED(GRACE)&LOCKED(TIMED) FLOWS_FILESEXPIRED&LOCKED MDSYSEXPIRED&LOCKED WMSYSEXPIRED&LOCKED ORDDATAEXPIRED&LOCKED CTXSYSEXPIRED&LOCKED ANONYMOUSEXPIRED&LOCKED
事实证明,当用户DBA_USER和SCOTT为EXPIRED(GRACE)的时候,用户又尝试失败的login次数超过了FAILED_LOGIN_ATTEMPTS,被系统自动锁定.
如果这两个用户为生产现网的业务账户的话,管理员不能及时发现问题或报警的话,将会造成业务中断等严重的后果。