配置客户端身份验证
您可以限制数据库用户与身份验证记录之间的连接方式。Vertica 数据库使用客户端身份验证方法确立发出连接请求的客户端的身份,并确定是否授权该客户端使用提供的凭据从其主机地址连接到 Vertica 数据库。
基本身份验证配置工作流
通常情况下,配置客户端身份验证的工作流如下所示:
要查看现有的身份验证记录,请查询系统表 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 1924 和 RFC 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 启用。