li
  当前位置:主页 > 性能优化 > 文章内容
li
使用当前用户的数据库链的实现
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:24  

今天在尝试使用当前用户的数据库链的时候发现了一个问题。


在建立一个数据库链的时候,由于不打算将密码输出到屏幕上,因此选择了使用不加CONNECT TO语句的数据库链,也就是说,数据库链会使用当前登陆数据库的用户和密码来尝试连接远端数据库。

这种情况要求当前的用户名和密码与远端数据库中的一致。由于当前用户是一致的,因此只需要通过SQLPLUSPASSWORD命令修改当前用户的密码,就可以保证远端数据库的用户密码和当前登陆用户密码一致,这样不需要将用户密码输出到屏幕,也不会以明文的方式保存到数据库中,还达到了访问远端对象的目的。

不过在操作当中发现了一个有趣的现象,下面通过一个例子来展示说明,不过为了大家可以看得更清楚,这里将PASSWORD命令替换为了ALTER USER IDENTIFIED BY语句:

SQL> CONN YANGTK/YANGTK@YTK92已连接。
SQL> CONN YANGTK/YANGTK@YTK102
已连接。
SQL> ALTER USER YANGTK IDENTIFIED BY TEST;

用户已更改。

SQL> CONN YANGTK/TEST@YTK102已连接。

首先更改YTK102数据库中的用户名密码,以便下面重现问题:

SQL> CREATE DATABASE LINK YTK92 USING 'YTK92';

数据库链接已创建。

SQL> SELECT * FROM GLOBAL_NAME@YTK92;
SELECT * FROM GLOBAL_NAME@YTK92
*
1 行出现错误:
ORA-01017: invalid username/password; logon denied
ORA-02063:
紧接着 line (起自 YTK92)


SQL> DROP DATABASE LINK YTK92;

数据库链接已删除。

SQL> ALTER USER YANGTK IDENTIFIED BY YANGTK;

用户已更改。

SQL> CREATE DATABASE LINK YTK92 USING 'YTK92';

数据库链接已创建。

SQL> SELECT * FROM GLOBAL_NAME@YTK92;
SELECT * FROM GLOBAL_NAME@YTK92
*
1 行出现错误:
ORA-01017: invalid username/password; logon denied
ORA-02063:
紧接着 line (起自 YTK92)

即使修改了当前用户的密码,使其与远端一致,数据库链仍然无法访问,报错不正确的用户名、密码。

只有使用新的密码重新登陆数据库,数据库链才能使用:

IXDBA.NET社区论坛

SQL> CONN YANGTK/YANGTK@YTK102已连接。
SQL> SELECT * FROM GLOBAL_NAME@YTK92;

GLOBAL_NAME
----------------------------------------
YTK92.YTK_THINKPAD

这个现象说明,Oracle在使用当前用户建立数据库链的时候,是通过用户登陆时输入的用户名、密码信息来建立信息的,而不是通过保存在数据库中的用户名、密码信息。登陆是输入的用户名和密码信息保存在当前会话的上下文中。如果用户改变了当前的用户的密码,这个时候只是数据库中保存的密码信息发生了变化,这并不会影响到当前这个已经存在的会话,而且,也不会影响内存中已经保存的用户名、密码信息。

Oracle建立数据库使用的用户名密码并不会由于当前用户修改了密码而有所改变,因此只用重新登陆,输入新的用户名、密码之后,当前用户的数据库链才能使用修改后的密码来建立连接。

这也说明了JOB方式为什么无法使用不带CONNECT TO语句的数据库链。由于JOB的启动不需要输入用户名、密码信息,因此自动运行的JOB就无法包含用户名、密码来建立数据库链连接。而如果用户手工执行JOB,当前会话中保存的用户名、密码就可以用来建立数据库链。




  上一篇: 添加字段对SQL的影响   下一篇: 如何确定导致刷新组刷新失败的物...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·添加字段对SQL的影响
·如何确定导致刷新组刷新失败的物...
·我的oracle笔记,欢迎收看!
·案例解决:一次oracle掉电的处理...
·阿里巴巴公司DBA笔试题
·Oracle数据库ASM功能详解
·Java用OCI驱连Oracle数据库的实现...
·oracle问题小结一:ORACLE常见错...
·Oracle优化经典文章--磁盘I/O和碎...
·案例分析:ORA-25153: Temporary...
·如何确定导致刷新组刷新失败的物...
·函数索引产生隐藏列
·ORA-600(ktsircinfo_num1)错误
·Oracle10201在Enterprise Linux ...
·表异常增大的bug
·数据库升级造成的X_$BH状态异常问...
·9i上使用CONNECT BY访问DUAL表的...
·使用SQL判断一个数是否质数
·缺少GROUP BY表达式可以顺利执行...
·临时表产生REDO过多的bug
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接