我们有一个Oracle DBMS(11g)和以下配置:
- 数据库用户“MYUSER”
- 两个模式“MYUSER”和“SCHEMA_B”
- 用户“MYUSER”可以访问“SCHEMA_B”并对其表具有READ权限
- 位于“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 - “找不到远程数据库的连接描述”
谢谢你的任何建议!
我认为不可能在多个用户之间共享数据库链接,但不是全部。它们是私有的(仅限一个用户)或公共的(适用于所有用户)。
解决此问题的一个好方法是在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;
我认为不可能在多个用户之间共享数据库链接,但不是全部。它们是私有的(仅限一个用户)或公共的(适用于所有用户)。
解决此问题的一个好方法是在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;