我必须将有关登录/注销的一些信息协议到Oracle数据库,下面是一段简短的代码: (为日志创建表,在登录/注销时创建触发器)
CREATE TABLE WHEREVER.LOG_TABLE (
TIMESTAMP DATE DEFAULT SYSDATE,
WHAT VARCHAR2(32),
TERMINAL VARCHAR2(32)
)
/
CREATE OR REPLACE TRIGGER WHEREVER.TRIGGER_LOGON AFTER LOGON ON DATABASE
DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO WHEREVER.LOG_TABLE (
WHAT,
TERMINAL
)
SELECT
'LOGON',
SYS_CONTEXT('USERENV','TERMINAL')
FROM DUAL
;
COMMIT;
END
/
CREATE OR REPLACE TRIGGER WHEREVER.TRIGGER_LOGOFF BEFORE LOGOFF ON DATABASE
DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO WHEREVER.LOG_TABLE (
WHAT,
TERMINAL
)
SELECT
'LOGOFF',
SYS_CONTEXT('USERENV','TERMINAL')
FROM DUAL
;
COMMIT;
END
/
如果我像sysdba一样启动这个脚本(没有logon-触发器),我就没有错误。 但是想要断开连接的用户会收到错误
ORA 04045: errr during recompilation/revalidation of Trigger
ORA 01031: insufficient privileges
我认为,不允许用户插入。
什么是最小的Privileg情况,这个表/触发器 - 组合工作,即使对于用户来说,以后插入?谁应该是表和触发器的所有者以及我应该在哪些模式中放置这些东西(WHEREVER
)