Ubuntu下使用perl把tacacs+日志存到sqlserver

2011年4月28日 | 分类: DB, Linux, 脚本 | 标签: , , , ,

1.sqlserver端

#创建数据库表

CREATE TABLE acct (id int identity PRIMARY KEY ,

date VARCHAR(20),time VARCHAR(20),serverip VARCHAR(20),username VARCHAR(20),tty VARCHAR(20),clientip VARCHAR(20),

status VARCHAR(20),taskid VARCHAR(20),service VARCHAR(20),priv VARCHAR(20),information VARCHAR(100))

#创建unique

CREATE UNIQUE INDEX uniquedatetime

ON acct (date,time)

2.tac_plus端

安装下列包:

libdbi-perl

libdbd-freetds

libdbd-sybase-perl

配置

编辑/etc/freetds/freetds.conf,加入以下内容

[northwind]    #northwind为创建连接的名称,最好与数据库名相同

host = serverip

port = 1433

tds version = 8.0

脚本

#!/usr/bin/perl

use DBI;

use strict;;

my $k = ” “;

my $line;

my($sec,$min,$hour,$mday,$mon,$year)=localtime(time);

$mon++;

$year+=1900;

my $today = sprintf(“%04d%02d%02d”,$year,$mon,$mday);

my $filepath=”/var/log/tac_plus/acct/$today.log”;

open(F,$filepath)||die(“open file error”);

foreach $line(<F>){

my ($date,$time,$zone,$serverip,$username,$tty,$clientip,$status,$taskid,$timezone,$service,$priv,$a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$z,$l,$m,$n,$o,$p,$q,$r,$s,$t,$u,$v,$w) = split(‘ ‘,$line);

my $information = $a.$k.$b.$k.$c.$k.$d.$k.$e.$k.$f.$k.$g.$k.$h.$k.$i.$k.$j.$k.$z.$k.$l.$k.$m.$k.$n.$k.$o.$k.$p.$k.$q.$k.$r.$k.$s.$k.$t.$k.$u.$k.$v.$k.$w;

my $dbh = DBI->connect(“DBI:Sybase:server=northwind”, “sa”, “abcd.1234″);

#northwind为在freetds.conf中设置的连接的名称

$dbh->do(“use northwind”);    #使用northwind数据库

my $statement=”insert into acct (date,time,serverip,username,tty,clientip,status,taskid,service,priv,information) values (‘$date’,'$time’,'$serverip’,'$username’,'$tty’,'$clientip’,'$status’,'$taskid’,'$service’,'$priv’,'$information’)”;

my $sth = $dbh->do($statement);

$dbh->disconnect();

}

close(F);

3.参考文档

http://www.idevelopment.info/data/SQLServer/DBA_tips/Programming/PROG_4.shtml

Written by an6097

目前还没有任何评论.
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。