VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

操作审计

功能描述

数据库安全对数据库系统来说至关重要。Vastbase将用户对数据库的所有操作写入审计日志。数据库安全管理员可以利用这些日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等。

关于审计功能,用户需要了解以下几点内容:

  • 审计开关audit_enabled,默认值为off,表示关闭审计功能。关闭审计时,默认对数据库启停、用户删除及修改、修改系统参数这三类行为进行审计,并生成审计日志。

  • 审计总开关audit_enabled及各审计项的开关支持动态加载。在数据库运行期间修改该配置项的值会立即生效,无需重启数据库。

  • 当审计开启,即audit_enabled=on时,记录的审计日志根据具体的审计策略确定。

  • 审计日志空间告警可通过设置vb_audit_space_alarm_threshold参数实现,取值范围为[0,1),最多可精确到小数点后2位,其中0表示不设置告警阈值(默认值)。

    例如:vb_audit_space_alarm_threshold=0.85,表示当审计日志存储空间达到85%时,打印告警信息。

    可通过pg_audit_logsize_warning()函数查询告警情况,当返回值为”1”时表示已超过阈值。

  • 未开启三权分立,即enable_separation_of_duty=off时,只有初始用户和系统管理员(vbadmin)可以查看审计日志,其他用户不具备查看审计日志的权限。

  • 开启三权分立,即参数enable_separation_of_duty=on时,只有审计管理员(vbaudit)具备查看审计日志权限,系统管理员(vbadmin)、安全保密管理员(vbsso)和普通用户不具备查看审计日志权限。

目前,Vastbase支持以下审计项如表1所示。

表1 配置审计项

配置项 描述
用户登录、注销审计 参数:audit_login_logout默认值为7,表示开启用户登录、退出的审计功能。设置为0表示关闭用户登录、退出的审计功能。不推荐设置除0和7之外的值。
指定用户审计 参数:audit_user 默认值为"*",表示对所有用户都审计,参数值为空时等同于默认值。
  • audit_user参数对所有审计项均有效,当用户不符合审计用户策略时,所有的审计项都不会执行审计及记录审计信息。
  • 三权分立开启时,audit_user参数由审计管理员设置,其它用户无权限修改。
  • 数据库启动、停止、恢复和切换审计 参数:audit_database_process默认值为1,表示开启数据库启动、停止、恢复和切换的审计功能。
    用户锁定和解锁审计 参数:audit_user_locked默认值为1,表示开启审计用户锁定和解锁功能。
    用户访问越权审计 参数:audit_user_violation默认值为0,表示关闭用户越权操作审计功能。
    授权和回收权限审计 参数:audit_grant_revoke默认值为1,表示开启审计用户权限授予和回收功能。
    数据库对象的CREATE,ALTER,DROP操作审计 参数:audit_system_object默认值为12295,表示只对DATABASE、SCHEMA、USER、DATA SOURCE这四类数据库对象的CREATE、ALTER、DROP操作进行审计。
    具体表的INSERT、UPDATE和DELETE操作审计 参数:audit_dml_state默认值为0,表示关闭具体表的DML操作(SELECT除外)审计功能。
    SELECT操作审计 参数:audit_dml_state_select默认值为0,表示关闭SELECT操作审计功能。
    COPY审计 参数:audit_copy_exec默认值为0,表示开启copy操作审计功能。
    存储过程和自定义函数的执行审计 参数:audit_function_exec默认值为0,表示不记录存储过程和自定义函数的执行审计日志。
    SET审计 参数:audit_set_parameter默认值为1,表示开启set审计功能。
    事务ID记录 参数:audit_xid_info默认值为0,表示关闭审计日志记录事务ID功能。

    表2 安全相关参数及说明

    参数名 说明
    ssl 指定是否启用SSL连接。
    require_ssl 指定服务器端是否强制要求SSL连接。
    ssl_ciphers 指定SSL支持的加密算法列表。
    ssl_cert_file 指定包含SSL服务器证书的文件的名称。
    ssl_key_file 指定包含SSL私钥的文件名称。
    ssl_ca_file 指定包含CA信息的文件的名称。
    ssl_crl_file 指定包含CRL信息的文件的名称。
    password_policy 指定是否进行密码复杂度检查。
    password_reuse_time 指定是否对新密码进行可重用天数检查。
    password_reuse_max 指定是否对新密码进行可重用次数检查。
    password_lock_time 指定帐户被锁定后自动解锁的时间。
    failed_login_attempts 如果输入密码错误的次数达到此参数值时,当前帐户被锁定。
    password_encryption_type 指定采用何种加密方式对用户密码进行加密存储。
    password_min_uppercase 密码中至少需要包含大写字母的个数。
    password_min_lowercase 密码中至少需要包含小写字母的个数。
    password_min_digital 密码中至少需要包含数字的个数。
    password_min_special 密码中至少需要包含特殊字符的个数。
    password_min_length 密码的最小长度。说明:在设置此参数时,请将其设置成不大于password_max_length,否则进行涉及密码的操作会一直出现密码长度错误的提示
    password_max_length 密码的最大长度。说明:在设置此参数时,请将其设置成不小于password_min_length,否则进行涉及密码的操作会一直出现密码长度错误的提示。
    password_effect_time 密码的有效期限。
    password_notify_time 密码到期提醒的天数。
    audit_enabled 控制审计进程的开启和关闭。
    audit_directory 审计文件的存储目录。
    audit_data_format 审计日志文件的格式,当前仅支持二进制格式(binary)。
    audit_rotation_interval 指定创建一个新审计日志文件的时间间隔。当现在的时间减去上次创建一个审计日志的时间超过了此参数值时,服务器将生成一个新的审计日志文件。
    audit_rotation_size 指定审计日志文件的最大容量。当审计日志消息的总量超过此参数值时,服务器将生成一个新的审计日志文件。
    audit_resource_policy 控制审计日志的保存策略,以空间还是时间限制为优先策略,on表示以空间为优先策略。
    audit_file_remain_time 表示需记录审计日志的最短时间要求,该参数在audit_resource_policy为off时生效。
    audit_space_limit 审计文件占用磁盘空间的最大值。
    audit_file_remain_threshold 审计目录下审计文件的最大数量。
    audit_login_logout 指定是否审计数据库用户的登录(包括登录成功和登录失败)、注销。
    audit_database_process 指定是否审计数据库启动、停止、切换和恢复的操作。
    audit_user_locked 指定是否审计数据库用户的锁定和解锁。
    audit_user_violation 指定是否审计数据库用户的越权访问操作。
    audit_grant_revoke 指定是否审计数据库用户权限授予和回收的操作。
    audit_system_object 指定是否审计数据库对象的CREATE、DROP、ALTER操作。
    audit_dml_state 指定是否审计具体表的INSERT、UPDATE、DELETE操作。
    针对显式开启事务的DML或DDL语句,记录事务的生命周期。即从begin开始,到commit或rollback或end的过程语句,需包含begin、commit、rollback、end关键字。
    针对未显式开启事务(默认提交)的语句,只记录DML或DDL语句本身。
    audit_dml_state_select 指定是否审计SELECT操作。
    audit_copy_exec 指定是否审计COPY操作。
    audit_function_exec 指定在执行存储过程、匿名块或自定义函数(不包括系统自带函数)时是否记录审计信息。
    audit_set_parameter 指定是否审计SET操作。
    enable_Separation_Of_Duty 指定是否开启三权分立。
    session_timeout 建立连接会话后,如果超过此参数的设置时间,则会自动断开连接。
    auth_iteration_count 认证加密信息生成过程中使用的迭代次数。
    vb_audit_space_alarm_threshold 设置审计日志空间告警阈值,表示当已使用审计日志空间占审计日志总空间(audit_space_limit)的比例超过本阈值时,会打印告警信息。取值范围为[0,1),最多可精确到小数点后2位,其中0表示不设置告警阈值(默认值)。

    操作步骤

    1、 以操作系统用户vastbase登录数据库主节点。

    2、 连接数据库。

    数据库安装完成后,默认生成名称为postgres的数据库,5432为数据库主节点的端口号,需根据Vastbase的实际情况做替换。

    第一次连接数据库时可以连接到此数据库。 执行如下命令连接数据库。

    vsql -d postgres  -p 5432
    

    连接成功后,系统显示类似如下信息:

    vsql ((Vastbase G100 V2.2 (Build 12) Alpha) compiled at 2023-01-31 23:04:01 commit 11395 last mr  )
    Non-SSL connection (SSL connection is recommended when requiring high-security)
    Type "help" for help.
    
    postgres=#
    

    “Non-SSL connection”表示未使用SSL方式连接数据库。如果需要高安全性时,请使用SSL连接。

    3、检查审计总开关状态。

    1)用show命令显示审计总开关audit_enabled的值。

    SHOW audit_enabled;
    

    如果显示为off,执行“\q”命令退出数据库。

    2)修改postgresql.conf的audit_enabled=”on”,重启数据库,使得参数生效。

    或者使用如下命令修改该参数:

    vb_guc reload -D $PGDATA -c "audit_enabled=on"
    

    4、配置具体的审计项。

    只有开启审计功能,用户的操作(包括用户建立的会话不符合IP段和时间段导致会话连接失败)才会被记录到审计文件中。 各审计项的默认参数都符合安全标准,用户可以根据需要开启其他审计功能,但会对性能有一定影响。

    以开启对数据库所有对象的增删改操作的审计开关为例,其他配置项的修改方法与此相同,修改postgresql.conf的audit_system_object=67121159,重启数据库,使得参数生效。

    或者使用如下命令配置:

    vb_guc reload -D $PGDATA -c "audit_system_object=67121159"
    

    其中audit_system_object代表审计项开关,67121159为该审计开关的值。

    5、连接数据库。

    vsql -d postgres  -p 5432
    

    6、设置日志空间告警阈值。

    alter system set vb_audit_space_alarm_threshold = 0.85;
    

    7、查询日志空间告警函数。

    select * from pg_audit_logsize_warning();
    

    示例

    1、修改postgresql.conf配置文件参数,指定用户进行审计。

    audit_enabled='on'
    audit_operation_result='0'
    audit_system_object='1'
    audit_user='lst'
    

    2、使用数据库初始用户登录数据库,创建用户并授予权限。

    CREATE USER lst PASSWORD 'Bigdata@123';
    CREATE USER lll PASSWORD 'Bigdata@123';
    grant all privileges to lst;
    grant all privileges to lll;
    

    3、使用lst用户登录,进行对象操作。

    vsql -dvastbase -Ulst -WBigdata@123
    
    create database test;
    drop database test;
    

    4、使用lll用户登录,进行对象操作。

    vsql -dvastbase -Ulll -WBigdata@123
    
    create database test;
    drop database test;
    

    5、使用数据库初始用户登录数据库,查看审计内容。

    vsql -r
    select pg_query_audit('2023-02-08 17:50:00 +08','2023-02-09');
    

    结果返回如下,只记录了用户lst的操作:

           pg_query_audit
    ----------------------------------------------------------------------------------------------------------------------------------------------------------
    
     ("2023-02-08 09:52:16+00",system_stop,ok,"",null,null,null,null,"system stop fast success",node1,null,null,null,"(ACL_NO_RIGHTS)")
    
     ("2023-02-08 09:52:18+00",internal_event,ok,0,[unknown],[unknown],[unknown]@[unknown]@SSL_OFF,file,"create a new audit file",node1,47264880535296@7291651
    
    38391468,5432,"(null)","(ACL_NO_RIGHTS)")
    
     ("2023-02-08 09:52:18+00",system_start,ok,"",null,null,null,null,"system startup success(port = 5432)",node1,null,null,null,"(ACL_NO_RIGHTS)")
    
     ("2023-02-08 09:52:51+00",login_success,ok,25815,lst,vastbase,vsql@[local]@SSL_OFF,vastbase,"login db(vastbase) success,the current user is:lst, SSL=off"
    
    ,node1,47265234683648@729165171615710,5432,null,"(ACL_CONNECT)")
    
     ("2023-02-08 09:52:51+00",set_parameter,ok,25815,lst,vastbase,vsql@[local]@SSL_OFF,connection_info,"SET connection_info = '{""driver_name"":""libpq"",""d
    
    river_version"":""(Vastbase G100 V2.2 (Build 12) Alpha) compiled at 2023-01-31 23:04:01 commit 11395 last mr  ""}'",node1,47265234683648@729165171618322,5
    
    432,null,"(ACL_NO_RIGHTS)")
    
     ("2023-02-08 09:52:59+00",ddl_database,ok,25815,lst,vastbase,vsql@[local]@SSL_OFF,test,"create database test;",node1,47265234683648@729165179102098,5432,
    
    null,"(ACL_NO_RIGHTS)")
    
     ("2023-02-08 09:53:03+00",ddl_database,ok,25815,lst,vastbase,vsql@[local]@SSL_OFF,test,"drop database test;",node1,47265234683648@729165183874167,5432,nu
    
    ll,"(ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT)")
    
     ("2023-02-08 09:53:03+00",login_failed,failed,10,[unknown],[unknown],[unknown]@[unknown]@SSL_OFF,test,"database ""test"" does not exist,It seems to have
    
    just been dropped or renamed, SSL=off",node1,47265316603648@729165183891048,5432,"(null)",null)
    
     ("2023-02-08 09:53:04+00",user_logout,ok,25815,lst,vastbase,vsql@[local]@SSL_OFF,vastbase,"logout db(vastbase) success",node1,47265234683648@729165184954
    
    445,5432,null,"(ACL_NO_RIGHTS)")
    (9 rows)
    

    6、清理测试数据。

    DROP USER lst;
    DROP USER lll;