![](/img/trans.png)
[英]Create stored procedure with table from another schema throws PLS-00201
[英]how to create table dynamically through procedure from another schema
我需要通過另一個模式的過程動態創建表。 這是詳細信息..
user1 -- table T1_YYYMM where YYYYMM= year,month e.g T1_201912 needs to be created on this schema.
user2 -- procedure X to create T1_YYYYMM is created on this schema.
user3 -- want to access the procedure X from user3 which should create the tables on user1.
user3 已被授予 p1 的執行權限,但我仍然獲得權限被拒絕。我無權訪問 user1 和 user2。我只能通過 user3 訪問。 我不應該能夠在 user1 上創建除 T1_YYYYMM 以外的任何表。
請就此提出建議。
從用戶 2 我可以執行 p1 但是當我從用戶 3 嘗試這個時,我得到了權限不足的錯誤。
grant create any table to user2 -- done
create or replace PROCEDURE USER2.x (owner_name in varchar2 ,
table_name in varchar2
) authid current_user
is
sql_string VARCHAR2(4000);
l_owner varchar2(30) := 'USER1';
l_tab varchar2(100) := 'T1';
l_month varchar2(30) := to_char(add_months(sysdate),'YYYYMM');
BEGIN
IF l_owner=owner_name AND l_tab = table_name then
sql_string := 'CREATE TABLE '||l_owner||'.'||l_tab||'_'||l_month||' AS SELECT * FROM USER1.T2 WHERE 1=2';
EXECUTE IMMEDIATE sql_string;
dbms_output.put_line('Table created :'||l_tab||'_'||l_month);
EXECUTE IMMEDIATE 'GRANT DELETE, INSERT, SELECT, UPDATE ON '||l_tab||'_'||l_month||' TO V_ROLE ';
ELSE
dbms_output.put_line('Permission Denied...');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END X;
/
grant execute on x to USER3 ;--DONE
/
EXEC USER3.X('USER1','T1');
ORA-01031: insufficient privileges
PL/SQL procedure successfully completed.
你缺少的鏈接是特權
grant create any table to user2;
沒有它你觀察
ORA-01031: insufficient privileges
完整設置
1) 向user2
授予create any table
的user2
——由 DBA 完成
2)在user2
創建過程
create procedure x as
begin
execute immediate 'create table user1.tab1 (x number)';
end;
/
3) 將在x
上execute
USER3
授予USER3
grant execute on x to USER3;
4) USER3
運行程序
begin
user2.x;
end;
/
另請參見此處- 簡單的CREATE TABLE
權限不足以在其他模式中創建表。
另請注意,此權限必須直接授予用戶(即不通過角色)才能在過程中使用。
備擇方案
正如評論中所指出的,更安全的替代方法是將過程從 user2 移動到 user1 ,即要創建的過程和表將在同一架構中。
在這種情況下,只能將過程的execute
權限授予USER3
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.