0

我正在寻找失败的 Oracle 登录 - ORA-01017 无效的用户名/密码错误 - 我在 alert_SID.log 文件中找不到它们。我确实看到了其他 ORA-* 错误。默认情况下不记录 ORA-01017 错误吗?我正在阅读有关配置审核的信息,但认为会自动记录不成功的登录。这适用于 Oracle 11.2g 数据库和 Oracle 19.0c 数据库。

4

2 回答 2

0

通常,配置审计是解决此问题的首选方式。您可以创建自定义触发器,但我认为它们的可靠性低于 Oracle 的内置跟踪方法,而且更容易受到攻击。此外,应始终将自定义安全对象放置在专用模式中。切勿在 SYS 模式中创建自定义对象。

我最近写了一篇关于基本审计配置的博客,题为“按数字审计”。您还可以在此处找到资源:https ://oracle-base.com/articles/8i/auditing 。为登录启用审计(假设您使用 Oracle 12c 或更高版本)的最简单方法如下,以具有 DBA 或 SYSDBA 权限的用户身份执行:

-- audit all user logon and logoff attempts:
create audit policy stig_user_logon_actions actions logon, logoff;
audit policy stig_user_logon_actions;

对于 Oracle 11g:

alter system set audit_trail=DB scope=spfile;
[restart database]
audit create session;

然后在 DBA_AUDIT_TRAIL 视图或 DBA_AUDIT_SESSION (11g) 中查看您的审计跟踪。

于 2020-07-27T14:38:54.380 回答
0

我有一个类似的问题。这么多人使用相同的数据库用户,有时有人输入错误的密码太多次,以至于锁定了用户。ORA-1017 默认不审计,也不记录。您要么启用审核,要么为此创建自己的登录触发器,这就是我所做的

为了审核该操作,我设计了这个触发器

CREATE OR REPLACE TRIGGER SYS.logon_denied_audit AFTER SERVERERROR ON DATABASE
DECLARE
 l_message varchar2(2000) := 'ORA-1017: Invalid username/password: logon denied';
BEGIN
 -- ORA-1017: invalid username/password; logon denied
 IF (IS_SERVERERROR(1017)) THEN
    insert into my_audit_table
    (
    RAC_INSTANCE       ,
    SERVICE_NAME       ,
    SESSION_ID         ,
    ORACLE_USER        ,
    OS_USER            ,
    TERMINAL           ,
    PROGRAM            ,
    ACTION_TIME        ,
    ACTION             ,
    IP_ADDRESS         ,
    CLIENT_IDENTIFIER  ,
    ERROR              ,
    IS_LIMITED
    )
    values
    (
    SYS_CONTEXT ('USERENV', 'INSTANCE'),
    nvl(UPPER(SYS_CONTEXT ('USERENV', 'SERVICE_NAME')),'Service Unknown') ,
    9999 ,
    SYS_CONTEXT('USERENV', 'AUTHENTICATED_IDENTITY'),
    UPPER(SYS_CONTEXT('USERENV', 'OS_USER')),
    nvl(SYS_CONTEXT ('USERENV', 'HOST'),'Unknown Host'),
    nvl(SYS_CONTEXT('USERENV','MODULE'),'Module unknown'),
    systimestamp,
    'LOGON',
    nvl(sys_context ('USERENV', 'IP_ADDRESS'),'Unknown IP'),
    null,
    l_message ,
    'N'
    );
    end if;
end;
/

因此,我可以记录登录数据库的失败尝试。顺便说一句,它在 11g 中的工作原理与在 19c 中相同

于 2020-07-27T14:08:35.683 回答