密码大小写敏感是Oracle 11g数据库默认的一个新特性,数据库配置助手(DBCA)在创建数据库期间允许你将这个设置返回到11g以前的功能。
SEC_CASE_SENSITIVE_LOGON初始化参数控制密码大小写是否敏感,如果现有应用程序与11g的认证过程冲突,你可以使用ALTER SYSTEM命令将这一功能关闭。
SQL> SHOW PARAMETER SEC_CASE_SENSITIVE_LOGONNAME TYPE VALUE------------------------------------ ----------- ------------------------------sec_case_sensitive_logon boolean TRUESQL> SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;System altered.SQL> 下面的代码说明了密码大小写敏感的功能,首先,将SEC_CASE_SENSITIVE_LOGON初始化参数设置为TRUE,然后创建一个新用户,其密码包含大小写字母。
CONN / AS SYSDBAALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;CREATE USER test2 IDENTIFIED BY Test2;GRANT CONNECT TO test2; 使用新创建的用户正确的连接字符和大小写错误的密码进行连接尝试,会看到大小写敏感功能起作用了。
SQL> CONN test2/Test2Connected.SQL> CONN test2/test2ERROR:ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to ORACLE.SQL> 将SEC_CASE_SENSITIVE_LOGON初始化参数设置为FALSE后就不区分密码大小写了。
CONN / AS SYSDBAALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;SQL> CONN test2/Test2Connected.SQL> CONN test2/test2Connected.SQL> 需要记住的是,即使大小写敏感密码参数没有启用,在保存密码时也是区分了大小写的,以便以后在启用大小写敏感参数时有效,下面的代码先禁用了大小写敏感密码,然后创建了一个包含大小写字符密码的用户。
CONN / AS SYSDBAALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;CREATE USER test3 IDENTIFIED BY Test3;GRANT CONNECT TO test3; 正如你预料之中的那样,登陆时不用考虑密码的大小写。
如果我们启用了大小写敏感参数,认证过程就会立即启用大小写验证。
CONN / AS SYSDBAALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;SQL> CONN test3/Test3Connected.SQL> CONN test3/test3ERROR:ORA-01017: invalid username/password; logon deniedWarning: You are no longer connected to ORACLE.SQL> DBA_USERS视图包括了一列PASSWORD_VERSIONS,它表示密码是由哪个数据库版本创建的或最后修改的。
SQL> SELECT username, password_versions FROM dba_users;USERNAME PASSWORD------------------------------ --------TEST 10G 11GSPATIAL_WFS_ADMIN_USR 10G 11GSPATIAL_CSW_ADMIN_USR 10G 11GAPEX_PUBLIC_USER 10G 11G...SYSTEM 10G 11GSYS 10G 11GMGMT_VIEW 10G 11GOUTLN 10G 11G32 rows selected.SQL> 用户如果是从Oracle 10g导入的,那么PASSWORD_VERSIONS的值就是"10G",维护区分大小写的密码不依赖于SEC_CASE_SENSITIVE_LOGON参数设置。假设SEC_CASE_SENSITIVE_LOGON参数被设置为TRUE,密码立即变为大小写敏感。
orapwd工具的ignorecase参数允许你控制在密码文件中的密码是否大小写敏感,它的默认值是"n",即默认大小写敏感。如果特权用户(SYSDBA和SYSOPER)是从之前的数据库版本中导入的,它们的密码也会包括在密码文件中,这些用户将会保留大小写敏感的密码,直到密码被修改。
要在密码文件中创建大小写敏感的密码,使用ingnorecase=y选项重新创建密码文件即可。 $ orapwd file=orapwDB11Gb entries=100 ignorecase=y password=mypassword 数据库连接的密码也是大小写敏感的,下面列出了在不同数据库版本之间连接时需要注意的问题。
◆ 11g连接到11g:创建数据库连接时,密码必须与远程数据库用户的密码大小写一致。 ◆11g连接到11g以前的数据库:创建数据流连接时用的密码大小写随意,因为远程数据库会忽略大小写的。 ◆11g以前的数据库连接到11g:必须将远程用户的密码全部修改为大写,只有这样才能通过11g以前的数据库验证。 | | | | | | |