Center审计策略表安装和策略添加(事务)——(Linux/Windows版本)

本博客主要讲述Center的审计策略表安装和策略添加

使用事务添加

1、开启事务

my->StartTransaction();

 2、编写sql语句

    //清除原来数据,防止数据污染
	my->Query("DROP TABLE IF EXISTS `t_strategy`");
	string sql = "CREATE TABLE `t_strategy` (\
				`id` INT AUTO_INCREMENT,\
				`name` VARCHAR(256) CHARACTER SET 'utf8' COLLATE 'utf8_bin',\
				`strategy` VARCHAR(4096),\
				PRIMARY KEY(`id`))";
	bool re= my->Query(sql.c_str());

Query的代码如下 :

    bool LXMysql::Query(const char* sql, unsigned long sqllen)
	{
		if (!mysql)//如果mysql没有初始化好
		{
			cerr << "Query failed: mysql is NULL" << endl;
			return false;
		}
		if (sql == NULL)
		{
			cerr << "sql is NULL" << endl;
			return false;
		}
		if (sqllen <= 0)
		{
			sqllen = (unsigned long)strlen(sql);//强转
		}
		if (sqllen <= 0)
		{
			cerr << "Query sql is empty or wrong format!" << endl;
		}
		int re = mysql_real_query(mysql, sql, sqllen);
		if (re != 0)
		{
			cerr << "mysql_real_query fqiled!" << mysql_error(mysql) << endl;
			return false;
		}
		return true;
	}

3、 如果sql语句添加表格失败的话,直接回滚

if (!re)
	{
		my->RollBack();
		return false;
	}

4、往表格添加数据

    {
		XDATA data;
		data["name"] = u8"用户登录失败";
		
		data["strategy"] = ".*Failed password for (.+) from ([0-9.]+) port ([0-9]+).*";
		my->Insert(data, "t_strategy");

		data["name"] = u8"用户登录成功";	
		//Accepted password for fdd from 192.168.122.128 port 49072 ssh2
		data["strategy"] = ".*Accepted password for (.+) from ([0-9.]+) port ([0-9]+).*";
		my->Insert(data, "t_strategy");
    }

 4.1、正则表达式,其实也就是如何将日志的输出写出来,不重要

//正则表达式
		/*
		当agent输入密码错误的时候
		Jan 13 15:29:23 fdd-virtual-machine sshd[2754]: Failed password for fdd from 192.168.122.128 port 43042 ssh2
		.表示任意字符 *表示0-多个 +表示1-多个 
		.* 0-多个字符
		.+ 至少有一个字符
		Failed password for匹配字符串
		for (.+) from  取到用户名
		from ([0-9.]+) port 在port之间取到了IP地址
		[ ]表示这是那些字符集 
		*/

 Center审计策略表安装和策略添加(事务)——(Linux/Windows版本)_第1张图片

 5、提交事务,关闭事务

	my->Commit();
	my->StopTransaction();

6、事物的函数定义如下: 

    bool LXMysql::StartTransaction()
	{
		//有一个start Transaction的接口,只需要调用另外一个接口,也就是把自动提交

		return Query("set autocommit=0");
	}
	bool LXMysql::StopTransaction()
	{
		return Query("set autocommit=1");
	}
	bool LXMysql::Commit()
	{
		return Query("commit");
	}
	bool LXMysql::RollBack()
	{
		return Query("rollback");
	}	

完结:

你可能感兴趣的:(linux,运维,服务器,c++,数据库,mysql)