none
sqlserver安全审计遇到两个问题 RRS feed

  • 问题

  • sqlserver安全审计遇到两个问题:

    1、记录的时间不是数据库系统本地时间

    2、不能获取参数值,如下:

         declare @a int=5
         delete a2 where a=@a

         如果加入了delete审计,从审计里面只会看到第2行代码,看不到第一行代码,那么,自然就不知道到底被修改为什么值了


    2015年4月23日 8:37

答案

  • 参数值确实没办法的, 而且记录的操作和实际操作可能还对不上,比如你是通过一个几层嵌套的存储过程去改数据的,审核记录的语句是直接对应操作表的那个,我记得好像是无法反推到原始调用的

    至于时间,那个是UTC 时间,读取的时候转化一下就行,类似于 DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), event_time)

    • 已标记为答案 wanyongwy 2015年4月24日 1:40
    2015年4月23日 10:47
  • 1、记录的时间不是数据库系统本地时间
    是不是相差8个小时?
    转换一下时间

    ----查询服务器审核事件
    SELECT  DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), CURRENT_TIMESTAMP),
                    fgaf.[event_time]) AS '触发审核的日期和时间' ,
            fgaf.sequence_number AS '单个审核记录中的记录顺序' ,


    2、获取值是比较麻烦,我估计是因为sqlserver使用关键字匹配,所以匹配到delete这个关键字就记录下来,但是变量内容没有办法获取

    declare @a CHAR(20)
    SET @a='blackberry'
    SELECT * FROM [fruits] where f_name=@a
    
    DELETE [dbo].[fruits] where f_name=@a



    Love SQL


    2015年4月23日 11:12

全部回复

  • 参数值确实没办法的, 而且记录的操作和实际操作可能还对不上,比如你是通过一个几层嵌套的存储过程去改数据的,审核记录的语句是直接对应操作表的那个,我记得好像是无法反推到原始调用的

    至于时间,那个是UTC 时间,读取的时候转化一下就行,类似于 DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), event_time)

    • 已标记为答案 wanyongwy 2015年4月24日 1:40
    2015年4月23日 10:47
  • 1、记录的时间不是数据库系统本地时间
    是不是相差8个小时?
    转换一下时间

    ----查询服务器审核事件
    SELECT  DATEADD(hh, DATEDIFF(hh, GETUTCDATE(), CURRENT_TIMESTAMP),
                    fgaf.[event_time]) AS '触发审核的日期和时间' ,
            fgaf.sequence_number AS '单个审核记录中的记录顺序' ,


    2、获取值是比较麻烦,我估计是因为sqlserver使用关键字匹配,所以匹配到delete这个关键字就记录下来,但是变量内容没有办法获取

    declare @a CHAR(20)
    SET @a='blackberry'
    SELECT * FROM [fruits] where f_name=@a
    
    DELETE [dbo].[fruits] where f_name=@a



    Love SQL


    2015年4月23日 11:12
  • 看来参数问题,可能必须得使用 数据捕获 才能知道被修改成何值了
    2015年4月24日 1:42