我把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数据库能够持续发展的一个重要的原因

相关推荐
小云数据库服务专线16 分钟前
GaussDB数据库架构师修炼(十六) 如何选择磁盘
数据库·数据库架构·gaussdb
码出财富1 小时前
SQL语法大全指南
数据库·mysql·oracle
异世界贤狼转生码农3 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong3 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪3 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
时序数据说9 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.12 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)12 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺12 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql
HMBBLOVEPDX13 小时前
MySQL的事务日志:
数据库·mysql