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

作者:IT邦德

中国DBA联盟(ACDU)成员,10余年DBA工作经验,

Oracle、PostgreSQL ACE

CSDN博客专家及B站知名UP主,全网粉丝10万+

擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,

安装迁移,性能优化、故障应急处理

微信:jem_db

QQ交流群:587159446

公众号:IT邦德

文章目录

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

bash 复制代码
官网:
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.gz

tar -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 开启审计

bash 复制代码
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;
bash 复制代码
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数据库能够持续发展的一个重要的原因

相关推荐
小汤猿人类9 分钟前
open Feign 连接池(性能提升)
数据库
阳冬园30 分钟前
mysql数据库 主从同步
数据库·主从同步
Amd7941 小时前
PostgreSQL 的特点
postgresql·数据类型·并发控制·关系型数据库·安全性·可扩展性·数据库特性
Mr.132 小时前
数据库的三范式是什么?
数据库
Cachel wood2 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
Python之栈2 小时前
【无标题】
数据库·python·mysql
风_流沙2 小时前
java 对ElasticSearch数据库操作封装工具类(对你是否适用嘞)
java·数据库·elasticsearch
亽仒凣凣2 小时前
Windows安装Redis图文教程
数据库·windows·redis
亦世凡华、2 小时前
MySQL--》如何在MySQL中打造高效优化索引
数据库·经验分享·mysql·索引·性能分析
YashanDB2 小时前
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
数据库·yashandb·崖山数据库