pgaudit插件-pgslq

news2024/11/16 5:34:34

使用pgaudit插件

一.介绍

postgresql可以通过log_statement=all 提供日志审计,但是无法详细的提供日志信息,使用ogaudit能够提供详细的会话和对象审计日志,是PG的一个扩展插件

注意:pgAudit可能会生成大量日志。请谨慎确定要在您的环境中记录哪些审核内容,以避免过多记录,可以根据需要开启审计,关闭审计设置pgaudit.log=’none’,并重新加载即可。

二.安装pgaudit

1.查看版本记录信息

yum list pgaudit*

image-20240809114944794

注意:版本和数据库的匹配

使用rockylinux源

查看是否添加postgresql源

dnf repolist

添加 PostgreSQL 官方仓库

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装 PostgreSQL 13 及其相关工具

sudo dnf install -y postgresql13 postgresql13-server postgresql13-contrib

查看是否存在

sudo dnf search pgaudit

2.安装对应版本

yum install pgaudit14_12.x86_64

image-20240809132205997

我这里安装pgsql是12,根据你的版本进行安装

使用rockylinux源

用pg-13演示,自行选择版本 查看是否添加postgresql源

dnf repolist

添加 PostgreSQL 官方仓库

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

安装 PostgreSQL 13 及其相关工具

sudo dnf install -y postgresql13 postgresql13-server postgresql13-contrib

查看是否存在

sudo dnf search pgaudit

3.配置postgresql.conf文件

在使用之前我们可以开启数据库链接日志

注:配置文件要修改pg运行的对应文件夹,可以查看服务状态查看

sudo systemctl status postgresql-12

image-20240814110256507

修改配置文件参数

/var/lib/pgsql/12/data/postgresql.conf

修改日志地址和文件名称

log_directory = '/var/log/postgresql'  # 使用绝对路径
log_directory = 'log'  # 使用相对路径
​
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'  # 以日期和时间命名 
log_filename = 'postgresql-%a.log'  # 以星期几命名,如 postgresql-Mon.log
​
log_rotation_age = 1d  # 每天轮转一次日志
log_rotation_age = 1h  # 每小时轮转一次日志
log_rotation_age = 0  # 禁用时间驱动的轮转
​
log_rotation_size = 10MB  # 日志文件达到10MB时轮转
log_rotation_size = 0  # 禁用大小驱动的轮转
​
log_truncate_on_rotation = on  # 截断旧日志文件
log_truncate_on_rotation = off  # 追加到旧日志文件
​
log_file_mode = 0644  # 文件所有者有读写权限,组和其他用户有只读权限

增加日志链接信息

#Log connections and disconnections
​
log_connections = on
log_disconnections = on
​
​
​
#Optional: Adjust logging format and log file parameters
​
log_line_prefix = '%m [%p] user=%u,db=%d,txid=%x,app=%a,client=%h '
​
​
#log_line_prefix 选项允许你自定义 PostgreSQL 日志条目的前#缀格式。你可以使用多种格式符来插入不同的信息。以下是 #log_line_prefix 可用的格式符选项:
​
%a:应用程序名称(application_name)
%u:数据库用户名
%d:数据库名
%r:远程主机名和端口
%h:远程主机名
%p:进程 ID
%t:时间戳(以 YYYY-MM-DD HH:MI:SS 格式显示)
%m:时间戳(以毫秒为单位的精确时间,YYYY-MM-DD HH:MI:SS.MS 格式)
%i:命令标识符(command_tag,如 INSERT、UPDATE)
%e:SQL 错误码
%c:会话 ID(由 PostgreSQL 生成的唯一会话标识符)
%l:日志行号(由日志文件中的行号,计数器)
%s:会话开始时间戳
%v:虚拟事务 ID
%x:事务 ID
%q:无操作(与空字符串相同,可以用来插入常量文本)
%%:字面百分号符号 (%)

这些设置将启用连接和断开的日志记录,并将日志行前缀配置为包含时间戳、进程ID、用户名、数据库名、应用程序名和客户端IP地址等信息。

开启前后差别

开启前:

image-20240809135541619

开启后:

image-20240809135600874

4.创建扩展

查看版本

select * from pg_available_extensions where name like '%audit%';

image-20240809132310680

启用

ALTER SYSTEM SET shared_preload_libraries = 'pgaudit';

查看是否启用

SHOW shared_preload_libraries;

image-20240809133336823

配置生效

select pg_reload_conf();

需要重启postgresql

sudo systemctl restart postgresql-12

再次查看是否启用

SHOW shared_preload_libraries;

image-20240809133009133

创建pgaudit

CREATE EXTENSION pgaudit;

image-20240809133447344

删除 wpgaudit

DROP EXTENSION pgaudit;

三.pguadit配置

简介

使用持续时间分为两种方式,一种的只应用于当前会话,一种是持久化应用到角色上,使用方式又分为会话审计日志记录和对象审核日志两种

区别就是

SET pgaudit.log = 'DDL';  应用于当前会话
​
ALTER ROLE test_super_user1 SET pgaudit.log = 'DDL'; 持久化应用
​
alter system set pgaudit.log = 'READ'; 应用到系统,谨慎操作

你可以随时查看你的设置

相关设置

查看相关设置
select name,setting from pg_settings where name ~ 'pgaudit';
查看role和log
SHOW pgaudit.log;
SHOW pgaudit.role;
查询用户
select * from pg_user;
查询角色
select * from pg_roles;

接下来我们示例用持久化演示,角色提前创建好

参数介绍

参数说明
pgaudit.role该参数用于指定负责进行审计日志记录的角色。没有默认值,需要手动配置。例如配置为创建的审计用户 auditor
pgaudit.log该参数用于指定哪些操作需要被审计记录。默认值为 none。取值包括: none:不记录任何操作。 READ:记录 SELECT 和 COPY 操作。 WRITE:记录 INSERT、UPDATE、DELETE、TRUNCATE 和 COPY 操作。FUNCTION:记录函数调用和 DO 块。 ROLE:记录与角色和权限相关的操作,例如 GRANT、REVOKE、CREATE/ALTER/DROP ROLE。 DDL:记录除 ROLE 类外的所有 DDL 操作。 MISC:记录其它操作,例如 DISCARD、FETCH、CHECKPOINT、VACUUM、SET 等。 MISC_SET:记录其他 SET 操作,例如 SET ROLE。 ALL:记录所有操作。多个取值使用逗号分隔。还可以通过 - 符号排除特定值,例如,pgaudit.log = 'all, -misc' 表示记录除 MISC 外的所有操作。

pgaudit.log_catalog

指定在语句中的所有关系都在pg_catalog中的情况下,应该启用会话日志记录。禁用此设置将减少日志中的噪音,例如psql和PgAdmin等工具,这些工具对目录进行了大量查询。 默认值on 。

pgaudit.log_level

指定用于日志条目的日志级别 (see Message Severity Levels for valid levels) ,但注意ERROR、FATAL和PANIC。此设置用于进行回归测试,也可能对最终用户用于测试或其他目的使用。 默认值为log。

pgaudit.log_parameter

指定审核日志记录应该包含与语句传递的参数。当参数出现时,在语句文本之后,将以CSV格式包含。 缺省值off。

pgaudit.log_relation

指定会话审核日志记录是否应该为SELECT或DML语句中引用的每个关系(表、视图等)创建单独的日志项。这是在不使用对象审核日志记录的情况下进行穷举日志记录的一种有用的捷径。 缺省值已关闭。

pgaudit.logstatementonce

指定日志记录是否包含语句、文本和参数,其中包含statement/substatement组合的第一个日志条目,或与每个条目一起。禁用此设置将导致更少的日志记录,但可能会使确定生成日志项的语句变得更困难,尽管statement/substatement对和进程id应该足以标识使用上一个条目记录的语句文本。 缺省值off。

pgaudit.role

指定要用于对象审核日志记录的主角色。可以通过将多个审计角色授予主角色来定义多个审计角色。这就允许多个组负责审计日志记录的不同方面。 没有默认值。

会话审计日志记录(操作级别)

会话审计日志记录提供了后端用户执行的所有语句的详细日志。

简介

使用pgaudit.log设置启用会话日志记录。 为所有DML和DDL启用会话日志记录,并记录DML语句中的所有关系:

set pgaudit.log = 'write, ddl';set pgaudit.log_relation = on; 为除MISC之外的所有命令启用会话日志记录,并将审核日志信息作为NOTICE提交:

这种方式可以指定用户或者应用到全部,对操作级别的审计

示例

我们登录test_super_user2

create table account
(
    id int,
    name text,
    password text,
    description text
);

创建表

select * from account;

insert into account (id, name, password, description)
             values (7, 'user1', 'HASH1', 'blah, blah');

查看服务器日志

image-20240809140204686

打开查看,此时并没有日志产生,只有刚刚链接的信息和登录信息

image-20240809140134661

分配test_super_user2 read权限,多个用,分割即可

ALTER ROLE test_super_user2 SET pgaudit.log = 'READ'; 

执行完毕需要重启服务器或者重新登录

执行完毕查看

SHOW pgaudit.role;
SHOW pgaudit.log;

image-20240809141027620

image-20240809141035554

执行测试

select * from account ; 
insert into account (id, name, password, description)
             values (5, 'user1', 'HASH1', 'blah, blah');

再次打开日志,出现了我们预料的

image-20240809141128790

多个权限分配

ALTER ROLE test_super_user2 SET pgaudit.log = 'READ,WRITE'; 

重启pg服务或者重新登录

查询用户,也能看到pgaudit.log

 select * from pg_user;

image-20240809141833352

insert into account (id, name, password, description)
             values (22, 'user1', 'HASH1', 'blah, blah');

打开日志出现了刚刚记录

image-20240809141425494

设置不记录日志

ALTER ROLE you_role SET pgaudit.log = 'NONE';

设置为除以下命令以外的所有命令启用会话日志记录

set pgaudit.log = 'all, -misc';

创建库的审计

ALTER DATABASE pgaudit_testdb SET pgaudit.log = 'READ';

关闭库的审计

ALTER DATABASE pgaudit_testdb SET pgaudit.log = 'NONE';

对象审核日志

简介

只有SELECT、INSERT、UPDATE和DELETE命令才会被支持。在对象审核日志记录中不包含TRUNCATE。

pgaudit.log = 'read, write'的一个更细粒度的替换。因此,将它们结合在一起可能是不明智的,但一个可能的场景是使用会话日志记录每个语句,然后用对象日志来补充有关特定关系的更多细节。

对象级别的审计日志记录是通过角色系统实现的。pgaudit.role设置定义了用于审核日志记录的角色。当审计角色具有执行命令的权限或继承来自另一个角色的权限时,将对关系(表、视图等)进行审核。这使您能够有效地拥有多个审计角色,尽管在任何上下文中都有一个主角色。

将pgaudit.role设置为auditor,并grant在ACCOUNT表中的SELECT和DELETE权限。现在将记录帐户表中的任何SELECT或DELETE语句:

这种方式的概念就是设置角色用另一个角色的权限进行进行审计记录日志,这种提供了更为细致的记录,对表级别的审计

查看对应用户表权限

SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='account' AND table_schema='public' AND grantee='user2';

清除权限

REVOKE SELECT,Update ON public.account FROM user2;  

查询用户 查看配置

select * from pg_user

示例

用户user1是一个普通用户,记得每次更新完role,重启服务或者重新登录

查看user1用户权限

SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='account' AND table_schema='public' AND grantee='user1';

清除权限

REVOKE SELECT ON public.account FROM user1; 

查询用户 查看配置

 select * from pg_user

清除配置

ALTER ROLE super_user2 RESET pgaudit.role;

重启pgsql-12服务或者重新登录

执行测试

select * from account

此时日志并没有super_user2的日志

image-20240809150249476

设置super_user2按照user2的规则进行审计

ALTER ROLE super_user2 set pgaudit.role = 'user1';  

重启pgsql-12服务或者重新登录

执行sql

select * from account

此时日志也不存在记录

image-20240809150401381

分配对应权限

grant select 
   on public.account
   to user1;

执行sql

select * from account

打开出现日志信息

image-20240809150858538

执行sql

 清除权限
REVOKE select,DELETE ON public.account FROM user1; 

多权限分配

 grant UPDATE,delete
   on public.account
   to user1;

查看

SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='account' AND table_schema='public' AND grantee='user1';

sql

select * from account ;
update account set name = 'qwe' where id = 22;

结果查看

image-20240809152113621

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241287.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签: 6 年多头部大厂软件开发经验;1 年多 AI 业务应用经验,拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI,已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件

Vue 项目打包后环境变量丢失问题(清除缓存),区分.env和.env.*文件 问题背景 今天在导报项目的时候遇到一个问题问题:在开发环境中一切正常,但在打包后的生产环境中,某些环境变量(如 VUE_APP_B…

群控系统服务端开发模式-应用开发-前端菜单功能开发

今天优先开发菜单及角色,明天将开发岗位配置、级别配置等功能。具体看下图 而前端的路由不需要手动添加,是依据数据库里面存储的路径。 一、添加视图 在根目录下src文件夹下views文件夹下permission文件夹下menu文件夹下,新建index.vue&…

数据结构Python版

2.3.3 双链表 双链表和链表一样,只不过每个节点有两个链接——一个指向后一个节点,一个指向前一个节点。此外,除了第一个节点,双链表还需要记录最后一个节点。 每个结点为DLinkNode类对象,包括存储元素的列表data、…

【HarmonyOS学习日志(8)】UIAbility,HAP,AbilityStage组件及其生命周期

基本概念 UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。 在项目创建时,系统默认生成的EntryAbility类继承了UIAbility类。 ExtensionAbility组件:是基于特定场景(例如服务卡片、输入法等)提供的应用组件…

【Linux】多线程(中)

目录 一、线程互斥 1.1 互斥概念 1.2 互斥量mutex 1.3 互斥量相关API (1)初始化互斥量 (2)销毁互斥量 (3)互斥量加锁和解锁 1.4 互斥量原理 1.5 重入和线程安全 二、死锁 2.1 概念 2.2 造成死锁…

【数字图像处理+MATLAB】基于 Sobel 算子计算图像梯度并进行边缘增强:使用 imgradientxy 函数

引言 在图像处理中,边缘通常是图像中像素强度变化最大的地方,这种变化可以通过计算图像的梯度来量化。梯度是一个向量,它的方向指向像素强度增加最快的方向,它的大小(或者说幅度)表示像素强度增加的速度。…

Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解

title: Nuxt.js 应用中的 schema:beforeWrite 事件钩子详解 date: 2024/11/14 updated: 2024/11/14 author: cmdragon excerpt: schema:beforeWrite 钩子是 Vite 提供的一个功能强大的生命周期钩子,允许开发者在 JSON Schema 被写入之前执行自定义操作。利用这个钩子,您可以…

k8s服务内容滚动升级以及常用命令介绍

查看K8S集群所有的节点信息 kubectl get nodes 删除K8S集群中某个特定节点 kubectl delete nodes/10.0.0.123 获取K8S集群命名空间 kubectl get namespace 获取K8S所有命名空间的那些部署 kubectl get deployment --all-namespaces 创建命名空间 web界面上看到的效果,但是…

MinIo在Ubantu和Java中的整合

1.MinIo在Ubantu中的部署 首先准备好一台已经安装好Ubantu系统的服务器 MinIO是一个开源的对象存储服务器,兼容Amazon S3,性能卓越,适合存储非结构化数据,例如照片、视频、日志文件、备份和容器镜像等。 1:更新系统…

设计模式-参考的雷丰阳老师直播课

一般开发中使用的模式为模版模式策略模式组合,模版用来定义骨架,策略用来实现细节。 模版模式 策略模式 与模版模式特别像,模版模式会定义好步骤定义好框架,策略模式定义小细节 入口类 使用模版模式策略模式开发支付 以上使用…

【LeetCode】【算法】53. 最大子数组和

LeetCode 53. 最大子数组和 题目描述 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。 思路 思路:动态规划秒了 具体递推式如…

供应SW6301V单C口多协议升降压移动电源IC

1. 概述 SW6301V 是一款高集成度的单 C 口多协议升降压移动电源 SOC。集成双向升降压控制器,支持 2~6 节 电池串联,提供 100W 功 率 输 入 输 出 ; 支 持 C 口 快 充 输入输出 ; 支 持UFCS/PPS/PD/SVOOC/VOOC/SCP/FCP/QC/AFC/BC…

C++常用的新特性-->day06

时间间隔duration duration表示一段时间间隔&#xff0c;用来记录时间长度&#xff0c;可以表示几秒、几分钟、几个小时的时间间隔。duration的原型如下 // 定义于头文件 <chrono> template<class Rep,class Period std::ratio<1> > class duration;Rep&…

Cyberchef配合Wireshark提取并解析TCP/FTP流量数据包中的文件

前一篇文章中讲述了如何使用cyberchef提取HTTP/TLS数据包中的文件,详见《Cyberchef配合Wireshark提取并解析HTTP/TLS流量数据包中的文件》,链接这里,本文讲述下如何使用cyberchef提取FTP/TCP数据包中的文件。 FTP 是最为常见的文件传输协议,和HTTP协议不同的是FTP协议传输…

性能面向下一代PCIe Gen 5,G991B322HR、G99L12312HR 安费诺ExtremePort™ Swift连接器支持内部I/O应用

前言 为了在网络设备和服务器上提供更高速度和更小尺寸的解决方案&#xff0c;Amphenol开发了ExtremePort™ Swift连接器&#xff0c;适用于PCIe Gen5 NRZ 32GT/s、UPI 2.0 24GT/s、24Gb/s SAS信号。 G991B322HR G9912312HR G9912322HR G9914312HR G991B312HR G991C312HR G99…

IDEA调整警告级别【IntelliJ IDEA 2024.2.0.1】

文章目录 目前现状鼠标悬停&#xff0c;选择配置筛选 > 取消选择OK效果 目前现状 需要把提示改成只要显示error的5个 鼠标悬停&#xff0c;选择配置 筛选 > 取消选择 OK 效果

【二叉搜素树】——LeetCode二叉树问题集锦:6个实用题目和解题思路

文章目录 计算布尔二叉树的值求根节点到叶节点的数字之和二叉树剪枝验证二叉搜索树二叉搜索树中第K小的元素二叉树的所有路径 计算布尔二叉树的值 解题思路&#xff1a; 这是一个二叉树的布尔评估问题。树的每个节点包含一个值&#xff0c;其中叶子节点值为 0 或 1&#xff0…

windows下QT5.12.11使用MSVC编译器编译mysql驱动并使用详解

1、下载mysql开发库,后面驱动编译的时候需要引用到,下载地址:mysql开发库下载 2、使用everything搜索:msvc-version.conf,用记事本打开,添加:QMAKE_MSC_VER=1909。不然msvc下的mysql源码加载不上。

Isaac Sim+SKRL机器人并行强化学习

目录 Isaac Sim介绍 OmniIssacGymEnvs安装 SKRL安装与测试 基于UR5的机械臂Reach强化学习测评 机器人控制 OMNI GYM环境编写 SKRL运行文件 训练结果与速度对比 结果分析 运行体验与建议 Isaac Sim介绍 Isaac Sim是英伟达出的一款机器人仿真平台&#xff0c;适用于做机…