2016-07-19 30 views
0

我在一個oracle數據庫中有一個模式作爲ui_prod。我讓我的DBA團隊人員創建與ui_prod完全相同的模式,但只讀並將其命名爲ui_prod_readonly。通常我會使用Oracle SQL開發人員來連接數據庫,並直接使用如下所示的表名進行查詢。DBA只讀帳戶

--Connect to ui_prod 
select * from table 

但爲什麼我要求把所有者名稱盈時查詢只讀模式,他們爲我創造,因爲沒有把它時,我得到錯誤的表不存在。

--Connect to ui_prod_readonly 
select * from ui_prod.table 

我有項目文件硬編碼SQL查詢只有表名稱和前面添加所有者名稱將導致許多更改和努力。任何人都可以解釋我嗎?或者提供給我任何文件/鏈接來閱讀。謝謝

回答

1

你應該看看同義詞,顯然你連接到數據庫的用戶不是對象的所有者。因此,要查看對象,必須在模式名稱(對象本身的所有者)上預先加上名稱。

http://www.techonthenet.com/oracle/synonyms.php

CREATE OR REPLACE SYNONYM ui_prod_readonly.synonym_name 
    FOR ui_prod.object_name 

在我看來,你的數據庫管理員還沒有創建另一組表,而只是授予現有的表來ui_prod_readonly用戶。

1

當您登錄到Oracle,目前的架構是您用於登錄的用戶名。所以,如果你有ui_prod_readonly Oracle日誌中檢查架構表,如果你不與限定它所有者(=模式)。

如果你想改變目前的模式,這樣你就不需要完全限定表,你可以做到這一點與ALTER SESSION

alter session set current_schema = ui_prod; 

一旦你這樣做,你不需要用所有者完全限定表格(=模式)。

1

如果你需要一個用戶讀取數據僅供 其簡單的創建新的用戶,並授予它只是選擇權限

您可以使用創建用戶並授予SELECT權限

CREATE USER [user] IDENTIFIED BY [your_password]; 
grant select on table to [user]