相关文章推荐
含蓄的薯片  ·  冰河时期_百度百科·  1 年前    · 
坐怀不乱的罐头  ·  魔音糯米- 知乎·  1 年前    · 
温柔的打火机  ·  从GRF到DRX:为什么天才中单Chovy愿 ...·  1 年前    · 
侠义非凡的红金鱼  ·  一表看懂:“双一流”大学与“985、211” ...·  1 年前    · 
面冷心慈的茶叶  ·  花小猪对比滴滴快车,哪个坑? - 知乎·  1 年前    · 
小百科  ›  PostgreSQL审计署插件非为pgAudit - 墨天轮
table select postgresql db2
另类的麦片
1 年前
  • 学习
    • 课程中心
      推荐优质内容、热门课程
    • 学习路径
      预设学习计划、达成学习目标
    • 知识图谱
      综合了解技术体系知识点
    • 课程库
      快速筛选、搜索相关课程
    • 视频学习
      专业视频分享技术知识
    • 电子文档
      快速搜索阅览技术文档
  • 文档
  • 工具
    • SQLRUN
      在线数据库即时SQL运行平台
    • 数据库在线实训平台
      实操环境、开箱即用、一键连接
    • Oracle巡检
      简单两步,查看报告分析
    • AWR分析
      上传AWR报告,查看分析结果
    • SQL格式化
      快速格式化绝大多数SQL语句
    • SQL审核
      审核编写规范,提升执行效率
    • PLSQL解密
      解密超4000字符的PL/SQL语句
    • OraC函数
      查询Oracle C 函数的详细描述
    • Bethune X
      数据库智能监控巡检平台,90天试用
  • 暂无图片
    • 数据库
    • 云计算
    • 数据产品
    • 中间件
    • 操作系统
    • 芯片
  • 我的订单
  • 登录后可立即获得以下权益
    免费培训课程
    收藏优质文章
    疑难问题解答
    下载专业文档
    签到免费抽奖
    提升成长等级
    立即登录
    登录 注册
      • 登录 注册
    • 首页
    • 资讯
    • 数说
    • 活动
    • 大会
    • 课程
    • 文档
    • 排行
    • 问答
    • 云市场
    • 我的订单
    暂无图片
    2
    觉得内容不错?
    一键收藏 方便随时查看
    暂无图片
    暂无图片
    微信扫码
    复制链接
    新浪微博
    分享数说
    暂无图片
    采集到收藏夹
    分享到数说
    首页 / PostgreSQL审计插件之pgAudit

    PostgreSQL审计插件之pgAudit

    tracy 云和恩墨交付战队 2022-05-10
    2243

    pgAudit插件地址

    pgAudit 的目标是为 PostgreSQL 用户提供生成审计日志的能力。

    pgAudit通过标准 PostgreSQL 日志记录工具提供详细的会话和对象审计日志。

    审计结果展示

    原始SQL:

    DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;

    标准日志记录:

    LOG: statement: DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;

    pgaudit日志记录:

    在动态创建表的情况下,查找感兴趣的表可能需要一些代码知识。这并不理想,因为最好只搜索表名。这就是 pgAudit 的用武之地。对于相同的输入,它将在日志中产生以下输出。

    AUDIT: SESSION,33,1,FUNCTION,DO,,,"DO $$ BEGIN EXECUTE 'CREATE TABLE import' || 'ant_table (id INT)'; END $$;" AUDIT: SESSION,33,2,DDL,CREATE TABLE,TABLE,public.important_table,CREATE TABLE important_table (id INT)

    不仅记录了DO块,而且子语句 2 包含CREATE TABLE带有语句类型、对象类型、完整的对象名和完整SQL语句,以便于搜索。

    在记录SELECT和DML语句时,可以将 pgAudit 配置为为语句中引用的每个关系记录一个单独的条目。无需解析即可找到涉及特定表的所有语句。

    db2=# set pgaudit.log_relation='on'; db2=# select 1 from t1,ttt; INFO: AUDIT: SESSION,7,1,READ,SELECT,TABLE,public.t1,"select 1 from t1,ttt;",<not logged> INFO: AUDIT: SESSION,7,1,READ,SELECT,TABLE,public.ttt,"select 1 from t1,ttt;",<not logged> ?column? ---------- (0 rows)

    安装pgaudit插件

    以PostgreSQL 13安装pgaudit 1.5.0为例
    下载并编译插件

    wget https://github.com/pgaudit/pgaudit/archive/1.5.0.tar.gz tar -zxf 1.5.0.tar.gz cd pgaudit-1.5.0 make install USE_PGXS=1 pg_config=/opt/pgsql/bin/pg_config

    添加动态库

    postgresql.conf中修改shared_preload_libraries参数,启动时加载pgaudit库 shared_preload_libraries='pgaudit'

    重启数据库后,创建pgaudit扩展

    $ psql psql (13.6) Type "help" for help. postgres=# create extension pgaudit;

    开启会话审计功能

    例:开启test1用户的审计模式记录所有该用户的DML和DDL操作,同时都记录DML中引用的对象以及SQL语句中的参数值。

    postgres=# alter role test1 set pgaudit.log='read,ddl'; ALTER ROLE postgres=# alter role test1 set pgaudit.log_parameter='on'; ALTER ROLE postgres=# \c - test1 You are now connected to database "postgres" as user "test1". postgres=>DO $$ declare a varchar(10) :='aaa'; b int :=1; BEGIN EXECUTE 'CREATE TABLE import' ||a|| 'ant_table (id INT)'; select name into a from t1 where id= b; END $$; postgres=> [postgres@mogdb1 log]$ tail -f postgresql-Thu.csv 2021-09-16 21:50:38.196 CST,,,17714,"[local]",61434bae.4532,1,"",2021-09-16 21:50:38 CST,,0,LOG,00000,"connection received: host=[local]",,,,,,,,,"","not initialized" 2021-09-16 21:50:38.197 CST,"test1","postgres",17714,"[local]",61434bae.4532,2,"authentication",2021-09-16 21:50:38 CST,4/699,0,LOG,00000,"connection authorized: user=test1 database=postgres application_name=psql",,,,,,,,,"","client backend" 2021-09-16 21:50:41.406 CST,"test1","postgres",17714,"[local]",61434bae.4532,3,"idle",2021-09-16 21:50:38 CST,4/700,0,LOG,00000,"statement: DO $$ declare a varchar(10) :='aaa'; b int :=1; BEGIN EXECUTE 'CREATE TABLE import' ||a|| 'ant_table (id INT)'; select name into a from t1 where id= b; END $$;",,,,,,,,,"psql","client backend" 2021-09-16 21:50:41.410 CST,"test1","postgres",17714,"[local]",61434bae.4532,4,"DO",2021-09-16 21:50:38 CST,4/700,1165,LOG,00000,"AUDIT: SESSION,1,1,DDL,CREATE TABLE,TABLE,test1.importaaaant_table,CREATE TABLE importaaaant_table (id INT),<none>",,,,,,,,,"psql","client backend" 2021-09-16 21:50:41.410 CST,"test1","postgres",17714,"[local]",61434bae.4532,5,"DO",2021-09-16 21:50:38 CST,4/700,1165,LOG,00000,"AUDIT: SESSION,1,2,READ,SELECT,,,select name from t1 where id= b,"",,1,""",,,,,,,,,"psql","client backend"

    开启对象审计功能

    对象审计模式只支持增删改查的审计。
    对象审计模式是基于角色实现的,通过pgaudit.role参数来定义用于对象审计的角色。当审计角色具有执行命令的权限或有成员角色继承权限时,将审计访问的对象。

    db2=> \c db2 postgres You are now connected to database "db2" as user "postgres". db2=# alter database db2 set pgaudit.role='user3'; ALTER DATABASE db2=# set pgaudit.log_client=on; db2=# set pgaudit.log_level=info; db2=# create table public.t1 (id int,name varchar(10),comment varchar(100)); CREATE TABLE db2=# select *from public.t1; id | name | comment ----+------+--------- (0 rows) db2=# grant all on table public.t1 to user3; GRANT db2=# insert into public.t1 values (1,'postgres','postgres'); INFO: AUDIT: OBJECT,1,1,WRITE,INSERT,TABLE,public.t1,"insert into public.t1 values (1,'postgres','postgres');",<not logged>
     
    推荐文章
    含蓄的薯片  ·  冰河时期_百度百科
    1 年前
    坐怀不乱的罐头  ·  魔音糯米- 知乎
    1 年前
    温柔的打火机  ·  从GRF到DRX:为什么天才中单Chovy愿意自降身价追随cvMax? - 知乎
    1 年前
    侠义非凡的红金鱼  ·  一表看懂:“双一流”大学与“985、211”大学关系!
    1 年前
    面冷心慈的茶叶  ·  花小猪对比滴滴快车,哪个坑? - 知乎
    1 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    小百科 - 百科知识指南
    © 2024 ~ 沪ICP备11025650号