【发布时间】:2019-12-20 06:29:53
【问题描述】:
我需要通过另一个模式的过程动态创建表。 这是详细信息..
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 以外的任何表。
请就此提出建议。
从 user2 我可以执行 p1,但是当我从 user3 尝试这个时,我得到了权限不足的错误。
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.
【问题讨论】:
-
您确定过程 P1 正在执行且用户 2(过程的所有者)没有错误吗?
-
@Tejash 是的,我可以从 user2 执行 P1,并且在 user1 上创建表。
标签: oracle plsql database-administration