你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
为已启用 Azure Arc 的 PostgreSQL 服务器配置安全性
本文档介绍与服务器组的安全性相关的各方面:
- 静态加密
- Postgres 角色和用户管理
- 常规透视
- 更改 postgres 管理用户的密码
- 审核
静态加密
可以通过对存储数据库的磁盘进行加密和/或使用数据库函数对插入或更新的数据进行加密,来实现静态加密。
硬件:Linux 主机卷加密
实现系统数据加密来保护在设置启用了 Azure Arc 的数据服务时使用的磁盘上驻留的任何数据。 可以进一步了解此主题:
- Linux 上的常规静态数据加密
- 专门使用 LUKS
cryptsetup
命令 (Linux)(https://www.cyberciti.biz/security/howto-linux-hard-disk-encryption-with-luks-cryptsetup-command/) 进行磁盘加密。 由于支持 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
的更多详细信息,请参阅 pgAudit
GitHub 项目。 若要在服务器组中启用 pgaudit
扩展,请阅读使用 PostgreSQL 扩展。
使用 SSL 连接
客户端连接需要 SSL。 在连接字符串中,不应禁用 SSL 模式参数。 形成连接字符串。