从另一个用户创建私有 dblink

问题描述

我有以下情况:

  • ADMIN_USER - 特权用户,可以执行他想要的任何东西,我们也用它来将脚本部署到不同的环境
  • REGULAR_USER - 只是一个包含可执行代码的常规模式

我想为 REGULAR_USER 下的 ADMIN_USER 创建私有 dblink(在部署我的脚本时)。

问题:

  1. 我能做到吗?
  2. 如果是,那么我应该给 REGULAR_USER 什么权限/我应该做什么?

Oracle 版本是 11gR2

解决方法

特权用户可以间接为其他用户创建数据库链接。特权用户必须临时授予普通用户 CREATE DATABASE LINK,在普通用户的架构中创建一个临时过程来创建数据库链接,执行该过程,然后删除临时过程和特权。

create user regular_user identified by regular_user;
grant create session to regular_user;

grant create database link to regular_user;

create or replace procedure regular_user.create_db_link is
begin
    execute immediate
    q'[
        create database link test_link
        connect to regular_user
        identified by "regular_user"
        using 'orcl'
     ]';
end;
/

begin
    regular_user.create_db_link;
end;
/

drop procedure regular_user.create_db_link;

revoke create database link from regular_user;
,

回答您的第一个问题:不,您无法做到这一点。

私有数据库链接必须由链接的所有者创建。您不能在另一个模式中创建私有链接,也不能(直接)使用另一个模式中的私有链接,即使是 SYS 用户。您可以间接使用私有链接,例如,如果其他架构中也有引用该链接的视图。

因此,在您的情况下,REGULAR_USER 必须具有 CREATE DATABASE LINK 权限,并且必须为链接执行 DDL - ADMIN_USER 不能这样做。如果 ADMIN_USER 想要使用该链接,那么 REGULAR_USER 还必须创建一个视图来引用链接另​​一端的某些内容,并使该视图可供 ADMIN_USER 选择。