14

我们有一个 Oracle DBMS (11g) 和以下配置:

  • 数据库用户“MYUSER”
  • 两个模式“MYUSER”和“SCHEMA_B”
  • 用户“MYUSER”可以访问“SCHEMA_B”并对其表具有读取权限
  • 位于“SCHEMA_B”中的公共数据库链接“DB_LINK”
  • 直接使用 DB 用户“SCHEMA_B”时,DB_LINK 正在工作

问题:以“MYUSER”身份登录时,使用“SCHEMA_B”的 DB 链接访问表的正确语法是什么?有可能这样做吗?

我已经尝试了几个星座,但都不起作用:

select * from dual@"DB_LINK"
select * from dual@"SCHEMA_B"."DB_LINK"
select * from dual@SCHEMA_B."DB_LINK"
select * from dual@SCHEMA_B.DB_LINK
select * from SCHEMA_B.dual@DB_LINK
select * from "SCHEMA_B".dual@DB_LINK

我收到的错误消息是:ORA-02019。00000 - “未找到远程数据库的连接描述”

感谢您的任何建议!

4

2 回答 2

19

我认为不可能在多个用户之间共享数据库链接,但不是全部。它们要么是私有的(仅适用于一个用户),要么是公共的(适用于所有用户)。

解决此问题的一个好方法是在 SCHEMA_B 中创建一个视图,该视图公开您要通过数据库链接访问的表。这也将使您可以很好地控制允许从数据库链接中选择的人员,因为您可以控制对视图的访问。

这样做:

create database link db_link... as before;
create view mytable_view as select * from mytable@db_link;
grant select on mytable_view to myuser;
于 2012-09-27T15:28:53.380 回答
0

我使用上面提供的解决方案时遇到了同样的问题 - 我删除了 SYNONYM,创建了一个与同义词同名的 VIEW。它有一个使用 dblink 的选择,并将 GRANT SELECT 提供给另一个模式它工作得很好。

于 2020-12-23T00:28:01.217 回答