初学者指南 | PostgreSQL中的加密机制如何运作?

在这篇文章中,我们将介绍可用于加密和解密PostgreSQL数据库中数据的不同方法。拥有一些 Linux 和 PostgreSQL 经验是必要的,但拥有加密经验并不是必需的,有经验当然更好。本文是使用 Ubuntu 23.04上运行的 PostgreSQL16编写的。首先,我将介绍加密的一些动机及其对数据安全的重要性,然后查看 PostgreSQL为实现加密所提供的函数的子集。
 

#1 背景

虽然我们在日常生活中很少与加密进行交互,但它对于我们的敏感信息(如银行、医疗保健等)的安全至关重要。通常,加密过程会远离终端用户,隐藏所有复杂的数学和算法,让我们只需输入密码,就可以完成所有操作。但是,这些抽象需要权衡,因为我们必须相信解密我们数据的人不会对其进行复制或进行其他恶意行为。在这篇博客中,我们将介绍 PostgreSQL 用于加密数据的不同方法,以及我们在使用它们时遇到的权衡。

#2 加密选项

PostgreSQL文档列出了数据库软件支持的 6 个加密级别。这些级别包括:

>>>密码加密

可能是最简单和最常用的加密形式。在向服务器发送之前,PostgreSQL客户端将对用户密码进行Hashing处理,然后将其存储在数据库中。这意味着明文密码永远不会存储在服务器上,这使得潜在的攻击者很难获取到它。

>>>特定列的加密

pgcrypto 模块提供加密函数,用于加密存储在数据库特定列中的数据。要解密数据,客户端必须通过密钥发送,并且数据在服务器端是未加密的。这意味着密钥和数据都会在服务器端短暂地暴露给具有提升权限的任何人(如数据库管理员)。

>>>数据分区加密

此方法并非特指 PostgreSQL,而是指操作系统在将数据写入磁盘时使用的加密。这意味着 PostgreSQL 服务器具有驱动器级别的加密功能,以阻止任何人通过物理访问服务器来读取数据。

>>>加密网络上的数据

这是指可以配置 PostgreSQL 以在网络上安全地传输数据的不同方法。SSL 和 GSSAPI 都可以通过指定主机及其加密在 pg_hba.conf 文件中进行配置。SSH 也是通过 PostgreSQL 支持的网络进行连接的常用协议。

>>>SSL主机身份验证

对于此级别,客户端和服务器都必须设置为在 SSL/TLS 握手中交换 SSL 证书。一旦启用,此方法可以防止可能的攻击者冒充服务器并获取对受限信息的访问权限,也称为中间人攻击。

>>>客户端加密

最后,也可能是最安全的选择是客户端在将数据发送到服务器之前自行加密数据。这意味着客户端必须在其端点管理所有加密和解密,但也消除了恶意管理员能够读取您的数据的可能性。

#3 加密函数

所有这些函数以及更多功能都记录在 pgcrypto 模块的 PostgreSQL 文档中。

  • General Hashing

Digest 函数:

digest(data text, type text) returns bytea

此函数根据“类型”中指定的加密方法,将存储在变量“data”中的数据转换为字节数组表示的二进制Hashing。

  • data:我们想要计算其二进制Hashing值的输入数据

  • type:要使用的Hashing算法(supported: md5, sha1, sha224, sha256, sha384 and sha512)

  • return:以字节数组形式生成的Hashing值

  • 原始加密

这些函数只是在输入的数据上运行密码,并不提供任何形式的密钥或初始化向量 (IV) 的管理。所有这些管理都应由用户处理,通常不建议在实际使用时使用。

encrypt(data bytea, key bytea, type text) returns bytea
decrypt(data bytea, key bytea, type text) returns bytea

正如我们所看到的,encrypt 和 decrypt 函数都采用相同的参数并返回相同的类型。唯一的区别是 'data' 是 encrypt() 中的明文字节数组,而在 decrypt() 中,'data' 是加密数据的字节数组。

  • data:表示要转换的明文(加密)或加密数据(解密)的字节数组

  • key:用于加密或解密数据的密钥

  • type:要使用的加密算法、模式和填充。这种“类型”与一般的哈希不同,因为我们有更多的选项可以定义。这些选项的格式为 algorithm – mode/pad:padding。例如,使用不带填充的 AES-CBC 加密的解密函数如下所示:

encrypt(data, 'mykey', 'aes-cbc/pad:none')

原始加密还支持另外两个函数形式的 IV:

encrypt_iv(data bytea, key bytea, iv bytea, type text) returns bytea
decrypt_iv(data bytea, key bytea, iv bytea, type text) returns bytea

这些函数与它们的非 IV 对应函数几乎相同,但包含一个额外的参数,用于定义算法的初始化向量。

#4 总结

在这篇博客中,我们介绍了PostgreSQL 提供的许多功能,用于加密和解密数据库内部和周围的数据。首先,我们谈到了加密的重要性以及我们在使用它时所做的权衡。然后,我们查看了 PostgreSQL 支持的不同加密级别及其在数据库中的功能。最后,我们研究了 PostgreSQL附带的一些加密实现,它们的使用案例以及如何使用它们。总体而言,加密对于我们的在线安全至关重要,并且如果您计划开发任何需要网络连接的内容,那么了解它是非常必要的。我希望这篇博客有助于你深入了解加密以及它在PostgreSQL中如何工作,同时能够启发你在未来的项目中实施这些安全措施。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Golang星辰图】抵御恶意攻击:利用Go语言的安全库构建可靠的应用程序

加固你的代码:了解Go语言中的安全库和技术 前言 在当今数字化的世界中,保护代码和数据的安全性变得至关重要。恶意攻击、数据泄露和其他安全漏洞可能给我们的系统和用户带来巨大的风险和损失。为了增强软件的安全性和可靠性,我们需要利用现…

使用Qt在小米平板上热点使用问题记录

Qt程序安卓平板上在运行了差不多两个月后,突然出现图像画面严重卡顿,经过问题定位发现是热点模块在接收数据后出现延迟 第一次解决是尝试设置平板的设置,重启等等,无法解决,然后平板恢复出厂设置,解决了&a…

元素定位之xpath和css

元素定位 xpath绝对路径相对路径案例xpath策略(路径)案例xpath策略(层级、扩展)属性层级与属性层级与属性拓展层级与属性综合 csscss选择器(id、类、标签、属性)id选择器类选择器标签选择器属性选择器案例-…

Spark源码(一)-SparkRPC示例

一、何为SparkRPC RPC全称为远程过程调用(Remote Procedure Call),它是一种计算机通信协议,允许一个计算机程序调用另一个计算机上的子程序,而无需了解底层网络细节。通过RPC,一个计算机程序可以像调用本地…

谷歌Gemma大模型部署记录

谷歌Gemma大模型部署记录 配置信息 1.系统:Ubuntu20 2.显卡:RTX3060 6G 一、安装Ollama 官网地址:https://ollama.com/download/linux 按照指令安装 curl -fsSL https://ollama.com/install.sh | sh二、运行模型 输入指令:…

【Java】:类和对象

1.面向对象的初步认知 1.1 什么是面向对象 Java是一门面向对象的语言,在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。用面向对象的思想来涉及程序,更符合人们对事物的认知…

【LeetCode-114.二叉树展开为链表】

题目详情: 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序…

某政务项目驻场全栈Java开发招聘要求-MD主数据子域-招2人

原创作者:田超凡(程序员田宝宝) 版权所有,引用请注明原作者,严禁复制转载 写在前面:临时的核心保密项目、周期3-4个月。要求能接受封闭式开发,Base昆明,项目是内网物理服务器集群下…

seleniumUI自动化实例(CSDN发布文章)

1.CSDN登陆成功后,点击发布 源码: #点击首页中的发布按钮 CSDNconf.driver.find_element(By.LINK_TEXT,"发布").click() time.sleep(15) 2.输入标题 #输入文章标题,标题格式“selenium UI自动化测试实例今天的日期” CSDNconf.d…

POI和EasyExcel区别和操作Excel

POI和EasyExcel操作Excel 常用场景 1、将用户信息导出为excel表格(导出数据… ) 2、将Excel表中的信息录入到网站数据库(文件数据上传… ) 开发中经常会设计到excel的处理,如导出Excel,导入Excel到数据库…

springboot+itextpdf+thymeleaf+ognl根据静态模版文件实现动态生成pdf文件并导出demo

第一步&#xff1a;导入maven依赖 <!-- 导出为PDF依赖包 --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId></dependency><dependency><groupId>com.itextpdf</groupId><art…

HarmonyOS(鸿蒙)应用开发——(一)

目录 1 创建hellopro项目 2 了解ArkTS 3 了解ArkTS的组件 4 组件介绍 4.1 常用基础组件&#xff1a; 4.1.1 Text 4.1.2 Button 4.1.3 TextInput 4.2 容器组件 4.2.1 Column 4.2.2 Row 5 案例——实现一个简易登录页面 5.1 在实现预览效果之前&#xff0c;我们…

【机器学习】基于果蝇算法优化的BP神经网络分类预测(FOA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】果蝇算法&#xff08;FOA&#xff09;原理及实现 2.设计与实现 数据集&#xff1a; 多输入多输出&#xff1a;样本特征24&#xff0c;标签类别4。…

【计算机视觉】三、图像处理——实验:图像去模糊和去噪、提取边缘特征

文章目录 0. 实验环境1. 理论基础1.1 滤波器&#xff08;卷积核&#xff09;1.2 PyTorch:卷积操作 2. 图像处理2.1 图像读取2.2 查看通道2.3 图像处理 3. 图像去模糊4. 图像去噪4.1 添加随机噪点4.2 图像去噪 0. 实验环境 本实验使用了PyTorch深度学习框架&#xff0c;相关操作…

bezier曲线拟合椭圆弧线

椭圆弧线用bezier曲线拟合 。 先计算出 椭圆中心 起始角度 旋转角度 S t e p 1 : C o m p u t e ( x 1 ′ , y 1 ′ ) Step 1: Compute(x_1, y_1) Step1:Compute(x1′​,y1′​) ( x 1 ′ y 1 ′ ) ( cos ⁡ φ sin ⁡ φ − sin ⁡ φ cos ⁡ φ ) ⋅ ( x 1 − x 2 2 y 1 −…

some/ip CAN CANFD

关于SOME/IP的理解 在CAN总线的车载网络中&#xff0c;通信过程是面向信号的 当ECU的信号的值发生了改变&#xff0c;或者发送周期到了&#xff0c;就会发送消息&#xff0c;而不考虑接收者是否需要&#xff0c;这样就会造成总线上出现不必要的信息&#xff0c;占用了带宽 …

RabbitMQ详细讲解

目录 4.0 AMQP协议的回顾 4.1 RabbitMQ支持的消息模型 4.2 引入依赖 4.3 第一种模型(直连) 1. 开发生产者 2. 开发消费者 3. 参数的说明 4.4 第二种模型(work quene) 1. 开发生产者 2.开发消费者-1 3.开发消费者-2 4.测试结果 5.消息自动确认机制 4.5 第三种模型(…

React——props children (插槽平替)

React当中不存在v-slot插槽这种概念&#xff0c;而当我们又需要实现这个种功能时&#xff0c;该怎么办呢&#xff1f; 我们可以通过props children属性去实现。 props children属性&#xff1a; children属性&#xff1a;表示该组件的子节点&#xff0c;自动放在props的chil…

开源表单设计器vue-form-design自动化校验实现原理

表单校验可以改善用户体验和减轻服务器的压力, 而动态配置表单校验能极大的提高动态表单的扩展性、灵活性, 满足多样性、差异化需求 目标 &#x1f44c;&#xff0c;首先我们简要说下要实现的目标功能&#xff1a; 具有基础的表单验证功能提供一些内置验证规则提供对外开放的…

ORACLE:VARCHAR2(4000)太小怎么办?

目录 数据备份&#xff1a; 1. 创建新列&#xff1a; 2. 迁移数据&#xff1a; 3. 验证数据完整性&#xff1a; 4.删除旧列&#xff1a; 5. 重命名新列&#xff08;如果需要保持原列名&#xff09;&#xff1a; 在Oracle数据库中&#xff0c;你不能直接通过ALTER TABLE语…