PostgreSQL备份加密方法

Stella981
• 阅读 502

本文加密方式是在利用pg_dump备份出文件后直接利用openssl进行文件加密。

1、生产密钥:
     利用各种参数进行建立公私密钥,这里利用输入参数作为密钥生成的一部分,其他的可以手动添加,脚本如下:

[sure@localhost bin]$ cat createpem.sh
#!/bin/bash

data="$1"

openssl req -x509 -nodes -days 1000000 -newkey rsa:4096 -keyout backup_key.pem \
 -subj "/C=US/ST=Illinois/L=Chicago/O=IT/CN="${data} -out backup_key.pem.pub

这里的backup_key.pem和 backup_key.pem.pub就是公司密钥,名字可以修改。

2、加密脚本:
     将参数直接传递给pg_dump,然后进行加密,当第一个参数为"encrypt"时,则进行加密,否则按照pg_dump本身的参数进行执行,脚本如下:

[sure@localhost bin]$ cat pg_dump.sh
#!/bin/bash

isencrypt=$1
database=$2
output=$3
pubpath=$4

basepath=$(cd `dirname $0`; pwd)

if [ ! ${pubpath} ]
    then
        pubpath="${basepath}/backup_key.pem.pub"
fi

if [ ${isencrypt} == "encrypt" ]
    then
    ${basepath}/pg_dump ${database} | openssl smime -encrypt -aes256 -binary -outform DEM -out ${output} ${pubpath}
else
    ${basepath}/pg_dump $@
fi

这里是利用公钥进行加密的,第一个参数为"encyrpt",作为是否加密的标志;
第二个参数为pg_dump原本的选项,不过要注意的是,如果是多个参数的话,需要用“”引起来;
                                     第三个参数为输出文件名;
                                     第四个参数为公钥,这里可以允许用户指定公钥进行加密,不输入,则默认为当前目录下的公钥。
不加密,则和原来一致。

3、解密脚本:
    首先对加密文件进行解密,才可以还原。脚本如下:

[sure@localhost bin]$ cat dencrypt_backup
#!/bin/bash

input=$1
output=$2
pripath=$3

basepath=$(cd `dirname $0`; pwd)

if [ ! ${pripath=} ]
    then
        pripath="${basepath}/backup_key.pem"
fi

openssl smime -decrypt -in ${input} -binary \
  -inform DEM -inkey ${pripath} -out ${output}

输入输出文件名作为参数,私钥为第三个参数,如上不输入都会默认使用当前目录下的密钥文件。

以上就是本次PostgreSQL备份加密使用到的脚本,下面是一次完整的使用过程:

[sure@localhost bin]$ ./createpem.sh highgo
Generating a 4096 bit RSA private key
...................................................................................................................++
.........................................................++
writing new private key to 'backup_key.pem'
-----
[sure@localhost bin]$ ll backup_key.pem*
-rw-rw-r--. 1 sure sure 3272 Mar 25 09:30 backup_key.pem
-rw-rw-r--. 1 sure sure 1952 Mar 25 09:30 backup_key.pem.pub

[sure@localhost bin]$ ./pg_dump.sh -U syssso highgo > bak1.sql
Password: 
[sure@localhost bin]$ ./pg_dump.sh encrypt "-U syssso highgo" bak2.sql.encrypt /opt/db/20150423/bin/backup_key.pem.pub 
Password: 
[sure@localhost bin]$ ll bak*
-rw-rw-r--. 1 sure sure  604 Mar 25 09:31 bak1.sql
-rw-rw-r--. 1 sure sure 1321 Mar 25 09:32 bak2.sql.encrypt
[sure@localhost bin]$ ./dencrypt_backup bak2.sql.encrypt bak2.sql
[sure@localhost bin]$ ls bak2*
bak2.sql  bak2.sql.encrypt
[sure@localhost bin]$
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
前端尾随者 前端尾随者
2年前
sourceTree 添加 ssh key 方法
1.使用git客户的生成公私钥:id\rsa、id\rsa.pub1.1设置Git的username和email:$gitconfigglobaluser.name"xxx"$gitconfig\globaluser.email"xxx.mail@xxx.com"1.2.生成SSH密钥过程:1.2.1.检查是不是已经存在密钥(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Stella981 Stella981
2年前
ECDSA密钥对生成以及在Token中的应用
1概述本文主要讲述了如何利用Openssl生成ECDSA密钥对,并利用Auth0库进行Token生成及验证的过程。2ECDSA2.1简介ECC(EllipticCurveCryptography,椭圆曲线加密)是一种基于椭圆曲线数学的公钥加密算法,而ECDSA
Stella981 Stella981
2年前
Git使用总结
生成密钥1.打开GitBash,运行  \_sshkeygen  \_2.密钥生成空间\_~/.ssh/id\_rsa  \_(C:/User/.ssh)3.输入密码(不输入增直接回车跳过)4._~/.ssh/id\_rsa.pub_ (公钥), _id\_rsa_ (私钥)下载代码到本地
Wesley13 Wesley13
2年前
4、jstack查看线程栈信息
1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6
Wesley13 Wesley13
2年前
MySQL8开启ssl加密
1概述MySQL从5.7开始默认开启SSL加密功能,进入MySQL控制台后输入status可以查看ssl的状态,出现下图表示在使用ssl:!在这里插入图片描述(https://imgblog.csdnimg.cn/20200325131703934.png)另外,ssl加密需要密钥与证书,可以使用openssl手动生成或使用my
Wesley13 Wesley13
2年前
VC++网络安全编程范例(2)
数字证书采用公钥体制,即利用一对互相匹配的密钥进行加密、解密。每个用户自己设定一把特定的仅为本人所知的私有密钥(私钥),用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。当发送一份保密文件时,发送方使用接收方的公钥对数据加密,而接收方则使用自己的私钥解密,这样信息就可以安全无误地到达目的地了。通过数字的手段
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这