我把PostgreSQL最核心的插件撸干净了!!!

2024-05-24 23:04

本文主要是介绍我把PostgreSQL最核心的插件撸干净了!!!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:IT邦德
中国DBA联盟(ACDU)成员,10余年DBA工作经验,
Oracle、PostgreSQL ACE
CSDN博客专家及B站知名UP主,全网粉丝10万+
擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,
安装迁移,性能优化、故障应急处理
微信:jem_db
QQ交流群:587159446
公众号:IT邦德

文章目录

  • 前言
    • 📣 1.DBA那些辛酸的过往
    • 📣 2.安全加固插件
      • ✨ passwordcheck插件
      • ✨ 2.1 修改规则
      • ✨ 2.2 编译passwordcheck
      • ✨ 2.3 测试检查
    • 📣 3.审计插件
      • ✨ pgaudit插件
      • ✨ 3.1 pgaudit安装
      • ✨ 3.2 开启审计
    • 📣 4.远程访问插件
      • ✨ postgres_fdw插件
      • ✨ 4.1 创建安装插件
      • ✨ 4.2 权限配置
      • ✨ 4.3 创建外部服务
      • ✨ 4.4 创建映射用户
      • ✨ 4.5 创建外部表
    • 📣 5.推荐插件
    • 📣 6.总结

前言

PostgreSQL运维的使用总结,只谈使用经验,不聊原理

📣 1.DBA那些辛酸的过往

数据库问题排查一天,被 Diss 排查问题慢…
核心表误删除数据,手足无措,看是哪个家伙写的,竟然是…
客户线上部署PG,应该如何完善体系化,让客户dis吗?
故障排查,问题还没有找到,头顶的灯却早已照亮了整层楼…
PostgreSQL运维,一些必要的插件安装是非常重要的

📣 2.安全加固插件

✨ passwordcheck插件

PostgreSQL数据库密码复杂度设置可以通过安装passwordcheck扩展插件来实现,该插件默认的密码复杂度规则是密码长度必须大于等于8、必须包含字母和非字母、密码不能包含用户名。如果这些规则仍然不能满足你的密码强度要求,那么还可以安装cracklib以及字典来提高密码强度。

✨ 2.1 修改规则

默认密码复杂度规则:
1.密码长度必须大于等于8
2.必须包含字母和非字母
3.密码不能包含用户名

可根据实际需要更改最小密码长度,默认值为8,
建议更改为10或更大。
注意:此处的#号并非注释,不要去掉。

cd /pgccc/soft/postgresql-15.6/contrib/
cd passwordcheck
编辑修改passwordcheck.c文件中的MIN_PWD_LENGTH

/* passwords shorter than this
will be rejected */
#define MIN_PWD_LENGTH 10

✨ 2.2 编译passwordcheck

–使用make命令编译安装插件。
cd /pgccc/soft/postgresql-15.6/contrib/passwordcheck
make && make install

✨ 2.3 测试检查

–修改参数
alter system set shared_preload_libraries=‘passwordcheck’;
–重启PG
pg_ctl restart
–密码校验
postgres=# ALTER USER postgres WITH PASSWORD ‘postgres’;
ERROR: password is too short
postgres=# create user pgtest password ‘pgtest1234’;
ERROR: password must not contain user name
postgres=# create user pgtest password ‘pg12345678’;
CREATE ROLE

📣 3.审计插件

✨ pgaudit插件

能够提供详细的会话和对象审计日志,是PG的一个扩展插件。pgAudit通过标准PostgreSQL日志记录工具提供详细的会话和/或对象审核日志记录。

✨ 3.1 pgaudit安装

官网:
https://www.pgaudit.org/下载安装包一定要注意pgaudit与PG版本的对应
wget https://codeload.github.com/pgaudit/pgaudit/tar.gz/refs/tags/1.6.2 -O pgaudit-1.6.2.tar.gztar -xzvf 1.6.2.tar.gz
cd pgaudit-1.6.2/
make install USE_PGXS=1安装插件
alter system set shared_preload_libraries='pgaudit';
pg_ctl restart
create extension pgaudit;
\dx
select name,setting from pg_settings where name like 'pgaudit%';
select * from pg_available_extensions where name like '%audit%';
show shared_preload_libraries;

✨ 3.2 开启审计

1.会话审计日志记录
会话审计日志提供用户在后端执行的所有语句的详细日志。
使用pgaudit.log设置启用会话日志记录。set pgaudit.log = 'write, ddl';
set pgaudit.log_relation = on;
set pgaudit.log_client=on;
SELECT pg_reload_conf();
select name,setting,source from pg_settings where name like 'pgaudit%';postgres=> create table t_jeames(id int);
postgres=> insert into t_jeames select generate_series(1,10000);
postgres=> delete  from t_jeames;
postgres=# drop table t_jeames;

2.对象审计日志记录
通过创建role 来实现, 
原理就是把想要审计的对象的具体操作赋权给一个 role, 
然后在设置 pgaudit.role 。目前只能支持, SELECT, INSERT, UPDATE and DELETE 这4中类型,
相对于 read, write 来说更细粒度了--创建角色: audit_account
create role audit_account password 'audit_account';
设置对象 t_jeames 的insert, update, delete.select 为审计行为postgres=# alter system set pgaudit.role = 'audit_account';
postgres=# grant select,insert,update,delete on t_jeames to audit_account;
postgres=# select pg_reload_conf();--修改数据
postgres=# delete from t_jeames where id < 5000;
postgres=# update t_jeames set id = 1000+ id ;
postgres=# select * from t_jeames limit 2;

📣 4.远程访问插件

✨ postgres_fdw插件

通过 postgres_fdw访问远程PostgreSQL数据库表。
步骤如下:
1.在源端(本地库)创建 postgres_fdw 插件
2.创建 foreign server 外部服务(即:指连接外部数据源的连接信息)
3.创建映射用户(映射用户指定了访问外部表的本地用户和远程用户信息)
4.创建外部表(外部表的表定义建议和远端表结构一致)

✨ 4.1 创建安装插件

本地库做如下的操作:
–编译安装
[postgres@centos79 ~]$ cd /pgccc/soft/postgresql-15.6/contrib
[postgres@centos79 contrib]$ cd postgres_fdw
[postgres@centos79 postgres_fdw]$ make install
–再次确认插件
[root@centos79 ~]# cd /pgccc/pgsql-15/share/extension

–postgres 超级用户登录 PostgreSQL
[postgres@centos79 ~]$ psql
postgres=# CREATE EXTENSION postgres_fdw;
postgres=# \dx

✨ 4.2 权限配置

本地库做如下的操作:
若使用超级用户使用postgres_fdw可以跳过
普通用户使用postgres_fdw需要单独授权
GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO pgtest;

✨ 4.3 创建外部服务

本地库做如下的操作:
外部服务定义了远端PostgreSQL数据库的IP、端口、数据库连接信息
CREATE SERVER fdwpg2 FOREIGN DATA WRAPPER
postgres_fdw OPTIONS (host ‘pg2host’, port ‘5432’, dbname ‘devdb’);

✨ 4.4 创建映射用户

本地库做如下的操作:
映射用户指定了连接源端 PostgreSQL 数据库的用户名和密码信息
CREATE USER MAPPING FOR pgtest
SERVER fdwpg2 OPTIONS (user 'pg2user', password 'pg2user');FOR:配置的用户为本地的数据库用户
OPTIONS :配置的是远端PostgreSQL数据库的用户和密码

✨ 4.5 创建外部表

–远端数据库创建测试表
CREATE TABLE pg2_fdw (id int4 ,info text) ;
INSERT INTO pg2_fdw (id , info ) VALUES (1, ‘a’),(2, ‘b’);

—创建外部表(本地库)
CREATE FOREIGN TABLE ft_fdw (
id int4,
info text
) SERVER fdwpg2 OPTIONS (schema_name ‘pg2user’, table_name ‘pg2_fdw’);

通过外部表访问远端数据表
注意:远端数据库pg_hba.conf文件需要允许本地库访问策略
select * from pg2_fdw;

📣 5.推荐插件

📣 6.总结

PostgreSQL 提供使用 extension 的方式来扩展数据库的功能,您可以发现,PostgreSQL的许多功能也都通过插件的形式完成,也正是由于使用的插件的形式,使得这些插件功能基本不受PostgreSQL核心升级的影响,这也是PostgreSQL数据库能够持续发展的一个重要的原因

这篇关于我把PostgreSQL最核心的插件撸干净了!!!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/999783

相关文章

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品