【发布时间】:2019-10-14 07:33:41
【问题描述】:
我有一个 PL/SQL 过程想用EXECUTE IMMEDIATE 创建一个视图。
我使用具有CONNECT、RESOURCE、DBA角色的用户执行代码。
默认情况下,我得到错误:
ORA-01031:权限不足。
我必须显式添加AUTHID CURRENT_USER 才能使代码成功执行。
我想我理解 AUTHID 子句的目的,但由于我正在使用同一个 DBA 用户执行代码,我想知道为什么我必须添加 AUTHID CURRENT_USER 子句...
使用 Oracle 18c (18.3.0.0.0)。
用户创建如下:
CREATE USER zzz IDENTIFIED BY ...
GRANT connect, resource, dba TO zzz
代码如下:
CREATE TABLE tab1 ( pk INT PRIMARY KEY, name VARCHAR2(50) );
CREATE OR REPLACE PROCEDURE proc1
--AUTHID CURRENT_USER
IS
BEGIN
EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW v1 AS SELECT * FROM tab1';
END;
/
BEGIN
proc1();
END;
/
DROP VIEW v1;
DROP TABLE tab1;
代码应该在没有 AUTHID CURRENT_USER 子句的情况下工作,即使(对我而言)最好始终使用该子句。
【问题讨论】:
-
无论如何你都不应该使用
connect或resource。这两个角色在很久以前就被弃用了。
标签: oracle stored-procedures plsql authid