身份认证与鉴别
身份鉴别用于对登录数据库访问数据的用户进行身份验证,确认该用户是否能够访问数据库,并根据关联的数据库用户的权限,对该用户在数据库中的数据访问活动进行安全控制。
本文介绍 KaiwuDB 支持的身份鉴别与认证的方式以及如何在各种认证方式下使用 kwbase sql
CLI 工具连接数据库。
前提条件
说明
以下示例假设已经安全部署并启动 defaultdb
数据库。
基于密码的身份认证
用户名和密码是最常见的身份验证方法。通过为每个用户分配独特的用户名和密码,可以确保只有授权用户才能访问数据库。
非三权分立模式
root
用户登录defaultdb
数据库。root
用户创建用户并为用户设置密码。以下示例创建
user1
用户,并为user1
用户设置密码。CREATE USER user1 WITH PASSWORD '11aa!!AA';
root
用户配置基于密码的认证参数。以下示例允许
user1
用户使用密码登录defaultdb
数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数。SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user1 all password";
user1
用户连接数据库。由于密码以明文的形式从客户端发送到服务器端,为确保密码安全,需要使用 SSL 加密连接。客户端工具提示输入用户密码,但是不回显输入的密码。
kwbase sql --url "postgresql://user1:KaiwuDB_u1@localhost:26257/defaultdb" -u user1; -- 按照提示 Enter password: ,输入正确的密码,回车即可连接成功。
三权分立模式
secroot
用户登录defaultdb
数据库。secroot
用户授予sysroot
用户创建角色的权限。ALTER USER sysroot WITH CREATEROLE;
secroot
用户配置基于密码的认证参数。以下示例允许
user1
用户使用密码登录defaultdb
数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数。SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user1 all password";
secroot
用户退出defaultdb
数据库。sysroot
用户登录defaultdb
数据库。sysroot
用户创建用户并为用户设置密码。以下示例创建
user1
用户,并为user1
用户设置密码。CREATE USER user1 WITH PASSWORD '11aa!!AA';
user1
用户连接数据库。由于密码以明文的形式从客户端发送到服务器端,为确保密码安全,需要使用 SSL 加密连接。客户端工具提示输入用户密码,但是不回显输入的密码。
kwbase sql --url "postgresql://user1:KaiwuDB_u1@localhost:26257/defaultdb" -u user1; -- 按照提示 Enter password: ,输入正确的密码,回车即可连接成功。
基于证书的身份认证
KaiwuDB 支持基于证书认证的登录方式。采用这种方式,KaiwuDB 对不同用户签发证书,使用加密连接来传输数据,并在用户登录数据库时验证证书。
非三权分立模式
root
用户登录defaultdb
数据库。root
用户创建用户。以下示例创建
user2
用户。CREATE USER user2;
root
用户配置认证参数。以下示例允许
user2
用户使用证书登录defaultdb
数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数。SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user2 all cert";
root
用户为用户生成证书。kwbase cert create-client user2 --certs-dir=certs --ca-key=certs/ca.key
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"
三权分立模式
secroot
用户登录defaultdb
数据库。secroot
用户授予sysroot
用户创建角色的权限。ALTER USER sysroot WITH CREATEROLE;
secroot
用户配置认证参数。以下示例允许
user2
用户使用证书登录defaultdb
数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数。SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user2 all cert";
secroot
用户退出defaultdb
数据库。sysroot
用户登录defaultdb
数据库。sysroot
用户创建用户。以下示例创建
user2
用户。CREATE USER user2;
sysroot
用户为用户生成证书。kwbase cert create-client user2 --certs-dir=certs --ca-key=certs/ca.key
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 数据库。
非三权分立模式
root
用户登录defaultdb
数据库。root
用户创建用户并为用户设置密码。以下示例创建
user3
用户并为user3
用户设置密码。CREATE USER user3 WITH PASSWORD '22bb!!BB';
root
用户配置认证参数。以下示例允许
user3
用户使用密码和证书登录defaultdb
数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数。SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user3 all cert+password";
root
用户为用户生成证书。kwbase cert create-client user3 --certs-dir=certs --ca-key=certs/ca.key;
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: ,输入正确的密码,回车即可连接成功。
三权分立模式
secroot
用户登录defaultdb
数据库。secroot
用户授予sysroot
用户创建角色的权限。ALTER USER sysroot WITH CREATEROLE;
secroot
用户配置认证参数。以下示例允许
user3
用户使用密码和证书登录defaultdb
数据库。有关身份鉴别与认证的更多详细信息,参见集群实时参数。SET CLUSTER SETTING server.host_based_authentication.configuration = "host defaultdb user3 all cert+password";
secroot
用户退出defaultdb
数据库。sysroot
用户登录defaultdb
数据库。sysroot
用户创建用户并为用户设置密码。以下示例创建
user3
用户并为user3
用户设置密码。CREATE USER user3 WITH PASSWORD '22bb!!BB';
sysroot
用户为用户生成证书。kwbase cert create-client user3 --certs-dir=certs --ca-key=certs/ca.key;
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';
有关身份鉴别与认证的更多详细信息,参见集群实时参数。