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

相关推荐
vvvae12344 小时前
分布式数据库
数据库
雪域迷影5 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
bug菌¹5 小时前
滚雪球学Oracle[4.2讲]:PL/SQL基础语法
数据库·oracle
逸巽散人6 小时前
SQL基础教程
数据库·sql·oracle
月空MoonSky6 小时前
Oracle中TRUNC()函数详解
数据库·sql·oracle
momo小菜pa6 小时前
【MySQL 06】表的增删查改
数据库·mysql
向上的车轮7 小时前
Django学习笔记二:数据库操作详解
数据库·django
编程老船长7 小时前
第26章 Java操作Mongodb实现数据持久化
数据库·后端·mongodb
全栈师8 小时前
SQL Server中关于个性化需求批量删除表的做法
数据库·oracle
Data 3178 小时前
Hive数仓操作(十七)
大数据·数据库·数据仓库·hive·hadoop