前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >原 PostgreSQL备份加密方法

原 PostgreSQL备份加密方法

作者头像
王果壳
发布2018-05-17 14:19:16
1.6K0
发布2018-05-17 14:19:16
举报
文章被收录于专栏:王硕王硕

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

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

代码语言:javascript
复制
[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本身的参数进行执行,脚本如下:

代码语言:javascript
复制
[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、解密脚本:     首先对加密文件进行解密,才可以还原。脚本如下:

代码语言:javascript
复制
[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备份加密使用到的脚本,下面是一次完整的使用过程:

代码语言:javascript
复制
[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]$
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档