PostgreSQL 的审计日志

news/2024/7/9 20:56:18 标签: postgresql, 数据库, 服务器

开启审计日志功能
要开启审计日志功能,可以在 postgresql.conf 文件中添加或修改以下配置:

logging_collector = on

这将启用日志收集器,使 PostgreSQL 开始记录审计日志。同时,您也需要指定日志文件的路径:

log_directory = 'pg_log'

这将指定日志文件存放在 pg_log 目录下。您还可以指定日志文件的名称:

log_filename = 'postgresql-%Y-%m-%d.log'

这将将日志文件命名为 postgresql-年-月-日.log,例如 postgresql-2023-04-13.log。
配置日志格式
在 PostgreSQL 中,有多种日志格式可供选择。以下是 csvlog 格式的示例:

log_destination = 'csvlog'
log_line_prefix = '%t,%u,%d,%p,'

这将使用 CSV 格式记录审计日志,并在每行日志信息前添加时间戳、用户 ID、数据库名称和进程 ID。例如,以下是一个示例日志行:
2023-04-13 10:42:34.821172,postgres,demo,5768,localhost,4562,1,LOG,00000,“statement: SELECT * FROM users;”
其中,逗号分隔的字段依次为时间戳、用户名、数据库名、进程 ID、主机名、会话 ID、命令标识符、日志级别和日志消息。
配置日志级别
在 PostgreSQL 中,有多个日志级别可供选择。以下是一个示例:

log_min_messages = 'INFO'

这将记录所有 INFO 级别及以上的信息。如果您希望记录所有信息,可以将日志级别设置为 DEBUG5:

log_min_messages = 'DEBUG5'

这将记录所有调试信息。
DEBUG5:最详细的日志级别,记录所有调试信息。
DEBUG4:记录详细的调试信息。
DEBUG3:记录更加详细的调试信息。
DEBUG2:记录非常详细的调试信息。
DEBUG1:记录较为详细的调试信息。
INFO:记录普通信息。
NOTICE:记录警告信息。
WARNING:记录警告信息。
ERROR:记录错误信息。
LOG:记录所有日志信息。
配置审计日志选项
在 PostgreSQL 中,还有许多其他的选项可供配置,以记录更详细的审计日志信息。以下是一些示例:

log_connections = on

这将记录每个连接到数据库的客户端的信息,例如:
2023-04-13 10:42:34.821172,postgres,demo,5768,localhost,4562,1,LOG,00000,“connection received: host=localhost port=5432”

log_statement = 'all'

这将记录每个执行的 SQL 语句,例如:
2023-04-13 10:42:34.821172,postgres,demo,5768,localhost,4562,1,LOG,00000,“statement: SELECT * FROM users;”

log_duration = on

这将记录每个 SQL 语句的执行时间,例如:
2023-04-13 10:42:34.821172,postgres,demo,5768,localhost,4562,1,LOG,00000,"duration: 0.005 ms statement: SELECT * FROM

其他配置:

log_connections:记录每个连接到数据库的客户端信息。
log_disconnections:记录每个断开与数据库的客户端的信息。 log_duration:记录每个 SQL 语句的执行时间。
log_error_verbosity:设置错误信息的详细程度。 log_hostname:记录每个连接到数据库的客户端的主机名。
log_line_prefix:设置每行日志信息的前缀,可以包括时间戳、用户名、数据库名等信息。
log_lock_waits:记录等待锁的信息。 log_statement:记录每个执行的 SQL 语句,包括
SELECT、INSERT、UPDATE 和 DELETE 等操作。 log_temp_files:记录使用临时文件的信息。
log_timezone:设置日志记录时

创建日志表

CREATE TABLE pg_audit_log (
    event_time TIMESTAMP WITH TIME ZONE,
    user_name TEXT,
    database_name TEXT,
    process_id INTEGER,
    remote_host TEXT,
    remote_port TEXT,
    session_id INTEGER,
    command_tag TEXT,
    session_start_time TIMESTAMP WITH TIME ZONE,
    virtual_transaction_id TEXT,
    transaction_id BIGINT,
    error_severity TEXT,
    sql_state_code TEXT,
    message TEXT,
    detail TEXT,
    hint TEXT,
    internal_query TEXT,
    internal_query_pos INTEGER,
    context TEXT,
    query TEXT,
    query_pos INTEGER,
    location TEXT,
    application_name TEXT,
    client_hostname TEXT,
    client_port_num INTEGER,
    client_username TEXT
);

COPY pg_audit_log FROM '/var/log/postgresql/audit-2023-04-08_110622.csv' DELIMITER ',' CSV HEADER;

log_line_prefix 可以用来配置所有的日志信息,你可以根据需要在 log_line_prefix 中包含所有你需要的列和标记。

以下是一个示例 log_line_prefix 配置,它包含了 PostgreSQL 日志中的所有列和标记:

log_line_prefix = '%m [%p] %c %l %x %a %u %d %s:%i %t %r %e %q '

解释一下这个配置:

%m: 时间戳(格式为YYYY-MM-DD HH24:MI:SS)
[%p]: 进程 ID
%c: 数据库名称
%l: 日志级别(DEBUG1, DEBUG2, DEBUG3, LOG, INFO, NOTICE, WARNING, ERROR, FATAL, or PANIC)
%x: 事务 ID(如果日志消息是事务的一部分)
%a: 客户端 IP 地址
%u: 用户名
%d: 连接的数据库名称
%s:%i: 客户端的套接字地址和端口号
%t: 日志消息的文本
%r: 关联的相关信息(例如,错误信息、SQL 语句等)
%e: SQLSTATE 错误码
%q: 查询开始时的毫秒数


http://www.niftyadmin.cn/n/216647.html

相关文章

gcc编译选项说明(2)

事情是这样的: 老哥无聊的又给翻译了一下针对c的options,果然有mmt风格,哈哈,还挺详细,重点和常用的也都加粗了。 【C Language Options】 See Options Controlling C Dialect. -fabi-versionn :指定在代…

C/C++每日一练(20230413)

目录 1. 与浮点数A最接近的分数B/C 🌟 2. 比较版本号 🌟🌟 3. 无重复字符的最长子串 🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每…

item_history_price-获取商品历史价格信息 API接入参数及说明

aobao.item_history_price 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cacheStri…

DAMA数据治理认证,一定要先考CDGA才能考CDGP吗?

DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业…

433接收天线研习

一、前言 二、433射频天线 2.1、概念 433mhz技术使用433mhz无线频段是无线电专用频率。433mhz是我们国家的免申请段发射接收频率,可直接使用无需管理。 2.2、特性 优势1:433mhz无线信号的穿透性强、只要发射功率足够大,可长距离传输。优势…

谈一谈Java的ThreadLocal

目录 先说原理: 再上代码: 运行结果: 先说原理: ThreadLocal 是一个本地线程副本变量工具类,它可以在每个线程中创建一个副本变量,每个线程可以独立地修改自己的副本变量,而不会影响其他线程…

推荐NLP基础 RNN循环神经网络

NLP概述 Natural Language Processing(NLP, 自然语言处理) 目的:让计算机处理或“理解”自然语言,以执行语言翻译和问题回答等任务;最终 来讲就是构建机器语言和人类语言之间的沟通桥梁,实现人机交流为最终目的。 常见应用&…

(十七)排序算法-基数排序

1 基本介绍 1.1 概述 (1)基数排序(radix sort)属于“分配式排序”,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用。 (2&#x…