Jef*_*eff 7 oracle dblink owner
创建数据库链接的典型语法如下:
create database link remote_db_link
connect to remote_user
identified by remote_password
using 'remote_db'
Run Code Online (Sandbox Code Playgroud)
但我希望我的数据库链接在创建后由另一个帐户拥有.有没有办法做到这一点?
以下不起作用:
create database link anotheruser.remote_db_link
connect to remote_user
identified by remote_password
using 'remote_db'
Run Code Online (Sandbox Code Playgroud)
spe*_*593 15
Sathya是正确的,因为CREATE DATABASE LINK语法不允许在另一个模式中创建数据库链接.然而...
替代方法
它IS可以创建其他用户的模式的数据库链接,只要anotheruser有CREATE DATABASE LINK特权,您已连接用户拥有CREATE ANY PROCEDURE的特权.
这是我使用的解决方法:
create procedure anotheruser."tmp_doit_200906121431"
is
begin
execute immediate '
create database link remote_db_link
connect to remote_user
identified by remote_password
using ''remote_db'' ';
end;
/
begin
anotheruser."tmp_doit_200906121431";
end;
/
drop procedure anotheruser."tmp_doit_200906121431"
/
让我们放松一下吧.首先,我在anotherusers模式中创建一个过程; 此过程包含CREATE DATABASE LINK我要运行的语句.
执行该过程时,它将作为过程的所有者运行,以便CREATE DATABASE LINK执行该语句anotheruser.
该过程的名称并不重要,除了我需要确保它不与任何现有的对象名冲突.我使用小写字母(用双引号括起过程名称),使用"tmp"将此对象标记为"临时",并使用当前yyyymmddhh24miss作为过程名称的一部分.(我通常运行DBA_OBJECTS的查询来检查匹配的object_name是否不存在.)
对于"一次性"类型的管理功能,这是一种可行的解决方法.我更喜欢这个替代方案:保存另一个用户的密码,更改密码,以用户身份连接,以及将另一个用户的密码重置为已保存的密码.)
| 归档时间: |
|
| 查看次数: |
23377 次 |
| 最近记录: |