永不言弃,简单就好
每一个付出,都有回报,永远不放弃
随笔- 110  文章- 0  评论- 29 
博客园  首页  新随笔  联系  管理  订阅 订阅
ORACLE 查询DBLINK中设定的密码

private的db link可以查到密码, public 的dblink 也可以看到密码。只是需要用sys用户登录查询。 

查询dblink的user 密码,用sys 登陆

SELECT * FROM SYS.link$;

SELECT *

 FROM SYS.link$ l, SYS.user$ u

 WHERE l.owner# IN (SELECT kzsrorol

                      FROM x$kzsro) AND l.owner# = u.user#;

如果是private 的dblink,就可以用owner登录,查询 user_db_links

Select * from user_db_links;

 

 

 

db link泄露密码的处理

在Oracle 10g前,我们可以通过查看user_db_links视图,来查看到本用户下建立的db link的
username
和password.原因比较简单,可以认为是Oracle的一个安全漏洞。我们看看user_db_links的创建过程就明白了:
create
or replace view user_db_links(db_link, username, password, host, created)

as

select l.name, l.userid, l.password, l.host, l.ctime
from sys
.link$ l
where l
.owner# = userenv('SCHEMAID')
select * from link$
user_db_links视图来源于sys.link$字典表,而在10g前, 对拥有select any table权限的用户来说,是可以访问link$表的。所以要想规避这个漏洞,必须做如下2个操作
1
)revoke select any table 或更高级的权限或角色[比如DBA等]
2)重建user_db_link视图
create
or replace view user_db_links(db_link, username,host, created)

as

select l.name, l.userid, l.host, l.ctime from sys.link$ l where l.owner# = userenv('SCHEMAID')

在Oracle 10g中,Oracle公司也认识到了这个bug,修正了sys.link$的访问权限,除非拥有sysdba权限,否则谁也访问不了。在user_db_links也看不到password

posted on 2010-03-30 12:47 嘎子 阅读(774) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
程序员问答社区,解决您的IT难题
博客园首页博问新闻闪存程序员招聘知识库
Copyright ©2012 嘎子