1.Oracle 11g 用户管理新功能
§1 Oracle 11g 用户管理新功能
关键字:Oracle、User、password、security
读者级别:初级
作者:赵元杰
概要:做过Oracle系统DBA的人员都具有这样的体会:每个Oracle版本在用户和口令的安全管理上都存在些差异,特别是Oracle 11g版本在管理用户功能上系统进行了较大的改动。比如:口令可区别大小写、不建议使用默认口令等。这里给出基于Oracle 11g版本的用户创建与口令等的几点安全知识介绍。
§1.1 用户与方案(Schema)
Oracle 系统中的用户是一个可登录到数据库的账户;而方案(schema)或模式是一组对象的集合名词(或某一用户下所有数据库对象的集合构成一个方案)。当Oracle用户具有一定权限后,该用户可创建自己的对象,也可以不创建任何对象。当用户创建对象后,这个用户就自动成为方案(schema)或模式了。但是,你是否真正理解Oracle系统的user 与schema的细微差异并不重要。
这里讨论的用户与模式主要是让使用Oracle 系统的人员了解某个用户是否有对象,用户有对象才能称为schema,请看下面的语句的结果:
SQL> create user "赵元杰" identified by zhao_ABC_#123 default tablespace users;
用户已创建。
SQL> select username,created from dba_users
2 where username NOT IN (select distinct owner from dba_objects);
USERNAME CREATED
------------------------------------------------------------ --------------
赵元杰 17-2月 -12
MGMT_VIEW 30-3月 -10
NLS_SORT 17-2月 -12
SPATIAL_WFS_ADMIN_USR 30-3月 -10
XS$NULL 30-3月 -10
MDDATA 30-3月 -10
ANONYMOUS 30-3月 -10
DIP 30-3月 -10
APEX_PUBLIC_USER 30-3月 -10
SPATIAL_CSW_ADMIN_USR 30-3月 -10
已选择10行。
SQL> drop user "赵元杰" ;
用户已删除。
从上面语句获得的结果来看,刚创建的"赵元杰"只是一个普通Oracle账户(用户)而已,它并不是方案。
§1.2 创建用户规范问题
创建Oracle 系统中的用户(账户)的名称比较随意;比如用户名称可以是普通的字符与数字串构词,这些字符串可带有双引号,比如:
SQL>
SQL> show user
USER 为 "SYS"
SQL> create user "zhao" identified by zhao_ABC_#123 default tablespace users;
用户已创建。
SQL> drop user zhao;
drop user zhao
*
第 1 行
出现错误:
ORA-01918: 用户 'ZHAO' 不存在
SQL> drop user "zhao";
用户已删除。
从上面的样例来看,用户名称带有双引号,则删除时也带有双引号才行,值得提醒的是:如果你采用带有双引号的方法创建用户的话,那么要访问该用户的对象也要加双引号,作者在这里建议不要带有双引号。
§1.3 如何使用强口令(Strong Password)
§1.3.1 理解Oracle 11g 版本默认口令管理
Oracle11g版本虽然提供了很强安全功能。但是,默认情况,Oracle11g系统并没有启用强口令管理,比如:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
--
SQL> --使用保留字修改口令
SQL> ALTER user scott identified by SESSION_CACHED_CURSORS ;
用户已更改。
SQL> ALTER user scott identified by RETURING ;
用户已更改。
SQL> --使用保留字给用户命名:
SQL> CREATE user RETURING identified by RETURING ;
用户已创建。
从上面的试验结果来看,我们给出很简单的口令,Oracle 11g 页允许通过,显然,默认情况下,口令的管理并不严格。
§1.3.2 如何启用Oracle 11g强口令管理
Oracle11g版本与之前版本类似,也提供了严谨的口令管理功能,但是,需要DBA进行启用,主要的启用操作非常简单,详细下面的脚本:
--登录到sysdba
SQL> col profile for a20
SQL> col resource_name for a28
SQL> select * from dba_profiles where resource_type='PASSWORD'
2 order by profile;
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
-------------------- ---------------------------- ---------------- --------------------------------------------------------------------------------
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LIFE_TIME PASSWORD 180
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7
MONITORING_PROFILE PASSWORD_GRACE_TIME PASSWORD DEFAULT
MONITORING_PROFILE PASSWORD_LOCK_TIME PASSWORD DEFAULT
MONITORING_PROFILE PASSWORD_VERIFY_FUNCTION PASSWORD DEFAULT
MONITORING_PROFILE PASSWORD_REUSE_TI
ME PASSWORD DEFAULT
MONITORING_PROFILE PASSWORD_LIFE_TIME PASSWORD DEFAULT
MONITORING_PROFILE FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED
MONITORING_PROFILE PASSWORD_REUSE_MAX PASSWORD DEFAULT
已选择14行。
上面的查询结果中PASSWORD_VERIFY_FUNCTION 项为 NULL,表明系统没有启用严格口令管理。需要DBA 进行下面的启用操作:
1.以 sysdba 运行 utlpwdmg.sql 脚本:
SQL>
SQL> show user
USER 为 "SYS"
--
SQL> @E:\app\dell\product\11.2.0\dbhome_2\RDBMS\ADMIN\utlpwdmg.sql
函数已创建。
配置文件已更改
函数已创建。
2.以 sysdba 修改profile中的口令验证函数(PASSWORD_VERIFY_FUNCTION)项:
SQL>
SQL> --然后设置profile使用该函数来检查密码即可
SQL> ALTER PROFILE default Limit PASSWORD_VERIFY_FUNCTION verify_function_11G;
配置文件已更改
SQL> create user nls_sort identified by zhao_ABC
2 default tablespace USERS;
create user nls_sort identified by zhao_ABC
*
第 1 行出现错误:
ORA-28003: 指定口令的口令验证失败
ORA-20008: Password must contain at least one digit, one character
SQL> CREATE user nls_sort identified by abc_123_ZHAO#
2 default tablespace USERS;
用户已创建。
3.随时可屏蔽PASSWORD_VERIFY_FUNCTION严格口令管理功能,你可使用:
--停止密码检验函数:
SQL>alter profile DEFAULT limit password_verify_function null;
§1.4 Oracle 11g 安全性相关参数
一般来说,Oracle 系统增加新功能对应相关的新参数,下面是Oracle 11g 版本在安全方面的新增参数的使用说明。
§1.4.1 sec_case_sensitive_logon参数
一直以来,Oracle 系统的口令不分大小写,但为了安全的增强,Oracle 11g 版本新增加sec_case_sensitive_logon参数,以启用口令的大小区别功能。这个参数的语法如下:
sec_case_sensitive_logon={true | false}
当参数设置 为TRUE 时表示启用口令大小写区别功能。
§1.4.2 防止Dos攻击参数
近年来,黑客开始重视数据库的攻击,对于Oracle 系统来说,为防止 DoS 攻击,新增加了sec_protocol_error_further_action和sec_protocol_error_trace_action参数,sec_protocol_error_further_action参数的语法为:
sec_protocol_error_further_action={ CONTINUE | (DELAY,integer) | (DROP,integer) }
CONTINUE : 这是默认值,就不是進行任何处理
DROP : 去除使用者的登入权限
DELAY : 延长使用者的再入登入的间隔时间,单位是秒
另外,sec_protocol_error_trace_action参数的语法如下:
sec_protocol_error_trace_action={ NONE | TRACE | LOG | ALERT }
NONE : 沒有动作
TRACE : 默认值,写入trace中
LOG : 写入alert log中
ALERT : 由dba手动或OEM中设定alert信息
§1.4.3 防止强力攻击参数
为了防止任何可能的强力攻击时,可设置sec_max_failed_login_attempts 参数,这个参数语法如下:
sec_max_failed_login_attempts={10|1 to unlimited}
当设置为unlimited 时,攻击者可进行多次的试图登录。
§1.4.4 sec_return_server_release_banner
这个参数了设置是否回传 Oracle 版本的相关信息到连接的客户端,语法如下:
可设定不回传oracle版本相关的信息:sec_return_server_release_banner={true | false}
当参数设置为TRUE时,不回相关信息。
§1.5 Oracle 11g 用户默认口令
Oracle 11g 版本在安全方面除了增加上面的功能外,也对使用默认口令的用户进行监控,还新增加数据字典DBA_USERS_WITH_DEFPWD用于记录使用默认口令的用户,下面简单的试验操作:
--登录到sysdba
SQL> conn / as sysdba
已连接。
SQL> alter user scott identified by change_on_install;
用户已更改。
SQL> select * from dba_users_with_defpwd where username = 'SCOTT';
USERNAME
------------------------------
SCOTT