开源之夏
项目经验分享
2023 #01
项目名称:openGauss用户操作模型
项目导师:汤学明
项目简述:使用机器学习根据openGauss审计日志中的用户操作提取用户操作特点,建立用户操作画像。
# 项目开发情况
1. 项目要求理解
2. 方案描述
整体的流程如下图所示:
1. 首先需要收集指定时间段的审计审计日志
2. 通过分析改日志来筛除一些无效的数据,设计一些用户特征,例如用户的一次操 作需要包括主体、客体、操作类型(哪个用户对谁做了什么)等信息;
3. 接着需要处理数据集,例如给类别数据编号,划分数据集;
4. 使用为了评估模型分类的好坏,这里选择准确率作为指标;
5. 根据指标的好坏,我们可以调整模型的超参数,使得模型在训练集上分类得更好;
6. 选定好超参数后模型就可以使用了,之后数据库中又会产生许多的用户操作日志,我们可以重新收集日志来迭代模型。
3. 关键问题&解决办法
如何获取审计日志数据
那具体怎么模拟呢?首先确定的是需要一个多用户操作的数据库,不然只给一名用户画像就没意义了;其次模拟既要尽可能地贴近真实同时也要简单。最后我选择设计一个多用户的教务管理系统并使用python脚本来自动模拟用户的操作,模拟结束后在openGauss中导出审计日志。
数据库设计
多用户设计
用户画像怎么实现
一开始看到要对用户画像其实并不好怎么下手,于是我调研了一些用户画像的案例,学习一下当前做画像的主流算法和步骤,这样在心中也大概有谱了。
案例 |
算法 |
|
二分类 | 统计不同类型卡的用户年龄、收入分布实现画像;最后训练模型决定是否放贷 | |
商店会员画像[2] |
统计学 | 统计各年龄、性别消费者消费行为,以及不同时间段的消费行为 |
商店会员画像[3] |
二分类 | 根据以往的预定信息判断是否会取消预定 |
黑客画像预警模型[4] |
聚类 | 提取黑客的攻击时间、攻击方式、目标特征,进行聚类,建模群体画像 |
time: 操作的时间戳
type: 操作类型
result: 执行结果
user_id: 用户ID
username: 用户名
database: 操作涉及到的数据库
client_conninfo: 客户端连接信息,
object_name: 操作的客体,例如用户是查询的哪个表,创建的哪个数据库,给哪个用户赋权等
detail-info: 详细的操作信息
用户操作类型的统计
-
系统级操作,如登录,创建用户,分配权限,设置参数 -
数据库级操作,创建数据库,模式,表 -
表级操作,对表的增删改查
query_login,用户每天的登录次数
-
query_sys,除了登录操作,其他的系统级操作次数 -
query_db,数据库级的操作次数 -
query_insert_all,所有对表的插入操作 -
query_insert_score,所有对score表的插入操作 -
query_insert_score,所有对score表的插入操作 -
query_sel_info,各类信息表的查询 -
query_sel_score,对成绩表的查询
用户画像
最后我还提出了使用用户操作特征的来识别危险的用户,具体做法是训练一个机器学习模型让模型学习区分各种类型的用户,这属于多分类模型,如果遇到异常的用户行为,由于与以往该用户的行为有区别,模型便会将其判断出来可疑的用户。
例如在下面的测试中,将学生端的insert_score属性改为了1,模拟学生端用户修改了成绩表,这是异常操作,最后我们的模型确实能够识别出来。
SELECT id, username, date,
PREDICT BY log_m1 (FEATURES login, sys, db, insert_all, insert_score, sel_info, sel_score)
as "PREDICT",
name_id as "LABEL"
FROM log_test2 where "PREDICT"!="LABEL" ;
包含异常数据的数据集
识别的可疑用户
# 开源之夏个人随访
--项目经历--
OSPP:请简单介绍一下自己吧。
唐武国:大家好,我叫唐武国,是中南大学计算机学院的一名研二学生,这是我第一次参与开源之夏的活动,也是第一次参加开源项目。
OSPP:你是如何了解并参与到开源之夏的?你认为完成一个项目任务的关键是什么?
唐武国:其实最早我是在大四的时候从同学的口中了解到有开源之夏这个活动的,觉得这个活动形式非常好并决定挑战一下自己,但比较可惜的是当时已经过了报名时间,所以我一直都有关注OSPP的官网,并很早就将报名的时间记录到日程中。也算是比较幸运,第一次申请就成功了。
相比OSPP中的各种开源项目都是“大”工程,自己以往的那些项目只能算是小demo,自己只管把功能实现了而没有考虑实际用户体验、性能和安全性。但正这些小项目也为我积累了许多的经验和试错机会,我也从中体会到团队合作的乐趣。我印象最深的是和队友做一个寻找走失老人的救援指挥系统,这是我第一次参与比较大的项目了,我们需要在几个月的时间内做好用于报案和救援的微信小程序,给队长指挥调度的网页应用。通过看教程、文档快速入门小程序开发和地图API的使用,最后经过与队友的共同努力还是顺利提交了作品。
比赛答辩前一天还在修bug
为了赶进度被关在实验楼
--参与开源--
OSPP:你眼中的开源是什么?
唐武国:在我看来,开源组织和开源贡献者都是很了不起的。通过开源可以集中全球开发者的力量来做好一个项目,这件事听起来就让人激动。我在参加OSPP的过程中也了解到中国的开发者也在努力贡献自己的成果,领导开发了许多优秀的项目:openEuler、鸿蒙操作系统,openGauss数据库等等。
OSPP:结合你自身经历,你认为高校学生参与开源有必要吗?学生会把参与开源作为一种优先级比较高的选择吗?
唐武国:在我看来高校学生可能还是不会把参加开源项目作为优先选择,我身边的同学还是实习、参加竞赛的比较多。可能大多人知道开源这回事但并不知如何开始,也害怕参与开源项目的时候没有人指导。而刚好OSPP就提供了这样一个平台,对接了开源组织、导师、学生三方,还有奖励机制所以我还是很推荐大家参加的,我自己也希望能够继续参与开源之夏的活动。
--收获与寄语--
OSPP:有什么话想对计划参加开源之夏活动以及开源的学弟学妹们说?
唐武国:参与开源真的是件很有意义的事,当你的名字出现在开源项目的贡献者名单中是很骄傲的。在整个参与这次开源的项目中,我确实收获了很多:了解如何参与开源、国产的开源数据库、如何构建用户画像等等,这种收获不仅是具体的知识也是学习能力的提升。在我开发的过程中也有幸能够得到与来自华中科大的汤学明老师、李浩然学长的悉心指导,让我不断改进代码,顺利完成项目要求。最后,可能你还是会担心项目太难、自己的能力不够。但相信我只要你肯投入一定的时间,你也可以的。
本文分享自微信公众号 - openGauss(openGauss)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。