适用于: Azure Database for PostgreSQL 灵活服务器

加盐质询响应身份验证机制 (SCRAM) 是一种基于密码的相互身份验证协议。 它是一种质询-响应方案,其中添加了多个安全级别,可防止在不受信任的连接中进行密码探查。 SCRAM 支持在服务器上以加密哈希的形式存储密码,从而提供高级安全性。

若要使用 SCRAM 身份验证方法来访问 PostgreSQL 数据库服务器,客户端库需要支持 SCRAM。 请参阅支持 SCRAM 的 驱动程序列表

配置 SCRAM 身份验证

  • 将 password_encryption 更改为 SCRAM-SHA-256。 PostgreSQL 目前仅支持使用 SHA-256 的 SCRAM。

  • 允许将 SCRAM-SHA-256 用作身份验证方法。

    可以选择强制实施仅限 SCRAM 的身份验证,只需选择 SCRAM-SHA-256 方法即可。 这样,使用 MD5 身份验证方法的用户不再可以连接到服务器。 因此,在强制实施 SCRAM 并将所有用户密码更新为 SCRAM-SHA-256 之前,建议同时使用 MD5 和 SCRAM-256 作为身份验证方法。 可以使用步骤 #7 中所述的查询来验证用户的身份验证类型。

  • 保存更改。 这些属性是动态的,无需重启服务器。

  • 从 Postgres 客户端连接到 Postgres 服务器。 例如,

    psql "host=myPGServer.postgres.database.azure.com port=5432 dbname=postgres user=myDemoUser password=MyPassword sslmode=require"
    psql (12.3 (Ubuntu 12.3-1.pgdg18.04+1), server 12.6)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
    Type "help" for help.
    
  • 验证密码加密。

    postgres=> show password_encryption;
     password_encryption
    ---------------------
    scram-sha-256
    (1 row)
    
  • 然后可以更新用户的密码。

    postgres=> \password myDemoUser
    Enter new password:
    Enter it again:
    postgres=>
    
  • 可以使用 azure_roles_authtype() 函数验证用户身份验证类型。

    postgres=> SELECT * from azure_roles_authtype();
            rolename          | authtype
    ---------------------------+-----------
    azuresu                   | NOLOGIN
    pg_monitor                | NOLOGIN
    pg_read_all_settings      | NOLOGIN
    pg_read_all_stats         | NOLOGIN
    pg_stat_scan_tables       | NOLOGIN
    pg_read_server_files      | NOLOGIN
    pg_write_server_files     | NOLOGIN
    pg_execute_server_program | NOLOGIN
    pg_signal_backend         | NOLOGIN
    replication               | NOLOGIN
    myDemoUser                | SCRAM-256
    azure_pg_admin            | NOLOGIN
    srtest                    | SCRAM-256
    sr_md5                    | MD5
    (14 rows)
    
  • 然后可以从支持 SCRAM 身份验证的客户端连接到服务器。

    连接到内置托管 PgBouncer 时还支持 SCRAM 身份验证。 上述教程适用于通过内置 PgBouncer 功能使用 SCRAM 身份验证来设置连接。

  • 使用 Azure CLI 创建和管理 Azure Database for PostgreSQL 灵活服务器虚拟网络
  • 详细了解 Azure Database for PostgreSQL 灵活服务器中的网络
  • 详细了解 Azure Database for PostgreSQL 灵活服务器防火墙规则
  •