❶ 如何自动化完成sql审核
sql审核主要完成两方面的目的.
1、避免性能太差的sql进入生产系统,导致整体性能降低
2、检查开发设计的索引是否合理,是否需要添加索引
第一点是SQL审核最核心的地方,避免乱七八糟的sql影响线上性能,甚至导致线上系统崩溃.
第二点是属于建模的范畴,要解决建模的最好办法是DBA参与项目前期审核,由DBA建模,如果DBA人力资源不足,那么就定期由DBA对开发人员进行培训.然后发现建模太烂的就扣KPI.
现在很多公司都是人肉来完成SQL审核的,人肉审核对dba的要求较高,需要懂一些代码,另外是费时费力,毕竟一般公司几十个开发,对应一个DBA,而且DBA还要干很多其他的事情.
如何将DBA从人肉SQL审核中解放出来呢?
思路其实很简单:
1、获取程序要执行的SQL
2、对要执行的SQL做分析,可以加各种分析条件来判断这个SQL是否可以自动审核通过,未通过审核的需要人工处理.
3、配合后期的慢查询日志分析系统完成长期的监控.
开源的解决方案主要有淘宝丹臣sqlautoreview系统.可以在github上搜索到.
但是这个系统主要是基于java sqlmapfile.xml解决自动创建索引的问题,对源数据有要求,并且是通过解析SQL结构来假设SQL的执行计划,不是特别准确,并且不能够很好的区分新sql还是老sql.
所以产生了一个新的方案:
1、为所有的执行过的sql产生一个figerprint
2、基于慢查询提供的数据,加上explain 提供的数据来判断这个sql的性能是否可接受,或者可优化.
3、自动审核通过性能可接受的部分,给DBA展示性能较差的sql,然后进行优化.
方案的优点在于:
基于用户真正执行的SQL,并且可以观察SQL执行频率.
基于MySQL真正的执行计划和执行结果,分析更准确.
每个SQL都有一个fingerprint,只需要增量处理新加的SQL,效率和性能提高.
基于Box anemometer二次开发,让慢查询和sql审核同平台,增加工具集成性,提高用户体验(DBA和开发人员)。
方案实施:
既然咱是DBA,肯定会有更DBA的思维方式.基于现有软件二次开发完成,减少开发成本,整合管理平台.
基于Box anemometer.安装Box anemometer
Box anemometer是一款B/S架构,图形化的MySQL慢查询分析工具.功能强大易用,设计简单直接.anemometer是基于pt-query-digest的二次封装得来.
核心处理流程:
mysql node–>计划任务通过pt-query-digest收集慢查询信息–>结果写入到数据库中–>anemometer按条件去展示慢查询的结果,并且提供了图形化和趋势分布图等功能.
所以anemometer已经帮我们完成了数据收集,包括每个sql的fingerprint信息,以及相关的信息,我们在测试环境,基于anemometer,将long_query_time设置为0,就可以收集到所以的SQL及相关信息.
在我们收集到所有SQL以后,我们就要来分析这个SQL是否可以自动审核通过.这里开始我们就要定制了.
定制内容如下:
一、
设置一个单独的datasources,可以命名为audit_sql.
这个datasources里面只放置开发环境或者测试环境的慢查询(你要做sql审核基于哪个环境),将此环境的long_query_time设置为0,接收所有的sql查询.
二、修改anemometer
ALTER TABLE `global_query_review` ADD audit_status VARCHAR(255) NOT
NULL DEFAULT ‘refuse’ comment ‘sql审计的状态 refuse未通过 pass审核通过’;
修改PHP代码.
在report模块的where条件中增加一个Ait Status的选项框,可以过滤audit_status的状态
在show_query模块中增加一个Audit Status的选项框,可以人工设置audit_status的状态
三、增加两个额外的脚本,准实时的分析audit_status为refuse的sql,如果sql的满足自动审核通过的条件,那么就设置audit_status为pass,表示自动审核通过.
自动审核未通过的sql,由DBA人工在anemometer上检索和处理.
这里就涉及到一个自动审核通过的算法:
算法分两种.
第一种是准实时,也就是可以几分钟或者一个小时运行一次,主要是根据每个sql的执行效率判断是否pass.
对应的脚本名字叫做:audit_sql.py
第二种是一天一次,弱化执行效率判断,增加一天执行的频率判断.
对应的脚本名字叫做:audit_sql_day.py
各家根据自己的实际情况调整或者优化这两个脚本.
至此,你已经可以让99%以上的代码自动审核通过了,审核不通过的代码你可以让开发自己来tracking也可以主动推给开发.
对于才搭建的环境,可能会有一些乱七八糟的sql,不过使用一段时间稳定以后,异常的sql指纹都有了,那么每天产生的sql指纹就比较少了,而这部分SQL指纹也就是程序员编写新的代码产生的.
❷ 什么是数据库审计
数据库审计(简称DBAudit)能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断。它通过对用户访问数据库行为的记录、分析和汇报,用来帮助用户事后生成合规报告、事故追根溯源,同时加强内外部数据库网络行为记录,提高数据资产安全。
❸ 数据库审计系统有什么作用
英文:database
security
audit
system
数据库安全审计系统主要用于监视并记录对
数据库服务器的各类操作行为,通过对
网络数据的分析,实时地、智能地解析对数据库服务器的各种操作,并记入审计数据库中以便日后进行查询、分析、过滤,实现对目标
数据库系统的用户操作的监控和审计。它可以监控和审计用户对数据库中的数据库表
、视图、序列、包、
存储过程、函数、库、索引、同义词、
快照、
触发器等的创建、修改和删除等,分析的内容可以精确到sql操作语句一级。它还可以根据设置的规则,智能的判断出违规操作数据库的行为,并对违规行为进行记录、报警。由于数据库安全审计系统是以网络旁路的方式工作于数据库主机所在的网络,因此它可以在根本不改变
数据库系统的任何设置的情况下对数据库的操作实现跟踪记录、定位,实现数据库的在线监控,在不影响数据库系统自身性能的前提下,实现对数据库的在线监控和保护,及时地发现网络上针对数据库的违规操作行为并进行记录、报警和实时阻断,有效地弥补现有应用业务系统在数据库安全使用上的不足,为数据库系统的安全运行提供了有力保障。
一、数据库安全审计系统主要功能包括:
·
实时监测并智能地分析、还原各种数据库操作过程。
·
根据规则设定及时阻断违规操作,保护重要的数据库表和视图。
·
实现对
数据库系统漏洞、登录帐号、登录工具和数据操作过程的跟踪,发现对数据库系统的异常使用。
·
支持对登录用户、数据库表名、字段名及
关键字等内容进行多种条件组合的规则设定,形成灵活的审计策略。
·
提供包括记录、报警、中断和向网管系统报警等多种响应措施。
·
具备强大的查询统计功能,可生成专业化的报表。
二、数据库安全审计系统主要特点
·
采用旁路技术,不影响被保护数据库的性能。
·
使用简单,不需要对被保护数据库进行任何设置。
·
支持sql-92标准,适用面广,可以支持oracle、ms
sql
server、sybase、informix等多类数据库。
·
审计精细度高,可审计并还原sql操作语句。
·
采用分布式监控与
集中式管理的结构,易于扩展。
·
完备的"三权分立"管理体系,适应对敏感内容审计的管理要求。
三、数据库安全审计管理系统示意图
❹ 数据库审计的主要功能
多层业务关联审计:
通过应用层访问和数据库操作请求进行多层业务关联审计,实现访问者信息的完全追溯,包括:操作发生的URL、客户端的IP、请求报文等信息,通过多层业务关联审计更精确地定位事件发生前后所有层面的访问及操作请求,使管理人员对用户的行为一目了然,真正做到数据库操作行为可监控,违规操作可追溯。
细粒度数据库审计:
通过对不同数据库的SQL语义分析,提取出SQL中相关的要素(用户、SQL操作、表、字段、视图、索引、过程、函数、包…) 实时监控来自各个层面的所有数据库活动,包括来自应用系统发起的数据库操作请求、来自数据库客户端工具的操作请求以及通过远程登录服务器后的操作请求等 通过远程命令行执行的SQL命令也能够被审计与分析,并对违规的操作进行阻断 系统不仅对数据库操作请求进行实时审计,而且还可对数据库返回结果进行完整的还原和审计,同时可以根据返回结果设置审计规则。
精准化行为回溯:
一旦发生安全事件,提供基于数据库对象的完全自定义审计查询及审计数据展现,彻底摆脱数据库的黑盒状态。
全方位风险控制:
灵活的策略定制:根据登录用户、源IP地址、数据库对象(分为数据库用户、表、字段)、操作时间、SQL操作命令、返回的记录数或受影响的行数、关联表数量、SQL执行结果、SQL执行时长、报文内容的灵活组合来定义客户所关心的重要事件和风险事件 多形式的实时告警:当检测到可疑操作或违反审计规则的操作时,系统可以通过监控中心告警、短信告警、邮件告警、Syslog告警等方式通知数据库管理员。
职权分离:
《计算机信息系统安全等级保护数据库管理技术要求》、《企业内部控制规范》、SOX法案或PCI中明确提出对工作人员进行职责分离,系统设置了权限角色分离。
友好真实的操作过程回放:
对于客户关心的操作可以回放整个相关过程,让客户可以看到真实输入及屏幕显示内容。 对于远程操作实现对精细内容的检索,如执行删除表、文件命令、数据搜索等。
❺ 查询SQL审计功能是否开启
mysql服务器自身没有提供审计功能,但是我们可以使用init-connect+binlog的方法进行mysql的操作审计。由于mysqlbinlog记录了所有对数据库长生实际修改的sql语句,及其执行时间,和connection_id但是却没有记录connection_id对应的详细用户信息。在后期审计进行行为追踪时,根据binlog记录的行为及对应的connection-id结合之前连接日志记录进行分析,得出最后的结论。1.设置init-connect1.1创建用于存放连接日志的数据库和表createdatabaseaccesslog;CREATETABLEaccesslog.accesslog(`id`int(11)primarykeyauto_increment,`time`timestamp,`localname`varchar(30),`matchname`varchar(30))1.2创建用户权限可用现成的root用户用于信息的读取grantselectonaccesslog.*toroot;如果存在具有to*.*权限的用户需要进行限制。这里还需要注意用户必须对accesslog表具有insert权限grantselectonaccesslog.*touser@’%’;1.3设置init-connect在[mysqld]下添加以下设置:init-connect=’insertintoaccesslog.accesslog(id,time,localname,matchname)values(connection_id(),now(),user(),current_user());’------注意user()和current_user()的区别log-bin=xxx这里必须开启binlog1.4重启数据库生效shell>/etc/init.d/mysqlrestart2.记录追踪2.1thread_id确认可以用以下语句定位语句执行人Tencent:~#mysqlbinlog--start-datetime='2011-01-2616:00:00'--stop-datetime='2011-01-2617:00:00'/var/lib/mysql/mysql-bin.000010|grep-B5'wsj'COMMIT/*!*/;#at767#11012616:16:43serverid1end_log_pos872Querythread_id=19exec_time=0error_code=0usetest/*!*/;SETTIMESTAMP=1296029803/*!*/;createtablewsj(idintunsignednotnull)--BEGIN/*!*/;#at940#11012616:16:57serverid1end_log_pos1033Querythread_id=19exec_time=0error_code=0SETTIMESTAMP=1296029817/*!*/;insertintowsj(id)values(1)--BEGIN/*!*/;#at1128#11012616:16:58serverid1end_log_pos1221Querythread_id=19exec_time=0error_code=0SETTIMESTAMP=1296029818/*!*/;insertintowsj(id)values(2)2.2用户确认thread_id确认以后,找到元兇就只是一条sql语句的问题了。mysql>select*fromaccesslogwhereid=19;+----+---------------------+---------------------+-----------+|id|time|localname|matchname|+----+---------------------+---------------------+-----------+|19|2011-01-2616:15:54|[email protected]|test@%|+----+---------------------+---------------------+-----------+1rowinset(0.00sec)
❻ 掌握sql语言对开展审计信息化有何作用
直接针对数据库而不是针对系统进行操作。这样审计的时候就能规避系统逻辑直接访问数据库查看数据层面上是否有作假。关联的表是否能对得上,是否有直接对数据库的刻意删除记录信息等了。
❼ 掌握sql语言对开展电子数据审计有何作用
审计涵盖的业务数据一是信息系统架构。信息系统是以B/S为主体结构、由多个管理子系统相结合的分布式网络管理系统.采用的是Oracle数据库,各子系统具有一定的独立性.同时.数据库之间通过一定的约束进行关联。此次审计主要针对权属交易子...
关键词
质量审计 / 业务数据 / SQL语句 / Or
❽ 什么是数据库的审计功能,为什么要提供审计功能
数据库审计的功能有很多以及为什么要审计功能,我说几点重要的:
1、合规性审计
数据库审计系统能否满足国家数据安全相关法律法规以及各行业监管的“合规性要求”,是各单位风控部门关注的重点。近几年,针对个人隐私和敏感数据保护的要求不断提高,包括金融、教育、医疗、政务等等以及互联网在内的各个行业纷纷加强了对个人信息保护的关注和投入力度,一系列面向个人信息保护的法律、规范和要求也相继推出。在此背景下,数据库审计系统需要根据“合规性要求”,形成具有针对性的监测与审计报告,帮助各单位全面了解合规风险与合规状况。
2、风险监控
数据库审计系统的“风险监控能力”,是各单位安全部门关注的重点,包括是否存在对数据资产的攻击、口令猜测、数据泄露、第三方违规操作、不明访问来源等安全风险。因此,系统需要支持更加全面、灵活的策略规则配置,准确的规则触发与及时告警的能力,从而在第一时间发现并解决风险问题,避免事件规模及危害的进一步扩大。此外,数据库审计系统应具备自动化、智能化的学习能力,通过对重要数据资产访问来源和访问行为等的“学习”,建立起访问来源和访问行为的基线,并以此作为进一步发现异常访问和异常行为的基础。
3、系统检测
数据库审计系统的“系统监测能力”,是企业运维部门关注的重点,包括数据资产是否存在异常访问、失败访问或异常操作,以及数据访问详情和系统性能等运维管理问题。因此,需要通过审计系统的监测告警能力,及时发现系统风险或异常运行状况,从而进一步规范运维过程、提升运维效率。
纯属个人意见,希望采纳~安华金和的数据库审计不错,推荐你咨询下他们。你可以采纳我的建议,不懂的可以继续追问哦
❾ 如何开启sqlserver2008数据库审计功能
SQLSERVER2008新增的审核功能
在sqlserver2008新增了审核功能,可以对服务器级别和数据库级别的操作进行审核/审计,事实上,事件通知、更改跟踪、变更数据捕获(CDC)
都不是用来做审计的,只是某些人乱用这些功能,也正因为乱用这些功能导致踩坑
事件通知:性能跟踪
更改跟踪:用Sync Services来构建偶尔连接的系统
变更数据捕获(CDC):数据仓库的ETL 中的数据抽取(背后使用logreader)
而审核是SQLSERVER专门针对数据库安全的进行的审核,记住,他是专门的!
我们看一下审核的使用方法
审核对象
步骤一:创建审核对象,审核对象是跟保存路径关联的,所以如果你需要把审核操作日志保存到不同的路径就需要创建不同的审核对象
我们把审核操作日志保存在文件系统里,在创建之前我们还要在相关路径先创建好保存的文件夹,我们在D盘先创建sqlaudits文件夹,然后执行下面语句
--创建审核对象之前需要切换到master数据库
USE [master]
GO
CREATE SERVER AUDIT MyFileAudit TO FILE(FILEPATH='D:\sqlaudits') --这里指定文件夹不能指定文件,生成文件都会保存在这个文件夹
GO
实际上,我们在创建审核对象的同时可以指定审核选项,下面是相关脚本
把日志放在磁盘的好处是可以使用新增的TVF:sys.[fn_get_audit_file] 来过滤和排序审核数据,如果把审核数据保存在Windows 事件日志里查询起来非常麻烦
USE [master]
GO
CREATE SERVER AUDIT MyFileAudit TO FILE(
FILEPATH='D:\sqlaudits',
MAXSIZE=4GB,
MAX_ROLLOVER_FILES=6)
WITH (
ON_FAILURE=CONTINUE,
QUEUE_DELAY=1000);
ALTER SERVER AUDIT MyFileAudit WITH(STATE =ON)
MAXSIZE:指明每个审核日志文件的最大大小是4GB
MAX_ROLLOVER_FILES:指明滚动文件数目,类似于SQL ERRORLOG,达到多少个文件之后删除前面的历史文件,这里是6个文件
ON_FAILURE:指明当审核数据发生错误时的操作,这里是继续进行审核,如果指定shutdown,那么将会shutdown整个实例
queue_delay:指明审核数据写入的延迟时间,这里是1秒,最小值也是1秒,如果指定0表示是实时写入,当然性能也有一些影响
STATE:指明启动审核功能,STATE这个选项不能跟其他选项共用,所以只能单独一句
在修改审核选项的时候,需要先禁用审核,再开启审核
ALTER SERVER AUDIT MyFileAudit WITH(STATE =OFF)
ALTER SERVER AUDIT MyFileAudit WITH(QUEUE_DELAY =1000)
ALTER SERVER AUDIT MyFileAudit WITH(STATE =ON)
审核规范
在SQLSERVER审核里面有审核规范的概念,一个审核对象只能绑定一个审核规范,而一个审核规范可以绑定到多个审核对象
我们来看一下脚本
CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFile
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO
CREATE SERVER AUDIT MyAppAudit TO APPLICATION_LOG
GO
ALTER SERVER AUDIT MyAppAudit WITH(STATE =ON)
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE=OFF)
GO
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile
FOR SERVER AUDIT MyAppAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO
我们创建一个服务器级别的审核规范CaptureLoginsToFile,然后再创建多一个审核对象MyAppAudit ,这个审核对象会把审核日志保存到Windows事件日志的应用程序日志里
我们禁用审核规范CaptureLoginsToFile,修改审核规范CaptureLoginsToFile属于审核对象MyAppAudit ,修改成功
而如果要把多个审核规范绑定到同一个审核对象则会报错
CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFileA
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO
CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFileB
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO
--消息 33230,级别 16,状态 1,第 86 行
--审核 'MyFileAudit' 的审核规范已经存在。
这里要说一下 :审核对象和审核规范的修改 ,无论是审核对象还是审核规范,在修改他们的相关参数之前,他必须要先禁用,后修改,再启用
--禁用审核对象
ALTER SERVER AUDIT MyFileAudit WITH(STATE =OFF)
--禁用服务器级审核规范
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE=OFF)
GO
--禁用数据库级审核规范
ALTER DATABASE AUDIT SPECIFICATION CaptureDBLoginsToFile WITH (STATE=OFF)
GO
--相关修改选项操作
--启用审核对象
ALTER SERVER AUDIT MyFileAudit WITH(STATE =ON)
--启用服务器级审核规范
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE=ON)
GO
--启用数据库级审核规范
ALTER DATABASE AUDIT SPECIFICATION CaptureDBLoginsToFile WITH (STATE=ON)
GO
审核服务器级别事件
审核服务级别事件,我们一般用得最多的就是审核登录失败的事件,下面的脚本就是审核登录成功事件和登录失败事件
CREATE SERVER AUDIT SPECIFICATION CaptureLoginsToFile
FOR SERVER AUDIT MyFileAudit
ADD (failed_login_group),
ADD (successful_login_group)
WITH (STATE=ON)
GO
修改审核规范
--跟审核对象一样,更改审核规范时必须将其禁用
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE =OFF)
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile
ADD (login_change_password_gourp),
DROP (successful_login_group)
ALTER SERVER AUDIT SPECIFICATION CaptureLoginsToFile WITH (STATE =ON)
GO
审核操作组
每个审核操作组对应一种操作,在SQLSERVER2008里一共有35个操作组,包括备份和还原操作,数据库所有权的更改,从服务器和数据库角色中添加或删除登录用户
添加审核操作组的只需在审核规范里使用ADD,下面语句添加了登录用户修改密码操作的操作组
ADD (login_change_password_gourp)
这里说一下服务器审核的内部实际上使用的是SQL2008新增的扩展事件里面的其中一个package:SecAudit package,当然他内部也是使用扩展事件来收集服务器信息
审核数据库级别事件
数据库审核规范存在于他们的数据库中,不能审核tempdb中的数据库操作
CREATE DATABASE AUDIT SPECIFICATION和ALTER DATABASE AUDIT SPECIFICATION
工作方式跟服务器审核规范一样
在SQLSERVER2008里一共有15个数据库级别的操作组
7个数据库级别的审核操作是:select ,insert,update,delete,execute,receive,references
相关脚本如下:
--创建审核对象
USE [master]
GO
CREATE SERVER AUDIT MyDBFileAudit TO FILE(FILEPATH='D:\sqldbaudits')
GO
ALTER SERVER AUDIT MyDBFileAudit WITH (STATE=ON)
GO
--创建数据库级别审核规范
USE [sss]
GO
CREATE DATABASE AUDIT SPECIFICATION CaptureDBActionToEventLog
FOR SERVER AUDIT MyDBFileAudit
ADD (database_object_change_group),
ADD (SELECT ,INSERT,UPDATE,DELETE ON schema::dbo BY PUBLIC)
WITH (STATE =ON)
我们先在D盘创建sqldbaudits文件夹
第一个操作组对数据库中所有对象的DDL语句create,alter,drop等进行记录
第二个语句监视由任何public用户(也就是所有用户)对dbo架构的任何对象所做的DML操作
创建完毕之后可以在SSMS里看到相关的审核
❿ SQL Server在审计工作中的应用
1、熟悉该单位所使用的财务软件的数据库结构,例如:金蝶、用友等
2、本身具备强大的SQL语句功底,可以使用SQL语句对其财务表内的数据进行汇总统计
3、依据财务常识与审计中对各个财务科目的数据进行比对,发现其中问题,然后再追朔其具体帐目的单据
4、不同种类的企业,在其财务流中,均会不同程度存在违法违纪问题,只要在审计过程中仔细认真核对其数据即可,另外,也要对其数据与财务凭证做细致对比
愿你成功!