你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

为已启用 Azure Arc 的 PostgreSQL 服务器配置安全性

本文档介绍与服务器组的安全性相关的各方面:

  • 静态加密
  • Postgres 角色和用户管理
    • 常规透视
    • 更改 postgres 管理用户的密码
  • 审核

注意

作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款

发行说明中提供了最近的更新。

静态加密

可以通过对存储数据库的磁盘进行加密和/或使用数据库函数对插入或更新的数据进行加密,来实现静态加密。

硬件:Linux 主机卷加密

实现系统数据加密来保护在设置启用了 Azure Arc 的数据服务时使用的磁盘上驻留的任何数据。 可以进一步了解此主题:

软件:在服务器组中使用 PostgreSQL pgcrypto 扩展

除了对用于托管 Azure Arc 设置的磁盘进行加密外,还可以配置已启用 Azure Arc 的 PostgreSQL 服务器,以便公开应用程序可用于加密数据库中数据的机制。 pgcrypto 扩展是 contrib Postgres 扩展的一部分,可在已启用 Azure Arc 的 PostgreSQL 服务器中使用。 可在此处查看有关 pgcrypto 扩展的详细信息。 总而言之,可以使用以下命令启用、创建并使用该扩展:

创建 pgcrypto 扩展

使用所选的客户端工具连接到你的服务器组,然后运行标准 PostgreSQL 查询:

CREATE EXTENSION pgcrypto;

此处查找有关如何连接的详细信息。

通过列出可随时在服务器组中使用的扩展来进行验证

可以通过列出可在服务器组中使用的扩展来验证 pgcrypto 扩展是否可供使用。 使用所选的客户端工具连接到你的服务器组,然后运行标准 PostgreSQL 查询:

select * from pg_extension;

如果使用了上述命令启用并创建了 pgcrypto,应会看到它。

使用 pgcrypto 扩展

现在可以调整应用程序的代码,以便使用 pgcrypto 提供的函数:

  • 常规哈希函数
  • 密码哈希函数
  • PGP 加密函数
  • 原始加密函数
  • 随机数据函数

例如,用于生成哈希值。 运行以下命令:

select crypt('Les sanglots longs des violons de l_automne', gen_salt('md5'));

返回以下哈希:

              crypt
------------------------------------
 $1$/9ACBYOV$z52PAGjQ5WTU9xvEECBNv/   

或,例如:

select hmac('Les sanglots longs des violons de l_automne', 'md5', 'sha256');

返回以下哈希:

                                hmac
--------------------------------------------------------------------
 \xd4e4790b69d2cc8dbce3385ee63272bc7760f1603640bb211a7b864e695570c5

或,例如,要存储加密数据(如密码):

  • 应用程序将机密存储在下表中:

    create table mysecrets(USERid int, USERname char(255), USERpassword char(512));
    
  • 在创建用户时对其密码进行加密:

    insert into mysecrets values (1, 'Me', crypt('MySecretPasswrod', gen_salt('md5')));
    
  • 请注意,密码已加密:

    select * from mysecrets;
    

输出:

- USERid: 1
- USERname: Me
- USERpassword: $1$Uc7jzZOp$NTfcGo7F10zGOkXOwjHy31

连接应用程序并传递一个密码时,它会在 mysecrets 表中查找,如果提供给应用程序的密码与表中存储的某个密码匹配,则返回相应用户的名称。 例如:

  • 传递错误的密码:

    select USERname from mysecrets where (USERpassword = crypt('WrongPassword', USERpassword));
    

    输出

      USERname
    ---------
    (0 rows)
    
  • 传递正确的密码:

    select USERname from mysecrets where (USERpassword = crypt('MySecretPasswrod', USERpassword));
    

    输出:

      USERname
    ---------
    Me
    (1 row)
    

这个小示例展示了可以使用 Postgres pgcrypto 扩展在已启用 Azure Arc 的 PostgreSQL 服务器中加密静态数据(存储加密的数据),且你的应用程序可以使用 pgcrypto 提供的函数来操作此加密数据。

Postgres 角色和用户管理

常规透视

若要在已启用 Azure Arc 的 PostgreSQL 服务器中配置角色和用户,请使用标准 Postgres 方法来管理角色和用户。 有关更多详细信息,请阅读此文

审核

如果要用于审核方案,请将服务器组配置为使用 Postgres 的 pgaudit 扩展。 有关 pgaudit 的更多详细信息,请参阅 pgAuditGitHub 项目。 若要在服务器组中启用 pgaudit 扩展,请阅读使用 PostgreSQL 扩展

使用 SSL 连接

客户端连接需要 SSL。 在连接字符串中,不应禁用 SSL 模式参数。 形成连接字符串