Oracle 数据库查看client的用户登录信息包括ip

原创lq20112017-11-22 20:26评论(0)39人阅读

 通过创建触发器对用户登录进行日志记录,对登录用户进行相关审计,记录登录用户,主机,系统用户及IP地址:

1. 在sys模式下创建一个表,用于记录客户端登录数据库服务器的详细信息。  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  create  table  login_history  
  (  
    username   varchar2(60),   --用户名   
    machine    varchar2(60),   --机器名   
    login_time  date ,           --登录时间   
    ip         varchar2(50)    --ip地址   
  );
  或者
  SQL>  create  table  LOGON_TABLE  as 
       select  sysdate logon_time,
            sys_context( 'USERENV' , 'SESSION_USER' ) username, 
            sys_context( 'USERENV' , 'HOST' ) host, 
            sys_context( 'USERENV' , 'OS_USER' ) os_user, 
            sys_context( 'USERENV' , 'IP_ADDRESS' ) ip_address
       from  dual
     /
 
Table  created.

2. 在sys模式下创建一个触发器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
create  or  replace  trigger  login_log  
    after  logon  on  database  
  begin  
    insert  into  login_history  
      select  username, machine, sysdate, sys_context( 'userenv' 'ip_address' )  
        from  v$session  
       where  audsid = userenv( 'sessionid' );  
    commit ;  
  end ;  
  或者
  SQL>  create  or  replace  trigger  tri_logon  after  logon  on  database
      begin
          insert  into  LOGON_TABLE
                    ( logon_time,
                      username,
                      host,
                      os_user,
                      ip_address
                    )
              values 
                   ( sysdate,
                     sys_context( 'USERENV' 'SESSION_USER' ),
                     sys_context( 'USERENV' , 'HOST' ),
                     sys_context( 'USERENV' , 'OS_USER' ),
                     sys_context( 'USERENV' , 'IP_ADDRESS' ));
     end ;
     /
 
Trigger  created.

3. 一些查看session数的实例(以sys用户登录)

1
2
3
4
5
6
7
8
9
10
11
   --查看login_history表
   select  from  login_history;
   
   --查看当前的所有session数
   select  count (*)  from  v$session;
   
   --查看当前的客户端计算机名为RHEL的所有session数
   select  count (*)  from  v$session  where  machine =  'RHEL' ;
   
   --查看当前的各个客户端计算机的连接数
   select  count (*) , machine  from  v$session  group  by  machine;

4. 查看当前会话的ip

1
  select  sys_context( 'userenv' , 'ip_address' from  dual;