【发布时间】:2020-12-22 08:40:42
【问题描述】:
我想创建一个触发器,以显示哪些表已/已被修改,以及谁(哪些用户)更改了该表上的数据。
我发现下面的查询列出了过去 30 天内被 ALTER 语句修改但没有成功的所有表:
select schema_name(schema_id) as schema_name,
name as table_name,
create_date,
modify_date
from sys.tables
where modify_date > DATEADD(DAY, -30, CURRENT_TIMESTAMP)
order by modify_date desc;
它显示错误 ORA-00942 表或视图不可用。
这是类似问题的链接,但适用于 MySQL: enter link description here
@rjh @Ike Walker 能否请您帮助如何使用 SQL Tools 1.8 进行查询?
我应该在触发器上使用 oracle 审计来执行此操作吗?我正在使用 SQL Tools 1.8 b38。
我创建了一个新表:
这是我用来制作表格的查询:
CREATE TABLE nag_Historic (
id NUMBER(10) NOT NULL,
tst_date DATE DEFAULT SYSDATE NOT NULL,
Ändere VARCHAR2(20) DEFAULT USER NOT NULL,
title VARCHAR2(100) NOT NULL
);
ALTER TABLE nag_Historic
ADD (
CONSTRAINT nag_pk PRIMARY KEY (id)
);
CREATE SEQUENCE nag_id START WITH 1 INCREMENT BY 1;
我也做了触发器:
CREATE OR REPLACE TRIGGER trg_nag_histry
BEFORE INSERT OR UPDATE OR DELETE ON nag_historic
FOR EACH ROW
BEGIN
SELECT nag_ID.nextval
INTO :new.id
FROM dual;
END;
这是我插入值的方式:
INSERT INTO nag_Historic (title)
VALUES ('johan');
我已经为审计找到了这个查询:
SELECT * FROM DBA_STMT_AUDIT_OPTS;
SELECT * FROM dba_priv_audit_opts;
但这仍然没有显示哪些表已被修改(更改)。请帮帮我,我完全被卡住了。
【问题讨论】:
-
检查这个oracle-base.com/articles/8i/auditing ..你需要启用它
-
我找不到我的 'init.ora' 如何在 SQL 中启用我的审计?有没有办法使用 SQL 工具中的查询来激活它?我还尝试运行几个查询:“AUDIT ALL BY SO BY ACCESS;通过访问审核更新表、删除表、插入表;通过访问审核执行过程;”它只说“审计,在 8 毫秒内执行”,但没有给出任何结果。
-
@Sujitmohanty30 再次回到我原来的问题。我想创建一个触发器,该触发器将显示哪些表已/已被修改以及谁(哪些用户)更改了该表上的数据。我需要为此使用 oracle SQL 审计的方法是否正确?
-
@ellawidya 在管理大量使用的额外磁盘空间方面,使用 Oracle AUDIT 是一项相当艰巨的任务,对于我发现的大量数据,查询特定信息可能会占用大量资源。要使用它,需要 DBA 输入和设置。通过 TRIGGERS 滚动您自己的审计可以更容易实施和控制。
-
@TenG - 我强烈反对。 “通过 TRIGGERS 进行自己的审计”只是重新发明了 Oracle 已经做过的轮子。并保证效率较低。如果您实施适当的内务管理,就不会占用大量资源,就像您需要使用本地审计表一样。当然,这需要与 DBA 协调。但这就是 DBA 的工作。开发人员和 DBA 应该密切合作。
标签: sql oracle triggers tracking audit