我试图在 Oracle 18c XE 中创建一个培训师/实习生环境。到目前为止,我有 4 个实习用户,他们都安装了 hr-sample。现在,我计划让一位培训师用户能够实时查看用户所做的一切,并在需要时进行调整。
这个话题似乎经常被讨论,但我还没有看到一个解决方案,在这样的脚本运行后,被授权者可以看到新创建的对象:
BEGIN
FOR t IN (SELECT object_name, object_type FROM all_objects WHERE owner='TEST1' AND object_type IN ('TABLE','VIEW','PROCEDURE','FUNCTION','PACKAGE')) LOOP
IF t.object_type IN ('TABLE','VIEW') THEN
EXECUTE IMMEDIATE 'GRANT SELECT, UPDATE, INSERT, DELETE ON SOURCEUSER.'||t.object_name||' TO TEST2';
ELSIF t.object_type IN ('PROCEDURE','FUNCTION','PACKAGE') THEN
EXECUTE IMMEDIATE 'GRANT EXECUTE ON TEST1.'||t.object_name||' TO TEST2';
END IF;
END LOOP;
END;
必须有一种方法可以让另一个用户选择和创建所有对象的权限,包括将来编写的对象。当然有可能编写一个触发器,但这对于如此简单的要求来说似乎太复杂了。
是否可以授予用户对另一个用户架构的所有权等效性?
没有直接的方法可以做您所描述的事情,这是通过对特定模式的断言获得的特权。您可以做的最接近的事情是授予培训师代理权限以作为受训者登录以查看其对象,或授予一系列“任何”系统权限(选择任何表、更改任何表、插入任何表等) .) 给培训师,让他们可以看到数据库中的所有内容。我在这里写了一篇关于代理身份验证的简短博客:https ://pmdba.wordpress.com/2014/09/05/shared-application-accounts-and-developers/ 。您还可以在此处找到相关信息:https ://oracle-base.com/articles/misc/proxy-users-and-connect-through 。