Ssms

Oracle 連結伺服器顯示來自 sql server management studio 中所有模式的所有表

  • February 12, 2019

我在 sql server management studio 中創建了一個連接到 oracle 數據庫( 12c )的連結伺服器。我將本地使用者映射到 oracle db 中的特殊遠端使用者。連接工作正常。奇怪的是,我能夠看到所有模式中的所有表。

我嘗試了以下查詢

SELECT *
  FROM OPENQUERY(ORCL_LINK, 'SELECT  table_name, owner FROM  all_tables ORDER BY  owner, table_name')

結果,我看到了所有模式和所有表。當我在我的 oracle 數據庫中執行此查詢時,我只看到選項卡

我認為連結伺服器連接正在遠端使用者的安全上下文中執行,但似乎並非如此。我錯了嗎?

更新 1

Oracle SQL 開發人員視圖

Oracle SQL Developer 僅向我顯示我是所有者的表,但當我執行此查詢時

SELECT * FROM USER_TAB_PRIVS WHERE privilege = 'SELECT';

我看到很多其他的表。這些表在連結伺服器連接中可見。

剛剛在 SQL Server 上執行它。只要您擁有正確的 USER 作為連結伺服器的憑據,它就會為您提供使用者擁有的表以及使用者具有 SELECT 訪問權限的表。

要證明這一點,請撤銷對該使用者(在 Oracle 端)的其中一個表上的選擇,它將不再顯示在您提供的查詢中。

從LINKUSER撤銷對****錶的選擇;

我只是這樣做了,少了一張桌子。一旦我將 Grant 添加回來,該表在查詢中再次返回。

引用自:https://dba.stackexchange.com/questions/229416