数据中往往会出现一些敏感字段,例如电话,邮箱等,这时候有需求进行加密保存

目前可以实现的方式有两种

方式一:这种方法,aes的加密方法不支持aes-192,不支持aes-256

#使用encrypt加解密
#加密保存
insert into test2(username,email) values('liulm7',encrypt('liulm7@xxxxx.com','aa','aes-128')); postgres=# select * from test2 where username='liulm7';
username | email | phone | address
----------+--------------------------------------------------------------------+-------+---------
liulm7 | \x39162fadc179498413b75b69bc65c98d19e454a0c67bd644118ab9df3c7b49ef | |
(1 row) #解密查看
postgres=# select username,convert_from(decrypt(email::bytea,'aa'::bytea,'aes-128'),'utf8') as email from test2 where username='liulm7';
username | email
----------+-------------------
liulm7 | liulm7@xxxxx.com
(1 row)

方式二:

#使用pgp_sym_encrypt加密
insert into test2(username,email) values('pgp_sym',pgp_sym_encrypt('pgp@lenovo.com','abc','cipher-algo=aes256, compress-algo=2, compress-level=9'));
insert into test2(username,email) values('pgp_sym',pgp_sym_encrypt('pgppp@lenovo.com','abc','cipher-algo=aes256, compress-algo=2, compress-level=9'));
#解密查看
postgres=# select username,pgp_sym_decrypt(email::bytea,'abc') from test2 where username='pgp_sym';
username | pgp_sym_decrypt
----------+------------------
pgp_sym | pgp@lenovo.com
pgp_sym | pgppp@lenovo.com
(2 rows)

查看某个数据库下加载的所有函数和存储过程

select routine_name from information_schema.routines where routine_catalog = 'uat_updated' and routine_schema = 'public' order by routine_name;
说明:routine_catalog: DBname routine_schema: schema名称

查看某个函数的信息

uat_updated=#  \df *pgp_sym_encrypt*
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+-----------------------+------------------+---------------------+------
public | pgp_sym_encrypt | bytea | text, text | func
public | pgp_sym_encrypt | bytea | text, text, text | func
public | pgp_sym_encrypt_bytea | bytea | bytea, text | func
public | pgp_sym_encrypt_bytea | bytea | bytea, text, text | func
(4 rows)

查看已经安装或者内置的模块

uat_updated=# select * from pg_available_extensions where name ~ 'pgcrypto';
name | default_version | installed_version | comment
----------+-----------------+-------------------+-------------------------
pgcrypto | 1.3 | 1.3 | cryptographic functions
(1 row)

一个报错处理:

ERROR:  function pgp_sym_encrypt(unknown, unknown, unknown) does not exist
LINE 1: insert into my_test values('pgp_sym',pgp_sym_encrypt('pgp@le...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.

解决方式:

1 通过上面的命令查看是否已经安装这个模块,
2
uat_updated=# create extension pgcrypto;
CREATE EXTENSION
3 测试这个模块里面的一个函数
select encrypt('123456','aa','aes');

参数说明:

cipher-algo  加密算法
compress-algo 压缩类型,使用的压缩算法,取值 0,1(zip),2(zlib)
compress-level 压缩比,级别越高压缩比越大,速度也会更慢,压缩级别(0~9)
convert-crlf 是否在加密的时候将\n装换为\r\n,在解密的时候将\r\n转换为\n
disable-mdc 是否使用SHA1保护数据
sess-key 是否使用单独的会话密钥
s2k-mode 使用哪一种S2K算法
s2k-count 使用S2K的迭代次数
s2k-digest-algo 在s2k中使用哪种摘要算法
s2k-cipher-algo 要用哪种密码来加密独立的会话密钥
unicode-mode 是否将文本数据从数据库内部编码转为UTF-8并返回

postgres服务之加密的更多相关文章

  1. WebApi服务Uri加密及验证的两种方式

    最近的一个项目要求服务端与UI层分离,业务层以WebApi方式向外提供所有业务服务,服务在数据保密性方面提出了要求,主要包括: 1:客户端认证: 2:服务请求超时(默认5分钟): 3:服务Get请求的 ...

  2. pgadmin4 csrf错误导致docker-compose postgres服务下线

    docker-compse up 启动的前台服务, 过一会就自动停止 检查半天,发现是pgadmin4没安装正确不断报400 和 csrf error 然后pgadmin4为啥报这个, 因为pytho ...

  3. postgres服务相关语法

    远程登陆 psql -h 主机 -U 用户 -p端口 -W -d 数据库 #-W表示密码,例如:psql -h 192.168.137.3 -U postgres -p 5432 -W -d post ...

  4. postgres服务安装,启动和配置

    安装以及启动 yum install readline-devel tar xf postgresql-11.1.tar.gz cd postgresql-11.1 ./configure --pre ...

  5. Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)

    接上篇<WebApi服务URI加密及验证的两种方式>,在实际开发中,仅对URI进行加密是不够的,在传输层采用SSL加密也是必须的. 如果服务寄宿于IIS,那对传输层加密非常简单仅需要配置一 ...

  6. [Kong 与 Konga与postgres数据库] 之 Kuberneres 部署

    1.Kong的概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.Kong作为开源项目在2015年推 ...

  7. [Kong 与 Konga 与 Postgres数据库] 之 Kuberneres 部署

    1.Kong的概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.Kong作为开源项目在2015年推 ...

  8. 微服务和SOA服务

    微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将“服务”作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们 ...

  9. SQL2012数据库加密方法

    1.非对称密钥来保护新的对称密钥 /*--测试环境 Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 C ...

随机推荐

  1. Python 的 zip 和 dict 组合 生成新字典

    >>> d = dict(zip(['a', 'b'], [1, 2]))>>> d{'a': 1, 'b': 2}>>> d = dict(zi ...

  2. Java Web学习总结(8)JSP(二)

    一,JSP中的九个内置对象 名称 类型 描述 out javax.servlet.jsp.JspWriter 用于页面输出 request javax.servlet.http.HttpServlet ...

  3. spring-boot整合mongodb的案例

    1.简介 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品 ...

  4. window server 2008 r2 安装ftp

    一.安装ftp服务 1.在服务管理器“角色”右键单击“添加角色”.  2.下一步. 3.勾选“Web 服务器(IIS)”,下一步. 4.勾选“FTP 服务器”,下一步. 5.安装完成,点击“关闭”.  ...

  5. SQL 交叉连接与内连接

    交叉连接 ,没有任何限制方式的连接. 叫做交叉连接. 碰到一种SQL 的写法. select * from  t1,t2 .     这其实是交叉连接 .   t1  是三条 ,  t2 是两条.  ...

  6. 用Linux 搭建 PXE 网络引导环境

    本例子中使用了CentOS7.4 minimal 系统,并且关闭了防火墙和selinux,并使用了dhcp.tftp.http和samba服务. 假设PXE服务器是192.168.4.104 ,tft ...

  7. git push github 免输入账号和密码方法

    git config --global credential.helper store 打开~/.gitconfig文件,会发现多了一项: [credential] helper = store 此时 ...

  8. sqlserver怎么copy一张表为另一张表

    SQL Server中,如果目标表存在:insert into 目标表 select * from 原表;SQL Server中,,如果目标表不存在:select * into 目标表 from 原表 ...

  9. Reciteing(first)

      it is sybmbolically portrayed in this cartoon,when a teacher assigns her student to read a literat ...

  10. Windows Filesystem filter driver

    参考:http://www.codeproject.com/Articles/43586/File-System-Filter-Driver-Tutorial 关键点: To perform atta ...