PostgreSQL备份加密方法

前端之家收集整理的这篇文章主要介绍了PostgreSQL备份加密方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

  1. [sure@localhost bin]$ cat createpem.sh
  2. #!/bin/bash
  3.  
  4. data="$1"
  5.  
  6. openssl req -x509 -nodes -days 1000000 -newkey rsa:4096 -keyout backup_key.pem \
  7. -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本身的参数进行执行,脚本如下:

  1. [sure@localhost bin]$ cat pg_dump.sh
  2. #!/bin/bash
  3.  
  4. isencrypt=$1
  5. database=$2
  6. output=$3
  7. pubpath=$4
  8.  
  9. basepath=$(cd `dirname $0`; pwd)
  10.  
  11. if [ ! ${pubpath} ]
  12. then
  13. pubpath="${basepath}/backup_key.pem.pub"
  14. fi
  15.  
  16. if [ ${isencrypt} == "encrypt" ]
  17. then
  18. ${basepath}/pg_dump ${database} | openssl smime -encrypt -aes256 -binary -outform DEM -out ${output} ${pubpath}
  19. else
  20. ${basepath}/pg_dump $@
  21. fi
这里是利用公钥进行加密的,第一个参数为"encyrpt",作为是否加密的标志;
第二个参数为pg_dump原本的选项,不过要注意的是,如果是多个参数的话,需要用“”引起来;
第三个参数为输出文件名;
第四个参数为公钥,这里可以允许用户指定公钥进行加密,不输入,则默认为当前目录下的公钥。
不加密,则和原来一致。

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

  1. [sure@localhost bin]$ cat dencrypt_backup
  2. #!/bin/bash
  3.  
  4. input=$1
  5. output=$2
  6. pripath=$3
  7.  
  8. basepath=$(cd `dirname $0`; pwd)
  9.  
  10. if [ ! ${pripath=} ]
  11. then
  12. pripath="${basepath}/backup_key.pem"
  13. fi
  14.  
  15. openssl smime -decrypt -in ${input} -binary \
  16. -inform DEM -inkey ${pripath} -out ${output}
输入输出文件名作为参数,私钥为第三个参数,如上不输入都会默认使用当前目录下的密钥文件

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

  1. [sure@localhost bin]$ ./createpem.sh highgo
  2. Generating a 4096 bit RSA private key
  3. ...................................................................................................................++
  4. .........................................................++
  5. writing new private key to 'backup_key.pem'
  6. -----
  7. [sure@localhost bin]$ ll backup_key.pem*
  8. -rw-rw-r--. 1 sure sure 3272 Mar 25 09:30 backup_key.pem
  9. -rw-rw-r--. 1 sure sure 1952 Mar 25 09:30 backup_key.pem.pub
  10.  
  11. [sure@localhost bin]$ ./pg_dump.sh -U syssso highgo > bak1.sql
  12. Password:
  13. [sure@localhost bin]$ ./pg_dump.sh encrypt "-U syssso highgo" bak2.sql.encrypt /opt/db/20150423/bin/backup_key.pem.pub
  14. Password:
  15. [sure@localhost bin]$ ll bak*
  16. -rw-rw-r--. 1 sure sure 604 Mar 25 09:31 bak1.sql
  17. -rw-rw-r--. 1 sure sure 1321 Mar 25 09:32 bak2.sql.encrypt
  18. [sure@localhost bin]$ ./dencrypt_backup bak2.sql.encrypt bak2.sql
  19. [sure@localhost bin]$ ls bak2*
  20. bak2.sql bak2.sql.encrypt
  21. [sure@localhost bin]$

猜你在找的Postgre SQL相关文章