问题描述
我有以下情况:
我想为 REGULAR_USER
下的 ADMIN_USER
创建私有 dblink(在部署我的脚本时)。
问题:
- 我能做到吗?
- 如果是,那么我应该给
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
选择。