配置客户端身份验证

您可以限制数据库用户与身份验证记录之间的连接方式。Vertica 数据库使用客户端身份验证方法确立发出连接请求的客户端的身份,并确定是否授权该客户端使用提供的凭据从其主机地址连接到 Vertica 数据库。

基本身份验证配置工作流

通常情况下,配置客户端身份验证的工作流如下所示:

  1. 创建身份验证记录。身份验证记录在创建后会自动启用。有关详细信息,请参阅创建身份验证记录

  2. 将身份验证记录授予指定用户或角色。

要查看现有的身份验证记录,请查询系统表 CLIENT_AUTH

用于客户端身份验证的 IPv4 和 IPv6

Vertica 支持客户端使用 IPv4 或 IPv6 协议连接到数据库服务器。数据库服务器之间的内部通信必须一致地使用一个地址系列(IPv4 或 IPv6)。但是,客户端可以从任一类型的 IP 地址连接到数据库。

如果客户端将从 IPv4 和 IPv6 进行连接,必须创建两种身份验证方法,每种方法对应一种地址。任何使用 HOST 身份验证的身份验证方法都需要 IP 地址。

例如,第一个语句允许用户从任何 Ipv4 地址连接。第二个语句允许用户从任何 IPv6 地址连接:

=> CREATE AUTHENTICATION <name> METHOD 'gss' HOST '0.0.0.0/0'; --IPv4
=> CREATE AUTHENTICATION <name> METHOD 'gss' HOST '::/0'; --IPv6

如果在 URL 中使用字面量型 Ipv6 地址,必须将 Ipv6 地址括在方括号中,如以下示例中所示:

=> ALTER AUTHENTICATION Ldap SET host='ldap://[1dfa:2bfa:3:45:5:6:7:877]';
=> ALTER AUTHENTICATION Ldap SET host='ldap://[fdfb:dbfa:0:65::177]';
=> ALTER AUTHENTICATION Ldap SET host='ldap://[fdfb::177]';
=> ALTER AUTHENTICATION Ldap SET host='ldap://[::1]';
=> ALTER AUTHENTICATION Ldap SET host='ldap://[1dfa:2bfa:3:45:5:6:7:877]:5678';

如果您使用多节点群集,(HOST, HOST TLS, HOST NO TLS) 中的任何 IP/网络掩码设置都必须匹配群集中的所有节点。此设置允许数据库所有者对群集中的每个节点进行身份验证和管理。例如,指定 10.10.0.8/30 允许 CIDR 地址范围 10.10.0.8–10.10.0.11。

有关 IPv6 地址的详细信息,请参阅 RFC 1924RFC 2732

支持的客户端身份验证方法

Vertica 支持以下客户端身份验证方法:

  • trust:用户可以使用有效的用户名(即无需密码)进行身份验证。

  • reject:拒绝连接尝试。

  • hash:用户必须提供有效的用户名和密码。有关详细信息,请参阅哈希身份验证

  • gss:授权使用 MIT Kerberos 实现连接到 Vertica 的客户端。密钥分发中心 (KDC) 必须使用 GSS-API 支持 Kerberos 5。非 MIT Kerberos 实施必须使用 GSS-API。有关详细信息,请参阅Kerberos 身份验证

  • ident:根据 Ident 服务器中的用户名对客户端进行身份验证。有关详细信息,请参阅Ident 身份验证

  • ldap:使用 LDAP 或 Active Directory 服务器验证客户端及其用户名和密码。有关详细信息,请参阅LDAP 身份验证

  • tls:对提供具有指定有效数据库用户名的通用名称 (CN) 证书的客户端进行身份验证。必须为相互模式 TLS 配置 Vertica,才能使用此方法。有关详细信息,请参阅 TLS 身份验证

  • oauth:使用访问令牌对客户端进行身份验证。有关详细信息,请参阅OAuth 2.0 身份验证

本机和主机身份验证

您可以将客户端身份验证方法定义为:

  • 本机:与数据库进行本机连接。

  • 主机:从其他主机与数据库进行远程连接,每个主机都有自己的 IPv4 或 IPv6 地址和主机参数。有关详细信息,请参阅上面的用于客户端身份验证的 IPv4 和 IPv6

某些身份验证方法只能指定为本机或主机,如下表中所列:

对关联的用户和角色进行身份验证

Vertica 支持创建关联的用户和角色,您可以将 ROLE2 权限授予 ROLE1。ROLE1 中的所有用户使用分配给 ROLE2 的相同身份验证。例如:

=> CREATE USER user1;
=> CREATE ROLE role1;
=> CREATE ROLE role2;
=> CREATE AUTHENTICATION h1 METHOD 'hash' LOCAL;
=> GRANT AUTHENTICATION h1 to role2;
=> GRANT role2 to role1;
=> GRANT role1 to user1;

上面示例中的用户和角色关联可以表示为以下方式:

auth1 -> role2 -> role1 -> user1

在此示例中,由于 role2 权限已授予 role1,您仅需要对 role2 授予身份验证,这样就可以对 role1 启用。