在 Oracle 数据库中,DB Link(Database Link)权限主要涉及创建、使用、删除以及跨用户访问的权限控制。下面按常见场景系统说明。
CREATE DATABASE LINK dblink_name
CONNECT TO remote_user IDENTIFIED BY password
USING 'tns_name';
所需权限:
CREATE DATABASE LINK
授予方式:
GRANT CREATE DATABASE LINK TO user_name;
CREATE PUBLIC DATABASE LINK dblink_name
CONNECT TO remote_user IDENTIFIED BY password
USING 'tns_name';
所需权限:
CREATE PUBLIC DATABASE LINK
授予方式:
GRANT CREATE PUBLIC DATABASE LINK TO user_name;
⚠️ 通常需要 DBA 权限或显式授权
| DB Link 类型 | 删除权限 |
|---|---|
| 私有 DB Link | 所有者 |
| 公有 DB Link | 需要 DROP PUBLIC DATABASE LINK |
DROP PUBLIC DATABASE LINK dblink_name;
-- 用户 A 创建 DB Link
CREATE DATABASE LINK dblink_a ...
-- 用户 A 创建视图
CREATE VIEW v_remote_table AS
SELECT * FROM remote_table@dblink_a;
-- 授权给 B
GRANT SELECT ON v_remote_table TO user_b;
✅ 优点
❌ Oracle 不支持:
GRANT SELECT ON dblink_name TO user;
DB Link 是用户级对象,不能像表一样授权。
即使本地权限正确,远程数据库也要有权限
GRANT SELECT, INSERT, UPDATE, DELETE ON remote_table TO remote_user;
否则会报错:
ORA-01031: insufficient privileges
SELECT * FROM session_privs
WHERE privilege LIKE '%DATABASE LINK%';
SELECT * FROM user_db_links;
SELECT * FROM dba_db_links;
-- DBA 授权
GRANT CREATE DATABASE LINK TO user_a;
-- user_a 创建 DB Link
CREATE DATABASE LINK dblink1
CONNECT TO remote_user IDENTIFIED BY pwd
USING 'orcl';
-- user_a 创建视图
CREATE VIEW v_remote AS
SELECT * FROM remote_tab@dblink1;
-- 授权
GRANT SELECT ON v_remote TO user_b;
| 操作 | 所需权限 |
|---|---|
| 创建私有 DB Link | CREATE DATABASE LINK |
| 创建公有 DB Link | CREATE PUBLIC DATABASE LINK |
| 删除公有 DB Link | DROP PUBLIC DATABASE LINK |
| 其他用户使用私有 DB Link | 通过视图/同义词 |
| 使用远程对象 | 远程用户权限 |
如果你愿意,我可以:
只要告诉我你的 Oracle 版本和实际场景即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。