以前认为Oracle只是在登陆的时候验证一下用户的密码是否正确,并不会保存或记录下来,但是发现JOB无法使用不指定用户名的数据库链时,就发现可能事实并非如此。
今天在测试一个小例子的时候又确认了这一点:
$ sqlplus test/test
SQL*Plus: Release 10.2.0.3.0 - Production on星期四4月1 10:42:53 2010
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> drop database link test11gr2;
数据库链接已删除。
SQL> create database link test11gr2
2 using '172.25.198.230/test112';
数据库链接已创建。
SQL> select * from global_name@test11gr2;
select * from global_name@test11gr2
*第1行出现错误:
ORA-01017: invalid username/password; logon denied
ORA-02063:紧接着line (起自TEST11GR2)
SQL> CONN TEST/TEST已连接。SQL> select * from global_name@test11gr2;
GLOBAL_NAME
--------------------------------------------------------------------------------
TEST112
SQL> SELECT * FROM V$VERSION@TEST11GR2;
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 Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> conn test/test已连接。SQL> select * from global_name@test11gr2;
select * from global_name@test11gr2
*第1行出现错误:
ORA-01017: invalid username/password; logon denied
ORA-02063:紧接着line (起自TEST11GR2)
在10g环境下,建立了一个不带用户名的数据库链,指向一个11.2的数据库。当数据库链不指定用户名,就会使用当前的用户和密码作为远端数据库的用户名、密码,这要求当前数据库的用户名、密码和远端数据库的用户名、密码一致。
有意思的是,虽然当前数据库和远端数据库的用户名、密码保持一致,但是数据库链并不一定可以正常使用。当用户使用小写密码登陆的时候,数据库链会报用户名密码错误,而如果用户使用大小密码登陆,则数据库链可以正常访问。
虽然在10g中,数据库并不会区分密码的大小写,显然会话将密码信息原封不动的保存在会话的内存中,因此通过数据库链连接远端站点的时候提供的密码也是有大小写的区别的。