2023年8月1日发(作者:)
postgresql11⽇志审计⽇志审计
审计是值记录⽤户的登陆退出以及登陆后在数据库⾥的⾏为操作,可以根据安全等级不⼀样设置不⼀样级别的审计,
此处涉及的参数⽂件有:
logging_collector --是否开启⽇志收集开关,默认off,开启要重启DBlog_destination --⽇志记录类型,默认是stderr,只记录错误输出log_directory --⽇志路径,默认是$PGDATA/pg_log, 这个⽬录最好不要和数据⽂件的⽬录放在⼀起, ⽬录需要给启动postgres的操作系统⽤户写权限.log_filename --⽇志名称,默认是postgresql-%Y-%m-%d_%H%M%_file_mode --⽇志⽂件类型,默认为0600log_truncate_on_rotation --默认为off,设置为on的话,如果新建了⼀个同名的⽇志⽂件,则会清空原来的⽂件,再写⼊⽇志,⽽不是在后⾯附加。log_rotation_age --保留单个⽂件的最⼤时长,默认是1d,也有1h,1min,1s,个⼈觉得不实⽤log_rotation_size --保留单个⽂件的最⼤尺⼨,默认是10MBlog_error_verbosity --默认为default,verbose表⽰冗长的log_connections --⽤户session登陆时是否写⼊⽇志,默认offlog_disconnections --⽤户session退出时是否写⼊⽇志,默认off
【推荐的⽇志配置】logging_collector = onlog_destination = 'csvlog'log_truncate_on_rotation = onlog_connections = onlog_disconnections = onlog_error_verbosity = verboselog_statement = ddllog_min_duration_statement = 60slog_checkpoints = onlog_lock_waits = ondeadlock_timeout = 1s
1.记录级别:记录⽤户登陆数据库后的各种操作,postgres⽇志⾥分成了3类,通过参数pg_statement来控制,默认的pg_statement参数值是none,即不记录,可以设置ddl(记录create,drop和alter)、mod(记录ddl+insert,delete,update和truncate)和all(mod+select)。
log_statement = ddl ⼀般的OLTP系统审计级别设置为ddl就够了,因为记录输出各种SQL对性能的影响还是蛮⼤的,安全级别⾼⼀点的也可以设置mod模式,有条件也可以不在数据库层⾯做,⽽是购买设备放在⽹络层监控解析。
按不同情况进⾏配置审计级别:1)审计⽤户hm连到数据库hm 的所有 role hm in database hm set log_statement='all';2) 审计⽤户hm 的所有 role hm set log_statement='all';3) 审计任何⽤户连接到数据库hm 的所有SQL. alter database hm set log_statement='all';
2.定位慢查询SQL
可以设置⼀定时长的参数(log_min_duration_statement),来记录超过该时长的所有SQL,对找出当前数据库的慢查询很有效。 ⽐如log_min_duration_statement = 2s,记录超过2秒的SQL,改完需要reload
log_min_duration_statement = 2s
3.监控数据库的checkpoint
当数据库进⾏⼀项⼤更新操作时,如果参数设置不当,会在⽇志⾥留下⼤量的告警信息,频繁的做checkpoint会导致系统变慢,不⽤设置都会有。但是不会记录系统正常的checkpoint,如果你想看系统⼀天之类发⽣了多少次checkpoint,以及每次checkpoint的⼀些详细信息,⽐如buffer,sync等,就可以通过设置log_checkpoints,该参数默认值是off。
log_checkpoints = on
4.监控数据库的锁
数据库的锁通常可以在pg_locks这个系统表⾥找,但这只是当前的锁表/⾏信息,如果你想看⼀天内有多少个超过死锁时间的锁发⽣,可以在⽇志⾥设置并查看,log_lock_waits 默认是off,可以设置开启。这个可以区分SQL慢是资源紧张还是锁等待的问题。log_lock_waits=ondeadlock_timeout=1还有⼀些Debug功能,适合修改源码调试,⼀般的的系统上并不需要,暂时⽐较关注的就这些。
5.可以在表上设置触发器,来审计
6.可以使⽤插件pg_log_userqueries 来做,没有必要 【注意事项】1. 超级⽤户可以修改这些配置项, 所以被审计的⽤户最好是普通⽤户. 否则⽤户连上来可以修改这些审计项.2. 程序⽤的数据库账号和个⼈⽤的数据库账号分开, 对于程序⽤的数据库账号可以只审计DDL操作, ⽽对于个⼈使⽤的数据库账号, 建议审计所有的SQL.3. 变量优先级(事务>会话>database/role>启动参数>配置⽂件)
某些全局变量可以动态修改,例如本⽂提到的log_statement。修改后reload之后,所有会话都会读到最新的变量
2023年8月1日发(作者:)
postgresql11⽇志审计⽇志审计
审计是值记录⽤户的登陆退出以及登陆后在数据库⾥的⾏为操作,可以根据安全等级不⼀样设置不⼀样级别的审计,
此处涉及的参数⽂件有:
logging_collector --是否开启⽇志收集开关,默认off,开启要重启DBlog_destination --⽇志记录类型,默认是stderr,只记录错误输出log_directory --⽇志路径,默认是$PGDATA/pg_log, 这个⽬录最好不要和数据⽂件的⽬录放在⼀起, ⽬录需要给启动postgres的操作系统⽤户写权限.log_filename --⽇志名称,默认是postgresql-%Y-%m-%d_%H%M%_file_mode --⽇志⽂件类型,默认为0600log_truncate_on_rotation --默认为off,设置为on的话,如果新建了⼀个同名的⽇志⽂件,则会清空原来的⽂件,再写⼊⽇志,⽽不是在后⾯附加。log_rotation_age --保留单个⽂件的最⼤时长,默认是1d,也有1h,1min,1s,个⼈觉得不实⽤log_rotation_size --保留单个⽂件的最⼤尺⼨,默认是10MBlog_error_verbosity --默认为default,verbose表⽰冗长的log_connections --⽤户session登陆时是否写⼊⽇志,默认offlog_disconnections --⽤户session退出时是否写⼊⽇志,默认off
【推荐的⽇志配置】logging_collector = onlog_destination = 'csvlog'log_truncate_on_rotation = onlog_connections = onlog_disconnections = onlog_error_verbosity = verboselog_statement = ddllog_min_duration_statement = 60slog_checkpoints = onlog_lock_waits = ondeadlock_timeout = 1s
1.记录级别:记录⽤户登陆数据库后的各种操作,postgres⽇志⾥分成了3类,通过参数pg_statement来控制,默认的pg_statement参数值是none,即不记录,可以设置ddl(记录create,drop和alter)、mod(记录ddl+insert,delete,update和truncate)和all(mod+select)。
log_statement = ddl ⼀般的OLTP系统审计级别设置为ddl就够了,因为记录输出各种SQL对性能的影响还是蛮⼤的,安全级别⾼⼀点的也可以设置mod模式,有条件也可以不在数据库层⾯做,⽽是购买设备放在⽹络层监控解析。
按不同情况进⾏配置审计级别:1)审计⽤户hm连到数据库hm 的所有 role hm in database hm set log_statement='all';2) 审计⽤户hm 的所有 role hm set log_statement='all';3) 审计任何⽤户连接到数据库hm 的所有SQL. alter database hm set log_statement='all';
2.定位慢查询SQL
可以设置⼀定时长的参数(log_min_duration_statement),来记录超过该时长的所有SQL,对找出当前数据库的慢查询很有效。 ⽐如log_min_duration_statement = 2s,记录超过2秒的SQL,改完需要reload
log_min_duration_statement = 2s
3.监控数据库的checkpoint
当数据库进⾏⼀项⼤更新操作时,如果参数设置不当,会在⽇志⾥留下⼤量的告警信息,频繁的做checkpoint会导致系统变慢,不⽤设置都会有。但是不会记录系统正常的checkpoint,如果你想看系统⼀天之类发⽣了多少次checkpoint,以及每次checkpoint的⼀些详细信息,⽐如buffer,sync等,就可以通过设置log_checkpoints,该参数默认值是off。
log_checkpoints = on
4.监控数据库的锁
数据库的锁通常可以在pg_locks这个系统表⾥找,但这只是当前的锁表/⾏信息,如果你想看⼀天内有多少个超过死锁时间的锁发⽣,可以在⽇志⾥设置并查看,log_lock_waits 默认是off,可以设置开启。这个可以区分SQL慢是资源紧张还是锁等待的问题。log_lock_waits=ondeadlock_timeout=1还有⼀些Debug功能,适合修改源码调试,⼀般的的系统上并不需要,暂时⽐较关注的就这些。
5.可以在表上设置触发器,来审计
6.可以使⽤插件pg_log_userqueries 来做,没有必要 【注意事项】1. 超级⽤户可以修改这些配置项, 所以被审计的⽤户最好是普通⽤户. 否则⽤户连上来可以修改这些审计项.2. 程序⽤的数据库账号和个⼈⽤的数据库账号分开, 对于程序⽤的数据库账号可以只审计DDL操作, ⽽对于个⼈使⽤的数据库账号, 建议审计所有的SQL.3. 变量优先级(事务>会话>database/role>启动参数>配置⽂件)
某些全局变量可以动态修改,例如本⽂提到的log_statement。修改后reload之后,所有会话都会读到最新的变量
发布评论