zoukankan      html  css  js  c++  java
  • 通过修改基表(link$)让非public dblink变为public

    有些朋友创建了一个非public的dblink,现在该数据库的其他用户需要去使用该dblink,在正常情况下无访问权限,需要重新建一个dblink,或者将原dblink修改为public。但是由于忘记了原dblink的目标段的密码,使得创建或者修改dblink的步骤无法进行下去。这里通过修改基表(link$),解决该问题。

    创建dblink

    SQL> show user;
    USER is "SYS"
    SQL> create database link "xff_dblink"
      2  connect to TEST
      3  identified by "test"
      4  using '11.1.1.1:1521/mcrm';
     
    Database link created.
     
    SQL> select * from dba_db_links where db_link like 'XFF_DBLINK%';
     
    OWNER DB_LINK                                     USERN HOST               CREATED
    ----- ------------------------------------------- ----- ------------------ --------
    SYS   XFF_DBLINK.REGRESS.RDBMS.DEV.US.ORACLE.COM  TEST  11.1.1.1:1521/mcrm 29-MAR-12
     
    SQL> select sysdate from dual@xff_dblink;
     
    SYSDATE
    ---------
    29-MAR-12
     
    SQL> CONN TEST/TEST
    Connected.
    SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;
    SELECT SYSDATE FROM DUAL@XFF_DBLINK
                             *
    ERROR at line 1:
    ORA-02019: connection description for remote database not found
    --该dblink不是public的,所以test用户无权访问

    dblink变为public类型

    SQL> CONN / AS SYSDBA
    Connected.
    SQL> set long 1000
    SQL> select  text from dba_views where view_name='DBA_DB_LINKS';
     
    TEXT
    -------------------------------------------------------------------
    select u.name, l.name, l.userid, l.host, l.ctime
    from sys.link$ l, sys.user$ u
    where l.owner# = u.user#
    --查询出dblink相关的基表有link$和user$
     
    SQL> desc sys.link$
     Name                          Null?    Type
     ----------------------------- -------- --------------------
     OWNER#                        NOT NULL NUMBER
     NAME                          NOT NULL VARCHAR2(128)
     CTIME                         NOT NULL DATE
     HOST                                   VARCHAR2(2000)
     USERID                                 VARCHAR2(30)
     PASSWORD                               VARCHAR2(30)
     FLAG                                   NUMBER
     AUTHUSR                                VARCHAR2(30)
     AUTHPWD                                VARCHAR2(30)
     PASSWORDX                              RAW(128)
     AUTHPWDX                               RAW(128)
     
    SQL> select owner# from sys.link$ where name like 'XFF_DBLINK%';
     
        OWNER#
    ----------
             0
    --XFF_DBLINK对应的用户标识记录在link$.owner#中
     
    SQL> SELECT USER#,NAME FROM USER$ WHERE name in ('SYS','PUBLIC');
     
         USER# NAME
    ---------- ------------------------------
             1 PUBLIC
             0 SYS
    --现link$.owner#值为0,表示该dblink所属用户为SYS,现在让该dblink变为public
    --现需要让该dblink变为public,需要做的是修改link$.owner#的值为1
     
    SQL> UPDATE LINK$ SET OWNER#=1 WHERE name like 'XFF_DBLINK%';
     
    1 row updated.
     
    SQL> COMMIT;
     
    Commit complete.
     
    --需要刷新shared_pool
    SQL> ALTER SYSTEM FLUSH SHARED_POOL;
     
    System altered.
     
    --查看dblink所属者,已经修改为public
    SQL> select owner from dba_db_links where db_link like 'XFF_DBLINK%';
     
    OWNER
    ----------
    PUBLIC
     
    --测试dblink是否成功
    SQL> CONN TEST/TEST
    Connected.
    SQL> SELECT SYSDATE FROM DUAL@XFF_DBLINK;
     
    SYSDATE
    ---------
    29-MAR-12
  • 相关阅读:
    Chapter 03Using SingleRow Functions to Customize Output(03)
    Chapter 03Using SingleRow Functions to Customize Output(01)
    Chapter 04Using Conversion Functions and Conditional ExpressionsNesting Functions
    Chapter 04Using Conversion Functions and Conditional ExpressionsGeneral Functions
    Chapter 11Creating Other Schema Objects Index
    传奇程序员John Carmack 访谈实录 (zz.is2120)
    保持简单纪念丹尼斯里奇(Dennis Ritchie) (zz.is2120.BG57IV3)
    王江民:传奇一生 (zz.is2120)
    2011台湾游日月潭
    2011台湾游星云大师的佛光寺
  • 原文地址:https://www.cnblogs.com/azhqiang/p/4015784.html
Copyright © 2011-2022 走看看