文档下载建议反馈入口

  • 前提条件
  • 基于密码的身份认证
  • 基于证书的身份认证
  • 双因子身份认证
  • 其他方式

身份认证与鉴别

身份鉴别用于对登录数据库访问数据的用户进行身份验证,确认该用户是否能够访问数据库,并根据关联的数据库用户的权限,对该用户在数据库中的数据访问活动进行安全控制。

本文介绍 KaiwuDB 支持的身份鉴别与认证的方式以及如何在各种认证方式下使用 kwbase sql CLI 工具连接数据库。

前提条件

说明

以下示例假设已经安全部署并启动 defaultdb 数据库。

基于密码的身份认证

用户名和密码是最常见的身份验证方法。通过为每个用户分配独特的用户名和密码,可以确保只有授权用户才能访问数据库。

非三权分立模式

  1. root 用户登录 defaultdb 数据库。

  2. root 用户创建用户并为用户设置密码。

    以下示例创建 user1 用户,并为 user1 用户设置密码。

    CREATE USER user1 WITH PASSWORD '11aa!!AA';
    
  3. root 用户配置基于密码的认证参数。

    以下示例允许 user1 用户使用密码登录 defaultdb 数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数

    SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user1 all password";
    
  4. user1 用户连接数据库。

    由于密码以明文的形式从客户端发送到服务器端,为确保密码安全,需要使用 SSL 加密连接。客户端工具提示输入用户密码,但是不回显输入的密码。

    kwbase sql --url "postgresql://user1:KaiwuDB_u1@localhost:26257/defaultdb" -u user1;
    -- 按照提示 Enter password: ,输入正确的密码,回车即可连接成功。
    

三权分立模式

  1. secroot 用户登录 defaultdb 数据库。

  2. secroot 用户授予 sysroot 用户创建角色的权限。

    ALTER USER sysroot WITH CREATEROLE;
    
  3. secroot 用户配置基于密码的认证参数。

    以下示例允许 user1 用户使用密码登录 defaultdb 数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数

    SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user1 all password";
    
  4. secroot 用户退出 defaultdb 数据库。

  5. sysroot 用户登录 defaultdb 数据库。

  6. sysroot 用户创建用户并为用户设置密码。

    以下示例创建 user1 用户,并为 user1 用户设置密码。

    CREATE USER user1 WITH PASSWORD '11aa!!AA';
    
  7. user1 用户连接数据库。

    由于密码以明文的形式从客户端发送到服务器端,为确保密码安全,需要使用 SSL 加密连接。客户端工具提示输入用户密码,但是不回显输入的密码。

    kwbase sql --url "postgresql://user1:KaiwuDB_u1@localhost:26257/defaultdb" -u user1;
    -- 按照提示 Enter password: ,输入正确的密码,回车即可连接成功。
    

基于证书的身份认证

KaiwuDB 支持基于证书认证的登录方式。采用这种方式,KaiwuDB 对不同用户签发证书,使用加密连接来传输数据,并在用户登录数据库时验证证书。

非三权分立模式

  1. root 用户登录 defaultdb 数据库。

  2. root 用户创建用户。

    以下示例创建 user2 用户。

    CREATE USER user2;
    
  3. root 用户配置认证参数。

    以下示例允许 user2 用户使用证书登录 defaultdb 数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数

    SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user2 all cert";
    
  4. root 用户为用户生成证书。

    kwbase cert create-client user2 --certs-dir=certs --ca-key=certs/ca.key
    
  5. user2 用户连接数据库。

    kwbase sql --url "postgresql://user2:KaiwuDB_u2@localhost:26257/defaultdb?sslmode=require&sslrootcert=certs/ca.crt&sslcert=certs/client.user2.crt&sslkey=certs/client.user2.key"
    

三权分立模式

  1. secroot 用户登录 defaultdb 数据库。

  2. secroot 用户授予 sysroot 用户创建角色的权限。

    ALTER USER sysroot WITH CREATEROLE;
    
  3. secroot 用户配置认证参数。

    以下示例允许 user2 用户使用证书登录 defaultdb 数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数

    SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user2 all cert";
    
  4. secroot 用户退出 defaultdb 数据库。

  5. sysroot 用户登录 defaultdb 数据库。

  6. sysroot 用户创建用户。

    以下示例创建 user2 用户。

    CREATE USER user2;
    
  7. sysroot 用户为用户生成证书。

    kwbase cert create-client user2 --certs-dir=certs --ca-key=certs/ca.key
    
  8. user2 用户连接数据库。

    kwbase sql --url "postgresql://user2:KaiwuDB_u2@localhost:26257/defaultdb?sslmode=require&sslrootcert=certs/ca.crt&sslcert=certs/client.user2.crt&sslkey=certs/client.user2.key"
    

双因子身份认证

双因子身份验证(Two-Factor Authentication,2FA)是一种身份和访问管理安全方法,需要通过两种形式的身份验证才能访问数据库。KaiwuDB 支持使用密码和证书的认证方式登录 KaiwuDB 数据库。

非三权分立模式

  1. root 用户登录 defaultdb 数据库。

  2. root 用户创建用户并为用户设置密码。

    以下示例创建 user3 用户并为 user3 用户设置密码。

    CREATE USER user3 WITH PASSWORD '22bb!!BB';
    
  3. root 用户配置认证参数。

    以下示例允许 user3 用户使用密码和证书登录 defaultdb 数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数

    SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user3 all cert+password";
    
  4. root 用户为用户生成证书。

    kwbase cert create-client user3 --certs-dir=certs --ca-key=certs/ca.key;
    
  5. user3 用户连接数据库。

    由于密码以明文的形式从客户端发送到服务器端,为确保密码安全,需要使用 SSL 加密连接。客户端工具提示输入用户密码,但是不回显输入的密码。

    kwbase sql --url "postgresql://user3:KaiwuDB_u3@localhost:26257/defaultdb?sslmode=require&sslrootcert=certs/ca.crt&sslcert=certs/client.user3.crt&sslkey=certs/client.user3.key";
    -- 按照提示 Enter password: ,输入正确的密码,回车即可连接成功。
    

三权分立模式

  1. secroot 用户登录 defaultdb 数据库。

  2. secroot 用户授予 sysroot 用户创建角色的权限。

    ALTER USER sysroot WITH CREATEROLE;
    
  3. secroot 用户配置认证参数。

    以下示例允许 user3 用户使用密码和证书登录 defaultdb 数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数

    SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user3 all cert+password";
    
  4. secroot 用户退出 defaultdb 数据库。

  5. sysroot 用户登录 defaultdb 数据库。

  6. sysroot 用户创建用户并为用户设置密码。

    以下示例创建 user3 用户并为 user3 用户设置密码。

    CREATE USER user3 WITH PASSWORD '22bb!!BB';
    
  7. sysroot 用户为用户生成证书。

    kwbase cert create-client user3 --certs-dir=certs --ca-key=certs/ca.key;
    
  8. user3 用户连接数据库。

    由于密码以明文的形式从客户端发送到服务器端,为确保密码安全,需要使用 SSL 加密连接。客户端工具提示输入用户密码,但是不回显输入的密码。

    kwbase sql --url "postgresql://user3:KaiwuDB_u3@localhost:26257/defaultdb?sslmode=require&sslrootcert=certs/ca.crt&sslcert=certs/client.user3.crt&sslkey=certs/client.user3.key";
    -- 按照提示 Enter password: ,输入正确的密码,回车即可连接成功。
    

其他方式

除上述身份鉴别与认证方式外,KaiwuDB 还支持无条件接受或拒绝满足匹配规则的连接。

  • 允许匹配规则的连接。

    以下示例允许使用 10.xxx.xxx.2 地址的所有用户连接 KaiwuDB 集群。

    SET CLUSTER SETTING server.host_based_authentication.configuration = 'host all all 10.xxx.xxx.2 trust';
    
  • 拒绝匹配规则的连接。

    以下示例拒绝使用 10.xxx.xxx.1 地址的所有用户连接 KaiwuDB 集群。

    SET CLUSTER SETTING server.host_based_authentication.configuration = 'host all all 10.xxx.xxx.1 reject';
    

有关身份鉴别与认证的更多详细信息,参见集群实时参数