You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle数据库链接(dblink)相关技术咨询

Oracle数据库链接(dblink)相关技术咨询

问题1:如果设置了Oracle dblink,配置的外部数据库是否能访问我的数据库?

哥们,这个得先明确dblink的核心特性——它默认是单向的!你在自己的数据库里创建dblink连接到外部DB,只是赋予了你这边的数据库访问外部DB的权限,反过来外部DB是不能直接访问你的数据库的。

举个实际场景:你在DB_A里建了dblink连到DB_B,那DB_A能正常读/写DB_B的数据,但DB_B如果没做两件事,根本碰不到你的DB_A:

  • 外部DB(DB_B)那边得创建一个指向你的数据库的dblink
  • 你的数据库必须给外部DB用来访问的账号授予对应的权限(比如CREATE SESSION是基础,还要有具体表的SELECT/INSERT等权限)

问题2:有没有办法检查哪些外部数据库被允许通过dblink访问我的数据库?

这个得从几个维度入手,毕竟外部的dblink是在对方库上创建的,你这边没法直接看到对方的配置,但可以从自己库的权限、访问控制和审计记录来排查:

  1. 检查有哪些账号具备远程访问权限
    先查哪些用户拥有远程连接的基础权限,以及创建dblink的权限:

    SELECT grantee, privilege
    FROM dba_sys_privs
    WHERE privilege IN ('CREATE SESSION', 'CREATE DATABASE LINK')
    ORDER BY grantee;
    

    另外,还得查这些用户有没有具体表的操作权限,毕竟就算能连进来,没表权限也没法操作数据:

    SELECT grantee, owner, table_name, privilege
    FROM dba_tab_privs
    WHERE privilege IN ('SELECT', 'INSERT', 'UPDATE', 'DELETE')
    ORDER BY grantee;
    
  2. 检查监听的访问控制配置
    外部DB要连你的库,首先得通过Oracle监听,你可以查看监听配置文件(listener.ora)里的访问控制规则,比如TCP.INVITED_NODES参数,这里会列出被允许连接的IP地址或主机名,能帮你缩小范围。

  3. 查看审计日志(如果开启了审计)
    要是你的数据库开启了审计功能,直接查审计记录就能看到哪些远程主机访问过你的库:

    SELECT os_username, username, machine, timestamp
    FROM dba_audit_session
    WHERE returncode = 0
    ORDER BY timestamp DESC;
    

    这里的machine字段会显示连接来源的主机名或IP,结合权限查询结果,就能大致判断哪些外部DB被允许访问了。

备注:内容来源于stack exchange,提问作者J H

火山引擎 最新活动