You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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认证:

  1. 修改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>
  1. 创建users.properties文件,格式为:
admin:admin123,admin
testuser:test123,user
  1. 重启Phoenix Query Server后,客户端连接时直接携带用户名密码即可。

内容的提问来源于stack exchange,提问作者Nguyễn Hoàng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:32:52