Active Directory存储关于Windows域成员的信息,包括用户和hosts。
verticause使用Kerberos协议来访问这些信息,以便对Windows用户进行Vertica数据库的身份验证。Kerberos协议使用principals 来标识用户,并使用keytab文件来存储用户的密码信息。您需要将keytab文件安装到Vertica中,以使Vertica数据库能够以密码方式对windows用户进行身份验证。
这个过程描述:
- 创建Vertica service principal。
- 导出这些principal的keytab文件
- 在Vertica数据库中安装keytab文件。这允许Vertica对Windows用户进行身份验证,并授予他们对Vertica数据库的访问权。
1
为Vertica服务创建一个Windows account (principal) ,并为集群中的每个节点/主机创建一个Vertica host。下面过程为运行在此节点上的主机verticanode01和vertica服务创建Windows帐户。
当您创建这些帐户时,请选择以下内容:
- 用户无法更改密码
- 密码永不过期
注意:您可以取消选择密码永不过期。但是,如果更改了这些用户密码,则必须重新创建keytab文件并将其重新安装到Vertica中。这包括重复整个过程。
2
如果在HDFS上使用由Kerberos身份验证保护的外部表,则必须启用委托。为此,访问Active Directory Users and Computers对话框,右键单击Vertica服务的Windows帐户(主体),并选择delegate。委托给任何服务时,请信任此用户。
3
运行以下命令 create the keytab for the host verticanode01.dc.com node/host:
$ ktpass -out ./host.verticanode01.dc.com.keytab -princ host/verticanode01.dc.com@DC.COM -mapuser verticanode01
-mapop set -pass secret -ptype KRB5_NT_SRV_HST
4
运行以下命令为vertica服务创建keytab:
$ ktpass -out ./vertica.verticanode01dc.com.keytab -princ vertica/verticanode01.dc.com@DC.COM -mapuser vertica
-mapop set -pass secret -ptype KRB5_NT_PRINCIPAL
5
运行以下命令来验证服务主体名称是否正确映射。您必须为集群中的每个节点运行以下命令:
$ setspn -L vertica
Registered ServicePrincipalNamefor CN=vertica,CN=Users,DC=dc,DC=com
vertica/verticanode01.dc.com
$ setspn -L verticanode01
Registered ServicePrincipalNamefor CN=verticanode01,CN=Users,DC=dc,DC=com
host/verticanode01.dc.com
6
将上面创建的keytabs, vertica.verticanode01.dc.com.keytab和host.verticanode01.dcc.com.keytab复制到Linux主机verticanode01.dc.com。
7
将keytab文件合并到一个单独的keytab中:
[release@vertica krbTest]$ /usr/kerberos/sbin/ktutil
ktutil: rkt host.verticanode01.dc.com.keytab
ktutil: rkt vertica.verticanode01.dc.com.keytab
ktutil: list
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
1 3 host/verticanode01.dc.com@DC.COM
2 16 vertica/verticanode01.dc.com@DC.COM
ktutil: wkt verticanode01.dc.com.keytab
ktutil: exit
这将创建一个包含用于身份验证的服务器主体的keytab文件。
8
将新的keytab文件复制到目录目录中。例如:
$ cp verticanode01.dc.com.keytab /home/dbadmin/VMart/v_vmart_nodennnn_catalog
9
测试keytab文件检索票据的能力,以确保它从Vertica节点工作:
$ kinit vertica/verticanode01.dc.com -k -t verticanode01.dc.com.keytab
$ klist
Ticket cache: KFILE:/tmp/krb_ccache_1003
Default principal: vertica/verticanode01.dc.com@DC.COM
Valid starting Expires Service principal
04/08/2017 13:35:25 04/08/2017 23:35:25 krbtgt/DC.COM@DC.COM
renew until 04/15/2017 14:35:25
10
设置正确的权限和所有权的keytab文件:
$ chmod 600 verticanode01.dc.com.keytab
$ chown dbadmin:verticadba verticanode01.dc.com.keytab
11
使用ALTER数据库设置以下Kerberos配置参数,向Vertica提供有关Kerberos主体的信息:
KerberosKeytabFile=<CATALOGDIR>/verticanode01.dc.com.keytab
KerberosRealm=DC.COM
KerberosServiceName=vertica
KerberosTicketDuration = 0
KerberosHostname=verticanode01.dc.com
12
重新启动Vertica服务器。
13
按照以下步骤测试Kerberos设置,以确保所有客户端都使用gss身份验证方法。
From Vertica:
=> CREATE USER windowsuser1;
CREATE USER
=> CREATE AUTHENTICATION v_kerberos method 'gss' host '0.0.0.0/0';
CREATE AUTHENTICATION
=> ALTER AUTHENTICATION v_kerberos enable;
ALTER AUTHENTICATION
=> GRANT AUTHENTICATION v_kerberos to windowsuser1;
GRANT AUTHENTICATION
From the operating system command line:
$ kinit windowsuser1
$ vsql -U windowsuser1 -k vertica -K verticanode01.dc.com -h verticanode01.dc.com -c "select client_authentication_name,
authentication_method from sessions;"
client_authentication_name | authentication_method--
----------------------------+-----------------------
v_kerberos | GSS-Kerberos
(1 row)
14
运行KERBEROS_CONFIG_CHECK()来验证Kerberos配置。KERBEROS_CONFIG_CHECK()验证以下内容:
- kinit和kb5.conf文件的存在。
- 是否存在并设置了keytab文件
- 在数据库中设置的Kerberos配置参数:
KerberosServiceName
KerberosHostname
KerberosRealm
Vertica Principal - Kerberos可以读取Vertica keys
- Kerberos可以获得Vertica主体的票据
- Vertica可以用kinit初始化keys