我想在管理员用户拥有的过程中执行一些动态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