通过Knox实现Phoenix Query Server身份认证的指导请求
Phoenix Query Server 用户名密码认证配置方案(基于Knox或原生Jetty)
一、基于Knox的配置调整
你已经完成Knox部署,接下来只需针对性调整拓扑文件和Phoenix侧配置:
1. 修正Knox拓扑文件
在你的拓扑XML文件中,确保包含以下关键配置:
- 添加Phoenix服务映射:指向你的Phoenix Query Server 8765端口
<services> <service> <role>PHOENIX</role> <url>http://你的Phoenix服务器IP:8765</url> </service> </services>
- 启用Shiro用户名密码认证:在
<providers>块中加入认证规则,支持本地用户文件或LDAP
<providers> <provider> <role>authentication</role> <name>ShiroProvider</name> <enabled>true</enabled> <param> <name>sessionTimeout</name> <value>30</value> </param> <!-- 本地用户文件模式(测试用) --> <param> <name>main.iniRealm</name> <value>org.apache.shiro.realm.text.IniRealm</value> </param> <param> <name>main.iniRealm.config</name> <value>${gateway.home}/conf/users.ini</value> </param> <!-- 开启Basic认证 --> <param> <name>urls./**</name> <value>authcBasic</value> </param> </provider> </providers>
- 本地用户文件
users.ini格式示例:
[users] admin=admin123,admin testuser=test123,user
2. Phoenix侧信任Knox代理
修改Phoenix的hbase-site.xml,添加Knox服务器的代理信任配置,确保请求能正常转发:
<property> <name>hbase.security.authentication</name> <value>simple</value> </property> <property> <name>hbase.security.authorization</name> <value>true</value> </property> <property> <name>hbase.proxyuser.knox.hosts</name> <value>你的Knox服务器IP</value> </property> <property> <name>hbase.proxyuser.knox.groups</name> <value>*</value> </property>
修改完成后重启Phoenix Query Server和Knox服务。
3. 客户端验证
- 用curl测试认证:
curl -u admin:admin123 http://你的Knox服务器IP:8443/gateway/你的拓扑名称/sql?query=SELECT+1+FROM+SYSTEM.CATALOG
- Phoenix JDBC连接URL示例:
jdbc:phoenix:url=http://你的Knox服务器IP:8443/gateway/你的拓扑名称;authentication=BASIC;user=admin;password=admin123
二、无需Knox的原生认证方案
如果不想依赖Knox,可直接给Phoenix Query Server添加Jetty Basic认证:
- 修改Phoenix的
phoenix-query-server.xml,添加Jetty安全处理器:
<bean id="securityHandler" class="org.eclipse.jetty.security.ConstraintSecurityHandler"> <property name="authenticator"> <bean class="org.eclipse.jetty.security.authentication.BasicAuthenticator"/> </property> <property name="loginService"> <bean class="org.eclipse.jetty.security.HashLoginService"> <property name="name" value="Phoenix Realm"/> <property name="config" value="${phoenix.query.server.home}/conf/users.properties"/> </bean> </property> <property name="constraintMappings"> <list> <bean class="org.eclipse.jetty.security.ConstraintMapping"> <property name="constraint"> <bean class="org.eclipse.jetty.util.security.Constraint"> <property name="name" value="BASIC"/> <property name="roles" value="user,admin"/> <property name="authenticate" value="true"/> </bean> </property> <property name="pathSpec" value="/*"/> </bean> </list> </property> </bean>
- 创建
users.properties文件,格式为:
admin:admin123,admin testuser:test123,user
- 重启Phoenix Query Server后,客户端连接时直接携带用户名密码即可。
内容的提问来源于stack exchange,提问作者Nguyễn Hoàng
相关产品推荐
相关产品推荐

