1

「sys.users$」テーブルが更新されたときに「パスワード」値を取得するトリガーを作成しています。

CREATE OR REPLACE 
TRIGGER Sys_User_Nm_Trg AFTER ALTER ON DATABASE
WHEN (ora_dict_obj_type = 'USER')
DECLARE

CURSOR get_pw IS
SELECT password
FROM sys.user$
WHERE name = ora_dict_obj_name;

user_pw_ VARCHAR2(100);

BEGIN

IF (ora_dict_obj_name != 'SYS' AND ora_dict_obj_name != 'SYSTEM') THEN
  IF (ora_des_encrypted_password IS NOT NULL) THEN

 OPEN get_pw;
 FETCH get_pw INTO user_pw_;
 CLOSE get_pw;


 END IF;
END IF;

END;
/

ただし、このカーソルは、変更された「パスワード」値ではなく、古い「パスワード」を提供します。しかし、私が実行すると

SELECT password
FROM sys.user$
WHERE name = ora_dict_obj_name;

別のトランザクションでは、正しい変更された値を提供します。パスワードの更新された値を取得するためにトリガーで変更する必要があるものはありますか?

4

0 に答える 0