• SQL Server >> SQL Server Audit(审核\审计)


    什么是审核?

    SQL Server 2016开始支持Audit审核功能,且所有版本都支持。Audit收集单个服务器实例或数据库级操作和操作组以进行监视。 SQL Server Audit分为服务器实例级别和数据库级别,使用扩展事件来帮助创建审核,审核的事件写入事件日志或审核文件。

    服务器审核对象

    创建服务器审核和数据库审核的第一步 都先创建服务器审核对象(Server Audit),Server Audit是审核的数据保存定义,例如保存到文件\Windows日志,FILEPATH 审核文件保存位置,MAX_ROLLOVER_FILES 最大文件多少个(超出了就会删除旧的文件),MAX_SIZE单个审核文件的大小,WHERE对审核的对象进行限制(例如OBJECT='XXX'代表只对表名是XXX进行审核),event_field_name可以对sys.fn_get_audit_file的字段进行筛选

    服务器审核规范(Server Audit Specification)

    要创建服务器审核,必须创建一个服务器审核规范。服务器审核规范收集由扩展事件功能引发的服务器级操作组(事件)。如果说审核本身是一个数据库功能引擎,那审核规范就是创建要审核的事件的定义,决定哪些事件需要被审核。审核引擎会按照定义收集事件记录然后发送到指定的输出保存位置。

    数据库审核规范(Database Audit Specification)

    类同上面的服务器规范,只是审核事件变成是数据库级别的操作。

    审核记录输出目标

    目标可以是文件、Windows 安全事件日志或 Windows 应用程序事件日志。 必须定期查看和归档这些日志。输出目标是磁盘文件时,必须确保SQL Server 服务帐户对磁盘文件目录有读写权限。

    审核记录

    一般审核记录都是保存到文件中,再通过调用SQL函数sys.fn_get_audit_file读取数据。由于SQL Audit可能生成多个目标文件(取决于启用SQL Audit时的MAX_ROLLOVER_FILES 参数),每次要实现增量数据读取,就需要通过以下几个步骤:1、初始化读取全部数据,sys.fn_get_audit_file(目录路径及文件pattern,default,default); 2、从初始化数据中获取audit_file_offset最大值及该记录的file_name字段值作为下一次增量读取使用;3、sys.fn_get_audit_file(目录路径及文件pattern,上一步获取的filename,上一步获取的audit_file_offset);

    如何创建审核?

    创建服务器审核和数据库审核的第一步 都先创建服务器审核对象(Server Audit),然后才是创建服务器审核规范。

    例子:创建服务器审核规范,并且审核成功和失败登录事件

    USE master
    GO
    
    -- 检查下有没有存在的服务器审核规范,先禁用
    IF EXISTS (SELECT * FROM sys.server_audit_specifications WHERE NAME = 'SVR_Audit_Specification_LOGON')
        ALTER SERVER AUDIT SPECIFICATION SVR_Audit_Specification_LOGON WITH (STATE = OFF) 
    GO
    
    IF EXISTS (SELECT * FROM sys.server_audit_specifications WHERE NAME = 'SVR_Audit_Specification_LOGON')
        DROP SERVER AUDIT SPECIFICATION SVR_Audit_Specification_LOGON
    GO
    
    IF EXISTS (SELECT * FROM sys.server_audits WHERE NAME = 'Logon_Security_Audit')
        ALTER SERVER AUDIT Logon_Security_Audit WITH (STATE = OFF) 
    GO
    
    IF EXISTS (SELECT * FROM sys.server_audits WHERE NAME = 'Logon_Security_Audit')
        DROP SERVER AUDIT Logon_Security_Audit  
    GO
    
    -- 创建服务器审核对象先,指定3个文件,每个10MB
    CREATE SERVER AUDIT Logon_Security_Audit  
    TO FILE ( FILEPATH =   
    'D:\临时工作目录\SQL Server实验\SQL Server Audit审核\服务器审核规范\' 
    , MAXSIZE = 10MB
    , MAX_ROLLOVER_FILES = 3
    , RESERVE_DISK_SPACE = OFF )
    WITH( ON_FAILURE = CONTINUE )
    WHERE server_principal_name <> 'NT AUTHORITY\NETWORK SERVICE';
    GO  
    
    -- 启用服务器审核对象
    ALTER SERVER AUDIT Logon_Security_Audit   
    WITH (STATE = ON) ;  
    GO  
    
    -- 创建服务器审核规范,审核成功登录和失败登录事件
    CREATE SERVER AUDIT SPECIFICATION SVR_Audit_Specification_LOGON
    FOR SERVER AUDIT Logon_Security_Audit  
        ADD (SUCCESSFUL_LOGIN_GROUP),
        ADD (FAILED_LOGIN_GROUP)  
        WITH (STATE=ON);  
    GO  
    
    
    
    SELECT *
    FROM sys.fn_get_audit_file('D:\临时工作目录\SQL Server实验\SQL Server Audit审核\服务器审核规范\*',default,default)

    例子:创建数据库审核规范,并且审核由数据库用户jerry发起对数据库表dbo.db_audit_test的insert操作,包括成功和失败的insert

    USE AdventureWorks2019
    GO
    
    -- 检查下有没有存在的服务器审核规范,先禁用
    IF EXISTS (SELECT * FROM sys.database_audit_specifications WHERE NAME = 'DB_Audit_Specification_tbl_test_insert_by_jerry')
        ALTER DATABASE AUDIT SPECIFICATION DB_Audit_Specification_tbl_test_insert_by_jerry WITH (STATE = OFF) 
    GO
    
    IF EXISTS (SELECT * FROM sys.database_audit_specifications WHERE NAME = 'DB_Audit_Specification_tbl_test_insert_by_jerry')
        DROP DATABASE AUDIT SPECIFICATION DB_Audit_Specification_tbl_test_insert_by_jerry
    GO
    
    USE master
    GO
    
    IF EXISTS (SELECT * FROM sys.server_audits WHERE NAME = 'SVR_Audit_DB_tbl_test_insert_by_jerry')
        ALTER SERVER AUDIT SVR_Audit_DB_tbl_test_insert_by_jerry WITH (STATE = OFF) 
    GO
    
    IF EXISTS (SELECT * FROM sys.server_audits WHERE NAME = 'SVR_Audit_DB_tbl_test_insert_by_jerry')
        DROP SERVER AUDIT SVR_Audit_DB_tbl_test_insert_by_jerry  
    GO
    
    -- 创建服务器审核对象先,指定3个文件,每个10MB
    CREATE SERVER AUDIT SVR_Audit_DB_tbl_test_insert_by_jerry  
    TO FILE ( FILEPATH =   
    'D:\临时工作目录\SQL Server实验\SQL Server Audit审核\数据库审核规范\' 
    , MAXSIZE = 10MB
    , MAX_ROLLOVER_FILES = 3
    , RESERVE_DISK_SPACE = OFF )
    WITH( ON_FAILURE = CONTINUE )
    WHERE server_principal_name <> 'NT AUTHORITY\NETWORK SERVICE';
    GO  
    
    -- 启用数据库审核对象
    ALTER SERVER AUDIT SVR_Audit_DB_tbl_test_insert_by_jerry   
    WITH (STATE = ON) ;  
    GO  
    
    USE AdventureWorks2019
    GO
    
    -- 创建数据库审核规范,审核成功登录和失败登录事件
    CREATE DATABASE AUDIT SPECIFICATION DB_Audit_Specification_tbl_test_insert_by_jerry
    FOR SERVER AUDIT SVR_Audit_DB_tbl_test_insert_by_jerry  
        ADD (INSERT ON dbo.db_audit_test BY JERRY )    
        WITH (STATE=ON);  
    GO  
    
    USE master
    GO
    
    SELECT *
    FROM sys.fn_get_audit_file('D:\临时工作目录\SQL Server实验\SQL Server Audit审核\数据库审核规范\*',default,default)

    参考:

    创建服务器审核和数据库审核规范

    创建服务器审核和服务器审核规范

    SQL Server 审核(数据库引擎)

    SQL Server 审核操作组和操作

    审核记录

    sys.fn_get_audit_file (Transact-SQL)

    CREATE SERVER AUDIT (Transact-SQL)

    CREATE SERVER AUDIT SPECIFICATION (Transact-SQL)

    CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)

  • 相关阅读:
    sqlplus中设定行大小、页大小、字符列格式、数字列格式、清屏
    位图索引
    B树索引
    Oracle列自增实现(3)-DEFAULT Values Using Sequences
    Oracle列自增实现(2)-Identity Columns in Oracle Database 12c Release 1 (12.1)
    oracle列自增实现(1)-Sequence+Trigger实现Oracle列自增
    ORA-01502: 索引或这类索引的分区处于不可用状态
    Oracle中的rowid
    Multitenant Architecture---PDB与CDB
    ODI Studio拓扑结构的创建与配置(Oracle)
  • 原文地址:https://www.cnblogs.com/jenrrychen/p/5199445.html
Copyright © 2020-2023  润新知