為已啟用 Azure Arc 的 PostgreSQL 伺服器設定安全性
本文件說明與伺服器群組安全性相關的各種層面:
- 待用加密
- Postgres 角色和使用者管理
- 一般檢視方塊
- 變更 postgres 系統管理使用者的密碼
- Audit
待用加密
您可以加密資料庫儲存所在的磁碟,和/或使用資料庫函式來加密您所插入或更新的資料,藉以實作待用加密。
硬體: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
延伸模組是 Postgres contrib
延伸模組的一部分,可在已啟用 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 方法來管理角色和使用者。 如需詳細資訊,請參閱這裡。
Audit
對於稽核案例,請將您的伺服器群組設定為使用 Postgres 的 pgaudit
延伸模組。 如需 pgaudit
的詳細資訊,請參閱 pgAudit
GitHub 專案。 若要在您的伺服器群組中啟用 pgaudit
延伸模組,請參閱使用 PostgreSQL 延伸模組。
使用 SSL 連線
用戶端連線需要 SSL。 在連接字串中,不應該停用 SSL 模式參數。 建立連接字串。
相關內容
- 請參閱
pgcrypto
延伸模組 - 請參閱使用 PostgreSQL 延伸模組