当前位置: 首页 > news >正文

关于postgresql数据库单独设置某个用户日志级别(日志审计)

前言:

很多时候我们想让数据库日志打印详细一点,但是又担心会对数据库本身产生一些不可控的影响,还会担心数据库产生的庞大的日志导致主机资源不太够用的影响。那么今天我们就通过讲解给单个用户设置 log_statement来解决以上这些问题。

注:目前在国外网址还没有找到关于log_statement设置mod级别,但是又不想insert操作不记录日志的屏蔽方案,欢迎大家一起沟通该问题。

1.用户登录登出记录

设置log_disconnections和log_connections参数:

--开启用户登录记录日志信息postgres=# alter system set log_connections to on;
ALTER SYSTEM
postgres=# select pg_reload_conf();pg_reload_conf 
----------------t
(1 row)
postgres=# show log_connections ;log_connections 
-----------------on
(1 row)--开启用户登出记录日志信息
postgres=# alter system set log_disconnections to on;
ALTER SYSTEM
postgres=# select pg_reload_conf();pg_reload_conf 
----------------t
(1 row)
postgres=# show log_disconnections;log_connections 
-----------------on
(1 row)

后台日志输入:

2024-02-21 17:27:49.760 CST,,,18921,"[local]",65d5c215.49e9,1,"",2024-02-21 17:27:49 CST,,0,LOG,00000,"connection received: host=[local]",,,,,,,,,"","not initialized"
2024-02-21 17:27:49.761 CST,"yewu","dtdb",18921,"[local]",65d5c215.49e9,2,"authentication",2024-02-21 17:27:49 CST,7/3286,0,LOG,00000,"connection authorized: user=yewu database=dtdb application_name=psql",,,,,,,,,"","client backend"
2024-02-21 17:27:49.764 CST,"antdb","antdb",18766,"[local]",65d5b944.494e,5,"idle",2024-02-21 16:50:12 CST,,0,LOG,00000,"disconnection: session time: 0:37:37.095 user=antdb database=antdb host=[local]",,,,,,,,,"psql","client backend"
2024-02-21 17:27:53.531 CST,"yewu","dtdb",18921,"[local]",65d5c215.49e9,3,"idle",2024-02-21 17:27:49 CST,,0,LOG,00000,"disconnection: session time: 0:00:03.772 user=yewu database=dtdb host=[local]",,,,,,,,,"psql","client backend"

 我们可以看到后台日志打印的非常详细,会显示用户登录时间、用户名、连接数据库、会话ID、连接地址(local:指从数据库本地登录)、登录是否成功、登出是否成功等

日志记录有两个主要点:

1.我们看到最后一行日志里开始时间记录2024-02-21 17:27:53.531,这个时间是切换数据库或是执行SQL的时间点;而中间也有一段时间记录2024-02-21 17:27:49,这个时间是数据库开启事务时间或是通过客户端连接到数据库时间。这里是我通过psql命令连接到数据库时间为2024-02-21 17:27:49.760,所以在最后一行推出日志中显示的时间2024-02-21 17:27:49;如果想要计算用户登录时长,可以直接使用这两个时间差做结果。

2.如果用户通过\c database username方式进行数据库切换做操作后退出数据库,数据库后台日志会记录切换前后数据库登出日志。

2.单独设置用户日志记录级别:

通过以下方式设置某个用户日志级别
ALTER USER [user] SET log_statement TO [none|ddl|mod|all];情况1:单独记录某个用户DDL和DML操作(适用于单独审计某几个用户)
postgres=#  alter user audit_user set log_statement to mod;
ALTER ROLE
查询结果:
postgres=# select rolname,rolconfig from pg_roles where rolname='audit_user';rolname    |      rolconfig       
------------+----------------------audit_user | {log_statement=mod}
(1 row)情况2:不想让某个用户记录日志(屏蔽某个用户日志)
postgres=#  alter user audit_user set log_statement to none;
ALTER ROLE
查询结果:
postgres=# select rolname,rolconfig from pg_roles where rolname='audit_user';rolname    |      rolconfig       
------------+----------------------audit_user | {log_statement=none}
(1 row)情况3:单独记录某个用户所有操作
postgres=#  alter user audit_user set log_statement to all;
ALTER ROLE
查询结果:
postgres=# select rolname,rolconfig from pg_roles where rolname='audit_user';rolname    |      rolconfig       
------------+----------------------audit_user | {log_statement=all}
(1 row)

取消用户日志级别:

情况1:单独记录某个用户DDL和DML操作(适用于单独审计某几个用户)
postgres=#  alter user audit_user set log_statement to DEFAULT;
ALTER ROLE
查询结果:
postgres=# select rolname,rolconfig from pg_roles where rolname='audit_user';rolname    |      rolconfig       
------------+----------------------audit_user | 
(1 row)

参考国外地址:Per-user log settings - PostgreSQL wiki

http://www.lryc.cn/news/304053.html

相关文章:

  • 阿里云ECS香港服务器性能强大、cn2高速网络租用价格表
  • 实战打靶集锦-025-HackInOS
  • list.stream().forEach()和list.forEach()的区别
  • JS基础之JSON对象
  • 嵌入式学习之Linux入门篇——使用VMware创建Unbuntu虚拟机
  • 大模型中的token是什么?
  • 跳表是一种什么样的数据结构
  • 【刷题记录】最大公因数,最小公倍数(辗转相除法、欧几里得算法)
  • ETL快速拉取物流信息
  • 17.1 SpringMVC框架_SpringMVC入门与数据绑定(❤❤)
  • Leetcode 11.盛水最多的容器
  • 《Go 简易速速上手小册》第7章:包管理与模块(2024 最新版)
  • 【论文精读】IBOT
  • Yolo V5在实时视频流中的建筑物与彩钢房检测:性能评估与改进方法
  • 图——最小生成树实现(Kruskal算法,prime算法)
  • Unity3D xLua开发环境搭建详解
  • Python笔记-super().init(root)的作用
  • 【git 使用】使用 git rebase -i 修改任意的提交信息/合并多个提交
  • 【Vue3】toRefs和toRef在reactive中的一些应用
  • 力扣精选算法100道——Z字形变换(模拟专题)
  • Elastic Stack--01--简介、安装
  • .NET项目web自动化测试实战——Selenium 2.0
  • 【Day53】代码随想录之动态规划_买卖股票ⅠⅡ
  • Swift Combine 使用调试器调试管道 从入门到精通二十六
  • go内置库函数实现client与server数据的发送接收
  • [java基础揉碎]this
  • vulnhub靶场之Deathnote
  • Docker安装Postgresql12
  • 服务器防火墙的应用技术有哪些类型?
  • IP地理位置查询定位:技术原理与实际应用