Oracle 不知使用者的密碼時,如何獲取dblink建立語句

maohaiqing0304發表於2016-07-26


標題: 
作者:lōττéry©版權所有[文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任.]


* 9i及以前版本可透過 dba_db_links的檢視原表sys,link$的password欄位獲取密碼;
SQL:select u.name,l.password/*9i版本會記錄密碼*/, l.name, l.userid, l.host, l.ctime,l.passwordx
     from sys.link$ l, sys.user$ u
     where l.owner# = u.user#;  

* 9i後,password 欄位為空,且sys.link$多了一個passwordx(raw加密密碼欄位)

* 11.2.0.4以前,可透過SELECT to_char(dbms_metadata.get_ddl('DB_LINK','ZBTMS_STANDBY','PUBLIC')) FROM dual;》獲取建立dblink語句或者11.2.0.4及以後版本方法
 dbms_metadata.get_ddl獲取語句如下:    
  CREATE PUBLIC DATABASE LINK "ZBTMS_STANDBY
   CONNECT TO "USR_QUERY" IDENTIFIED BY VALUES ':1'/*比正常dblink建立語句多values關鍵字(values值在sys.link$.passwordx欄位獲取 )*/
   USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.240.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ZB_TMS)))' ;

* 11.2.0.4及以後版本,若透過dbms_metadata.get_ddl獲取語句直接執行會提示無效的values關鍵字;可透過plsql developer 工具匯出sys.links的insert語句再其他庫中執行即可
     方法1、工具-->匯出表-->部分範圍
     
      aa.sql文字內容如下:
     
      更改aa.sql檔案dblink名稱name部分(更改為LOTTERY)儲存並在測試環境進行匯入;
       SQL> SELECT count(1) count_ FROM  LINK$  where name='LOTTERY';
       count_
       ----------
       匯入:
       SQL> @C:\Users\Administrator\Desktop\aa.sql
       PL/SQL Developer import file
       Created on 2016年7月26日 by Administrator
       Loading LINK$...
       1 records loaded
       Done. 
       驗證:
       SQL> SELECT * FROM dual@LOTTERY;
       DUMMY
       -----
       X
       SQL>

      方法2、在sql視窗執行範圍查詢
       查詢:SELECT owner#, name,host, userid, flag,passwordx FROM LINK$  where name='ZBTMS_STANDBY';
       匯出:<Export Query Results>-->sql file 另存為C:\Users\Administrator\Desktop\aa.sql
       匯入:insert into LINK$ (OWNER#, NAME, HOST, USERID, FLAG, PASSWORDX,ctime/*補充必填項*/ )
values (1,'LOTTERY','(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.240.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ZB_TMS)))','USR_QUERY',2, '06B39E07640DB9E1AF7609A48EB338AD8F7C078A30C75D249CE0E7D7BF4C471690A0FF15945B38185BEA41A611AC756B7FE5154F90CCBD562CA069E300025A24E342F0DE1BF56215EC52E2B6A86B4E7468EF87C7A1238D755F96BAF2CFF78918E7745CBBB',sysdate);
       1 row inserted
       驗證:
       SQL> SELECT * FROM dual@LOTTERY;
       DUMMY
       -----
       X
       SQL>

   擴充套件:
     select utl_raw.cast_to_varchar2('值') from dual;  -->此passwordx 加密欄位透過此函式轉換 獲取的是亂碼....
     utl_raw.cast_to_raw('varchar2值');--將varchar2轉換為raw型別
     utl_raw.cast_to_varchar2('raw值');--將raw轉換為varchar2型別

  【源於微信群技術分享,特此整理】 若有書寫錯誤,表達錯誤,請指正...


此條目發表在  Oracle  分類目錄。將加入收藏夾。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28602568/viewspace-2122564/,如需轉載,請註明出處,否則將追究法律責任。

相關文章