![](/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.