postgres服务之加密
数据中往往会出现一些敏感字段,例如电话,邮箱等,这时候有需求进行加密保存
目前可以实现的方式有两种
方式一:这种方法,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服务之加密的更多相关文章
- WebApi服务Uri加密及验证的两种方式
最近的一个项目要求服务端与UI层分离,业务层以WebApi方式向外提供所有业务服务,服务在数据保密性方面提出了要求,主要包括: 1:客户端认证: 2:服务请求超时(默认5分钟): 3:服务Get请求的 ...
- pgadmin4 csrf错误导致docker-compose postgres服务下线
docker-compse up 启动的前台服务, 过一会就自动停止 检查半天,发现是pgadmin4没安装正确不断报400 和 csrf error 然后pgadmin4为啥报这个, 因为pytho ...
- postgres服务相关语法
远程登陆 psql -h 主机 -U 用户 -p端口 -W -d 数据库 #-W表示密码,例如:psql -h 192.168.137.3 -U postgres -p 5432 -W -d post ...
- postgres服务安装,启动和配置
安装以及启动 yum install readline-devel tar xf postgresql-11.1.tar.gz cd postgresql-11.1 ./configure --pre ...
- Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)
接上篇<WebApi服务URI加密及验证的两种方式>,在实际开发中,仅对URI进行加密是不够的,在传输层采用SSL加密也是必须的. 如果服务寄宿于IIS,那对传输层加密非常简单仅需要配置一 ...
- [Kong 与 Konga与postgres数据库] 之 Kuberneres 部署
1.Kong的概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.Kong作为开源项目在2015年推 ...
- [Kong 与 Konga 与 Postgres数据库] 之 Kuberneres 部署
1.Kong的概述 Kong是一个clould-native.快速的.可扩展的.分布式的微服务抽象层(也称为API网关.API中间件或在某些情况下称为服务网格)框架.Kong作为开源项目在2015年推 ...
- 微服务和SOA服务
微服务和SOA都被认为是基于服务的架构,这意味着这两种架构模式都非常强调将“服务”作为其架构中的首要组件,用于实现各种功能(包括业务层面和非业务层面).微服务和SOA是两种差异很大的架构模式,但是他们 ...
- SQL2012数据库加密方法
1.非对称密钥来保护新的对称密钥 /*--测试环境 Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) Oct 19 2012 13:38:57 C ...
随机推荐
- boost timer
Boost.Timer provides clocks to measure code performance. At first, it may seem like this library com ...
- 箭头函数以及this指向问题
一.定义函数的方式 //1.function const aaa = function () { } //2.对象字面量中定义函数 const obj = { bbb() { } } //3.ES6中 ...
- Java线程与线程、进程与进程之间通信方式
1.1 基本概念以及线程与进程之间的区别联系 关于进程和线程,首先从定义上理解就有所不同: 进程是具有一定独立功能的程序.它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说 ...
- JDK1.7 hashMap源码分析
了解HashMap原理之前先了解一下几种数据结构: 1.数组:采用一段连续的内存空间来存储数据.对于指定下标的查找,时间复杂度为O(1),对于给定元素的查找,需要遍历整个数据,时间复杂度为O(n).但 ...
- php基于SQLite实现的分页功能示例
php基于SQLite实现的分页功能. 这里操作数据库文件使用的是前面文章<PHP基于PDO实现的SQLite操作类>中的SQLite数据库操作类. 代码: <?php class ...
- django搭建一个小型的服务器运维网站-重启服务器的进程
目录 项目介绍和源码: 拿来即用的bootstrap模板: 服务器SSH服务配置与python中paramiko的使用: 用户登陆与session; 最简单的实践之修改服务器时间: 查看和修改服务器配 ...
- 20175120彭宇辰 《Java程序设计》第十周学习总结
教材内容总结 十二章 Java多线程机制 一.进程与线程.操作系统与进程 -线程不是进程,是比进程更小的执行单位.但与进程不同的是,线程的中断和恢复可以更加节省系统的开销. -线程可以共享进程中的某些 ...
- 部署Jenkins完整记录
Jenkins通过脚本任务触发,实现代码的自动化分发,是CI持续化集成环境中不可缺少的一个环节.下面对Jenkins环境的部署做一记录.-------------------------------- ...
- /proc/interrupts /proc/stat 查看中断信息
/proc/interrupts列出当前所以系统注册的中断,记录中断号,中断发生次数,中断设备名称 如下图:从左至右:中断号 中断次数 中断设备名称 从上图可知中断号为19的arch_timer ...
- 项目搭建(三):自定义DLL
说明:程序中有些自定义的控件类型在TestStack.White框架中没有涉及,需要引入自定义的DLL,通过鼠标点击事件处理 使用:将自定义的ClassLibrary2.dll拷贝到项目/bin/de ...