密码大小写敏感是Oracle g数据库默认的一个新特性数据库配置助手(DBCA)在创建数据库期间允许你将这个设置返回到g以前的功能
SEC_CASE_SENSITIVE_LOGON初始化参数控制密码大小写是否敏感如果现有应用程序与g的认证过程沖突你可以使用ALTER SYSTEM命令将这一功能关闭
SQL>SHOWPARAMETERSEC_CASE_SENSITIVE_LOGON
NAMETYPEVALUE
sec_case_sensitive_logonbooleanTRUE
SQL>
SQL>ALTERSYSTEMSETSEC_CASE_SENSITIVE_LOGON=FALSE;
Systemaltered
SQL>
下面的代码说明了密码大小写敏感的功能首先将SEC_CASE_SENSITIVE_LOGON初始化参数设置为TRUE然后创建一个新用户其密码包含大小写字母
CONN/ASSYSDBA
ALTERSYSTEMSETSEC_CASE_SENSITIVE_LOGON=TRUE;
CREATEUSERtestIDENTIFIEDBYTest;
GRANTCONNECTTOtest;
使用新创建的用户正确的连接字符和大小写错误的密码进行连接尝试会看到大小写敏感功能起作用了
SQL>CONNtest/Test
Connected
SQL>CONNtest/test
ERROR:
ORA:invalidusername/password;logondenied
Warning:YouarenolongerconnectedtoORACLE
SQL>
将SEC_CASE_SENSITIVE_LOGON初始化参数设置为FALSE后就不区分密码大小写了
CONN/ASSYSDBA
ALTERSYSTEMSETSEC_CASE_SENSITIVE_LOGON=FALSE;
SQL>CONNtest/Test
Connected
SQL>CONNtest/test
Connected
SQL>
需要记住的是即使大小写敏感密码参数没有启用在保存密码时也是区分了大小写的以便以后在启用大小写敏感参数时有效下面的代码先禁用了大小写敏感密码然后创建了一个包含大小写字符密码的用户
CONN/ASSYSDBA
ALTERSYSTEMSETSEC_CASE_SENSITIVE_LOGON=FALSE;
CREATEUSERtestIDENTIFIEDBYTest;
GRANTCONNECTTOtest;
正如你预料之中的那样登陆时不用考虑密码的大小写
如果我们启用了大小写敏感参数认证过程就会立即启用大小写验证
CONN/ASSYSDBA
ALTERSYSTEMSETSEC_CASE_SENSITIVE_LOGON=TRUE;
SQL>CONNtest/Test
Connected
SQL>CONNtest/test
ERROR:
ORA:invalidusername/password;logondenied
Warning:YouarenolongerconnectedtoORACLE
SQL>
DBA_USERS视图包括了一列PASSWORD_VERSIONS它表示密码是由哪个数据库版本创建的或最后修改的
SQL>SELECTusernamepassword_versionsFROMdba_users;
USERNAMEPASSWORD
TESTGG
SPATIAL_WFS_ADMIN_USRGG
SPATIAL_CSW_ADMIN_USRGG
APEX_PUBLIC_USERGG
SYSTEMGG
SYSGG
MGMT_VIEWGG
OUTLNGG
rowsselected
SQL>
用户如果是从Oracle g导入的那么PASSWORD_VERSIONS的值就是G维护区分大小写的密码不依赖于SEC_CASE_SENSITIVE_LOGON参数设置假设SEC_CASE_SENSITIVE_LOGON参数被设置为TRUE密码立即变为大小写敏感
orapwd工具的ignorecase参数允许你控制在密码文件中的密码是否大小写敏感它的默认值是n即默认大小写敏感如果特权用户(SYSDBA和SYSOPER)是从之前的数据库版本中导入的它们的密码也会包括在密码文件中这些用户将会保留大小写敏感的密码直到密码被修改
要在密码文件中创建大小写敏感的密码使用ingnorecase=y选项重新创建密码文件即可
$ orapwd file=orapwDBGb entries= ignorecase=y password=mypassword
数据库连接的密码也是大小写敏感的下面列出了在不同数据库版本之间连接时需要注意的问题
;g连接到g创建数据库连接时密码必须与远程数据库用户的密码大小写一致
; g连接到g以前的数据库创建数据流连接时用的密码大小写随意因为远程数据库会忽略大小写的
; g以前的数据库连接到g必须将远程用户的密码全部修改为大写只有这样才能通过g以前的数据库验证