从另一个用户创建私有 dblink

Create private dblink from another user

我有以下情况:

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

问题:

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

Oracle 版本为 11gR2

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

私人数据库 links 必须 由 link 的所有者创建。您不能在另一个模式中创建私有 link,并且不能(直接)在另一个模式中使用私有 link,即使是 SYS 用户也是如此。您可以使用私有 link 间接 如果有 - 例如 - 在其他模式中也有一个引用 link.

的视图

所以在你的情况下,REGULAR_USER 必须拥有 CREATE DATABASE LINK 特权,并且必须为 link 执行 DDL - ADMIN_USER 不能这样做.如果 ADMIN_USER 想要使用那个 link,那么 REGULAR_USER 还必须创建一个视图来引用 link 另一端的某些内容,并使该视图可供 ADMIN_USER.

特权用户可以间接为其他用户创建数据库link。特权用户必须临时授予普通用户 CREATE DATABASE LINK,在普通用户的模式中创建一个临时过程来创建数据库 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;