从另一个用户创建私有 dblink
Create private dblink from another user
我有以下情况:
ADMIN_USER
- 可以执行任何他想执行的特权用户,我们也用它来将脚本部署到不同的环境
REGULAR_USER
- 只是一个包含可执行代码的常规模式
我想在 ADMIN_USER
下为 REGULAR_USER
创建私有 dblink(在部署我的脚本时)。
问题:
- 我能做到吗?
- 如果是这样,那么我应该给
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;
我有以下情况:
ADMIN_USER
- 可以执行任何他想执行的特权用户,我们也用它来将脚本部署到不同的环境REGULAR_USER
- 只是一个包含可执行代码的常规模式
我想在 ADMIN_USER
下为 REGULAR_USER
创建私有 dblink(在部署我的脚本时)。
问题:
- 我能做到吗?
- 如果是这样,那么我应该给
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;