我在这里看到的主要问题是授予
create user。您可能不希望您的架构能够创建用户。因此,触发器(当然是其他答案指出需要这样做
executeimmediate)不应直接调用create user。我将创建在您的工作模式以外的其他模式中创建用户的过程。该外部模式将授予
createuser您的权限,而您的模式将仅授予从强特权模式执行该过程的权限。在这种情况下,触发器将仅从外部模式调用单个过程。
因此,回顾一下:
CREATE OR REPLACE TRIGGER your_schema.NEW_USER AFTER INSERT ON ACCOUNT FOR EACH ROW BEGIN STRONG.CREATE_USER(:NEW.PASSWORD,:NEW.USERNAME); END;CREATE OR REPLACE PROCEDURE STRONG.CREATE_USER(PASS VARCHAR2, USERNAME VARCHAR2) ASDECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGIN execute immediate 'CREATE USER ' || USERNAME || ' IDENTIFIED BY ' || PASS; execute immediate 'GRANT ROLE_NAME, CONNECT, RESOURCE TO ' || USERNAME; --and whatever user needs moreEND;
STRONG用户有权创建用户,而your_schema有权执行
STRONG.CREATE_USER
额外的东西。切勿以纯文本形式存储密码。使用一些哈希。



