数据库应配置日志功能,对用户登录进行记录,记录内容包括用户登录使用的账号、登录是否成功、登录时间以及远程登录时用户使用的IP地址。创建ORACLE登录触发器,记录相关信息,但对IP地址的记录会有困难
1.建表LOGON_TABLE
2.建触发器
CREATE TRIGGER TRI_LOGON
  AFTER LOGON ON DATABASE
BEGIN
  INSERT INTO LOGON_TABLE VALUES (SYS_CONTEXT('USERENV', 'SESSION_USER'),
SYSDATE);
END;
上述这个操作,请问如何创建表LOGON_TABLE

解决方案 »

  1.   


    create table LOGON_TABLE(
     col1 varchar2(100),
     col2 varchar2(100),
    ....
    );
      

  2.   

    create table LOGON_TABLE(
     USERENV varchar2(100),
     SESSION_USER varchar2(100)
    );
    提示没有足够的值!
      

  3.   

    USERENV 
    SESSION_USER
    可能是oracle关键字。换其它标识符试试
      

  4.   


    C:\Users\lenovo>sqlplus test/testSQL*Plus: Release 10.2.0.3.0 - Production on 星期四 11月 24 22:41:21 2011Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.
    连接到:
    Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
    With the Partitioning, OLAP and Data Mining options[TEST@orcl] SQL>create table LOGON_TABLE(
      2   USERENV varchar2(100),
      3   SESSION_USER varchar2(100)
      4  );表已创建。[TEST@orcl] SQL>
      

  5.   

    创建触发器的时候提示:没有足够的值CREATE OR REPLACE TRIGGER TRI_LOGON
      AFTER LOGON ON DATABASE
    BEGIN
      INSERT INTO LOGON_TABLE VALUES (SYS_CONTEXT('USERENV', 'SESSION_USER'),
    SYSDATE);
    END;是不是('USERENV', 'SESSION_USER') 这两个值不能与刚才创建表的字段一样?
      

  6.   


    --没有足够的值说明你表的字段多,而插入数据少INSERT INTO LOGON_TABLE VALUES (
    SYS_CONTEXT('USERENV', 'SESSION_USER'), --第一个值
    SYSDATE  --第二个值
    );
    --你的sql有两个值,如果你的表 LOGON_TABLE 有三个及三个以上的字段自然会报错。
      

  7.   

    CREATE TRIGGER TRI_LOGON
      AFTER LOGON ON DATABASE
    BEGIN
      INSERT INTO LOGON_TABLE 
    VALUES 
    (SYS_CONTEXT('USERENV', 'SESSION_USER'),--当前会话用户
    SYS_CONTEXT('USERENV', ‘IP_ADDRESS’));--ip地址
    END;
      

  8.   

    是否一开始就出现偏差?
    用户登录进行记录,这里的用户,指的是应用系统的用户,还是数据库的用户?
    另外,如果有登录,那是否还要记录每次登出的时间?区分IP是细化了,但同一IP可以同时登录同一用户,又是否要区分?麻烦楼主给出一份详细的要求。
      

  9.   

    CREATE TRIGGER TRI_LOGON
      AFTER LOGON ON DATABASE
    BEGIN
      INSERT INTO LOGON_TABLE 
    VALUES 
    (SYS_CONTEXT('USERENV', 'SESSION_USER'),--当前会话用户
    SYS_CONTEXT('USERENV', ‘IP_ADDRESS’));--ip地址
    END;
    我要是在这个上述这个基础上再增加对某个表的操作记录应该怎样写?