共用方式為

Azure Database for PostgreSQL 中的 SCRAM 身份验证

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

注释

若要使用 SCRAM 身份验证方法访问 Azure Database for PostgreSQL 灵活服务器实例,客户端库需要支持 SCRAM。 请参阅支持 SCRAM 的驱动程序列表

SCRAM 身份验证对应用程序服务器施加额外的计算负载,这需要计算每个身份验证的客户端证明。 通过限制应用程序连接池中的连接数(减少应用程序中的聊天性),或限制客户端允许的并发事务数(更大的事务),可能会降低 SCRAM 引入的性能开销。 建议在迁移到 SCRAM 身份验证之前测试工作负荷。

配置 SCRAM 身份验证

  1. 将password_encryption更改为 SCRAM-SHA-256。 目前,Azure Database for PostgreSQL 灵活服务器仅支持使用 SHA-256 的 SCRAM。

    SCRAM 的加密页的屏幕截图。

  2. 允许 SCRAM-SHA-256 作为身份验证方法。

    SCRAM 到达的身份验证的屏幕截图。

    重要

    可以选择仅选择 SCRAM-SHA-256 方法来强制实施 SCRAM 身份验证。 为此,具有 MD5 身份验证的用户可以更长地连接到服务器。 因此,在强制实施 SCRAM 之前,将 MD5 和 SCRAM-SHA-256 作为身份验证方法,直到将所有用户密码更新到 SCRAM-SHA-256。 可以使用步骤 7 中提到的查询验证用户的身份验证类型。

  3. 保存更改。 这些是动态属性,不需要重启服务器。

  4. 从 Azure Database for PostgreSQL 灵活服务器客户端连接到 Azure Database for PostgreSQL 灵活服务器实例。 例如,

    psql "host=myPGServer.postgres.database.chinacloudapi.cn port=5432 dbname=postgres user=myDemoUser password=<password> 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.
    
  5. 验证密码加密。

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

    postgres=> \password myDemoUser
    Enter new password:
    Enter it again:
    postgres=>
    
  7. 可以使用函数验证用户身份验证类型 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)
    
  8. 然后,可以从支持 SCRAM 身份验证的客户端连接到服务器。

    连接到内置托管 的 PgBouncer 时,也支持 SCRAM 身份验证。