安全

PostgreSQL 扩展:使用 pgcrypto 保护您的时间序列数据

pgcrypto 是一个 PostgreSQL 扩展,它使您能够在数据库中加密、解密、散列和创建数字签名。Timescale 了解您的数据是多么宝贵,并充分认识到保护敏感信息的重要性。

在本文中,我们将向您展示如何安装和使用 pgcrypto 为您的数据库添加额外的安全层。无论您是处理财务记录、物联网遥测数据还是其他敏感的时间序列数据,我们都希望为您提供宝贵的见解和实用的策略,以增强您的数据安全性。

了解 pgcrypto 的基础知识

PostgreSQL 中的 pgcrypto 扩展在数据库中提供加密功能和能力。它提供各种功能来执行加密操作,包括加密、解密、散列和数字签名。

您可以使用 pgcrypto 来做什么?

以下是 pgcrypto 的一些关键功能和用例

1. 加密和解密:pgcrypto 允许您在数据库中加密和解密数据。它支持对称加密算法,如 AES、Blowfish 和 DES,以及非对称加密算法,如 RSA。此功能可用于保护存储在数据库中的敏感数据。

2. 散列:该扩展提供散列函数,如 MD5、SHA-1、SHA-256 等。散列通常用于安全地存储密码,方法是仅存储密码的散列,而不是实际密码本身。当用户输入密码时,可以对其进行散列并与存储的散列进行比较以进行身份验证。

3. 数字签名:pgcrypto 支持使用公钥加密进行数字签名。它允许您生成和验证数字签名,确保数据完整性和真实性。数字签名通常用于数据验证和不可否认性目的。

4. 密钥管理:pgcrypto 提供生成和管理加密密钥的功能。它允许您创建和使用对称和非对称密钥进行加密和解密操作。密钥管理对于确保加密数据的安全至关重要。

5. 安全散列密码:pgcrypto 包含一个名为 crypt() 的函数,可用于生成安全的散列密码。它使用单向函数对密码进行散列,并结合盐以提高安全性。这有助于保护用户密码,防止未经授权访问敏感帐户。

总的来说,pgcrypto 是一个强大的扩展,可以增强 PostgreSQL 的安全功能。它提供了一种便捷的方式在数据库中执行加密操作,使您能够保护数据、保护密码,并确保信息的完整性和真实性。

如何使用 Timescale 安装 pgcrypto

通过在 Timescale 中使用 pgcrypto 扩展,您可以利用其加密功能来加密时间序列数据中的敏感信息,或散列和验证数据完整性。

以下是如何将 pgcrypto 整合到 Timescale 设置中的示例

安装 pgcrypto:首先,确保您已在数据库中安装了 pgcrypto 扩展。Timescale 基于 PostgreSQL 构建,但它极大地扩展了 PostgreSQL 的边界,使您能够更快、更经济高效地构建应用程序,并实现显著的存储节省。

要安装 pgcrypto,请运行以下命令


CREATE EXTENSION IF NOT EXISTS pgcrypto;

Timescale 上,您可以通过访问服务概述中的 操作 > 扩展 来查找可用扩展,它还会为您提供安装说明。

使用 Timescale 和 pgcrypto 保护您的时间序列数据

  1. 创建超表:在 Timescale 中创建超表以存储您的时间序列数据。例如,假设您想创建一个超表来存储敏感的设备读数,您希望在数据库中对其进行加密。这意味着要读取数据,您需要每次都提供密钥。即使在备份和转储中,数据也会被加密。

  2. CREATE TABLE sensor_readings (
    time      TIMESTAMPTZ NOT NULL,
    device_id BIGINT,
    reading   BYTEA
    -- other columns);
    SELECT create_hypertable('sensor_readings', 'time');

请注意,reading 列是一个 BYTEA - 它将存储我们的加密有效负载。

  1. 现在您可以使用 pgp_sym_encrypt 函数对数据进行加密。让我们插入一个加密的温度读数

    
    INSERT INTO sensor_readings (time, device_id, reading)VALUES (NOW(), 1, pgp_sym_encrypt('20.5', 'supersecretkey'));

值 '20.5' 是要加密的读数,'supersecretkey' 是用于加密的密钥。在实际场景中,您可能会从应用程序中获取这些值,并且密钥将被安全地存储和管理。

要解密此数据,您可以使用 pgp_sym_decrypt 函数


SELECT time, device_id, pgp_sym_decrypt(reading, 'supersecretkey') AS reading
FROM sensor_readings
WHERE device_id = 1;

此查询将返回 ID 为 1 的设备的时间、设备 ID 和解密的温度。

注意:这些示例使用对称加密,其中相同的密钥用于加密和解密。 pgcrypto 还支持非对称加密,如果更适合您的需求。确保安全地处理和存储密钥,以维护加密数据的安全性。

通过将 Timescale 的时间序列功能与 pgcrypto 的加密功能相结合,您可以在时间序列数据库中保护敏感数据,加密特定列,并使用散列确保数据的完整性。请记住选择合适的加密算法,并确保适当的密钥管理实践,以维护加密数据的安全性。

立即开始保护您的数据

如果您正在处理时间序列数据,并且希望为数据库添加另一层保护,请 安装 pgcrypto 并立即开始在 Timescale 中使用它。

尚未尝试过 Timescale?注册免费试用 30 天(无需信用卡)或 自行托管 Timescale 的数据库核心 TimescaleDB