2016-07-14 51 views
-1

我有一個關於如何在Oracle PL/SQL中使用數據庫鏈接的問題。假設我有一個數據庫鏈接(Database2)在我當前的數據庫中創建,並且正在使用它來訪問第二個數據庫。例如:Oracle數據庫鏈接授予/撤銷角色

select *from [email protected]; 

Update [email protected] 
set Comment = 'Hello world!' 
where CustomerID = 123; 

這些都成功工作。

但是讓我們說我想授予角色或從數據庫2中的用戶撤銷角色。可以通過我的數據庫鏈接完成嗎?如果是這樣,語法是什麼?

如果我打開一的Database2 PL/SQL會話,語法是:

REVOKE some_role FROM bsmith; 

GRANT some_other_role TO rjones; 

有什麼辦法用我的數據庫鏈接從我的原始數據庫做到這一點?

+0

爲什麼要對數據庫做鏈接DDL?這通常是不允許的,通常是一個壞主意。您可以在Database2上創建一個存儲過程,它執行所需的任何DDL,然後授予數據庫鏈接用戶對該過程的執行訪問權限。或者你可能會變得非常棘手,並安排一份工作來運行數據庫2,這實際上可以完成這項撥款,但這是一個相當複雜的架構。 –

+0

我在寫一個存儲過程,它將從我的生產數據庫中取出一些特定的記錄和權限,並將它們複製到我的開發或測試數據庫中。我可以複製記錄沒有問題,但授予權限變得更加棘手。 – MrMike

回答

0

您可以通過調用遠程數據庫上的DBMS_SQL包做DDL在DB鏈接:

declare 
v_cursor NUMBER; 
v_ind  number; 
v_ret  varchar2(2000); 
BEGIN 
    v_cursor := [email protected]; 
    [email protected](v_cursor, 'create sequence xyz_seq', dbms_sql.native); 
    v_ind := [email protected](v_cursor); 
end; 
/
+0

好主意。謝謝,加里。 – MrMike

+0

或'[email protected]()'可能會更簡單(未經測試,但我隱約記得使用20年前)。 –

相關問題