我想在管理員用戶擁有的過程中執行一些動態DDL。我想用具有定義權限的技術操作用戶執行此過程(操作用戶不具有create table角色)。通過定義者角色權限在PL/SQL過程中執行動態DDL
問題是'創建表'權限授予管理員用戶通過使用角色,它不允許我執行DDL,因爲它似乎角色不計入命名的PL/SQL塊。
create or replace
PROCEDURE test_permissions AUTHID DEFINER AS
v_query_string VARCHAR2(400 CHAR) := 'CREATE TABLE TEST(abcd VARCHAR2(200 CHAR))';
BEGIN
EXECUTE IMMEDIATE v_query_string;
END;
我試了一下:
- 運行從上PROC設置驗證ID定義與AUTHID CURRENT_USER函數的程序(希望這個函數將級聯莫名其妙的定義者)
- 把一個匿名塊內部執行DDL的函數(作爲角色似乎在匿名塊中計數)
如果我將AUTHID設置爲CURRENT_USER,則可以執行proc與管理員用戶正確配對。
有沒有什麼辦法可以解決這個問題而不直接授予管理員用戶的CREATE TABLE?
難道你不能只是創建一個程序/功能,在管理員的模式中做到這一點,並授予您執行該程序/功能的用戶,你在腦海中。這樣你可以實現隔離+限制注入,如果你打算讓查詢處於打開狀態,只需使用立即執行即可。 – g00dy
事實上,我打算這麼做,但管理員沒有直接資助來創建表格,只能通過角色。這似乎使得使用定義者權限執行該過程變得不可能,即使它是由管理員用戶自己執行的。 – JochenDB
爲什麼你不想授予管理員用戶CREATE TABLE? – APC