HugeGraph 内置用户权限与扩展权限配置及使用
概述
HugeGraph 内置 StandardAuthenticator,支持多用户认证和基于“用户、用户组、操作、资源”的权限控制。
初始化会创建超级管理员 admin。管理员可创建用户、用户组及资源,并分配或撤销权限。用户通过所属组获得读、写、删除和执行等权限。
资源用 type、label 和 properties 描述可访问的数据。同一资源中的条件需同时满足,多个资源之间满足其一即可。
下面的关系表示用户仅可读取北京地区的数据。
配置用户认证
HugeGraph 目前默认未启用用户认证功能,需通过修改配置文件来启用该功能。
生产环境必须启用鉴权
HugeGraph 默认不启用用户认证。生产环境必须启用认证与授权、设置非默认强管理员密码、启用并维护 Server IP 白名单,并按最小权限为用户授权;不得将 Gremlin、Cypher 等查询接口直接暴露到公网。Server 标准配置会将鉴权代理记录写入
audit-*.log,部署时必须保留并限制这些日志的读取权限。auth.audit_log_rate 只限制每用户的日志输出速率,不是审计日志的启停开关。
StandardAuthenticator 支持多用户认证和细粒度权限控制。也可以实现 HugeAuthenticator 接口来接入已有的用户系统。
用户认证使用 HTTP Basic Authentication。Basic 后面的值是 用户名:密码 的 Base64 编码。使用 curl 时可直接通过
-u 传入凭据。
保护 Basic Authentication 凭据
Basic Authentication 只对 用户名:密码 做 Base64 编码,不会加密凭据。通过网络发送时必须使用 HTTPS;相关设置见 HTTPS 配置。
旧版本 JWT 风险
HugeGraph-Server 1.5.0 之前的版本在鉴权模式下存在 JWT 相关安全隐患。使用受影响版本时必须升级,或按该版本要求修改 JWT token 的 secretKey。
auth.token_secret 由认证数据图的配置读取。默认认证图名为 hugegraph,因此配置文件通常是 conf/graphs/hugegraph.properties;如果修改了 auth.graph_store,应改为对应图的 properties 文件。
核心配置默认会生成 32 个随机字节并以 Base64 编码,该默认值不会自行写回配置文件;重启后或多个 Server 节点之间无法依赖各自生成的默认值保持一致。若需要令已有 token 在重启后继续有效,或让多个节点验证同一 token,请为认证图显式配置同一个强随机密钥。
Server 将配置字符串按 UTF-8 编码后交给 JJWT 的 HS256 签名器,密钥至少需要 32 字节;这是字节长度要求,不代表任意 32 字符串都具有足够随机性。下面的命令在本机生成 32 个随机字节并以 Base64 编码。
可在本机终端生成密钥,再通过安全方式填入认证图配置;不要把实际密钥提交到代码库或公开日志。
token 的有效期由 auth.token_expire 决定,默认为 86400 秒。
auth.token_expire 和 auth.token_secret 都属于 auth.graph_store 指定的认证数据图配置;rest-server.properties 中的同名项不会覆盖认证图配置。
StandardAuthenticator 模式
StandardAuthenticator 在后端存储用户及密码哈希,并按用户角色控制访问。修改以下三处配置后,按启动顺序初始化并重启服务。
在 conf/gremlin-server.yaml 中配置认证器及 REST 配置路径。
在 conf/rest-server.properties 中配置认证器和权限数据存储图。
auth.graph_store 指定保存认证数据的图,名称必须与 conf/graphs/ 中的图配置对应。
在每个受保护图的配置文件 conf/graphs/<graph>.properties 中设置 gremlin.graph。
权限 API 的调用方式见 Authentication API 文档。
自定义用户认证系统
实现 org.apache.hugegraph.auth.HugeAuthenticator 接口,再将两处 authenticator 配置指向该实现,即可接入已有用户系统。
基于鉴权模式启动
下面的顺序适用于本地持久化后端,例如 RocksDB。先完成上面的配置,再初始化认证数据。
HStore/PD 部署的管理员由 PD 启动路径创建,须按该部署的配置设置 auth.admin_pa,不要照搬本地后端的交互式初始化流程。
停止 Server。
初始化认证数据。
首次创建
admin时,按提示输入强密码。已有图数据会保留;已有admin时不会重新设置其密码。 此命令补充后端与认证系统信息,不需要删除原有存储目录。启动并检查认证。
curl 会提示输入密码。正确密码应返回 HTTP 200;不带凭据或使用错误密码应返回 HTTP 401。 启动失败时先检查日志和认证图配置,不要通过清空数据来重试。
使用 Docker 时开启鉴权模式
新容器在 Docker run 和 Compose 中选择一种方式。已经运行过的容器直接阅读既有容器。
使用 Docker 部署时,官方镜像支持通过环境变量直接开启鉴权模式(适用于官方 Server 镜像 /hugegraph-server 布局)。
将占位符替换为实际镜像标签或 digest:
提示输入管理员密码后执行启动命令。为保障凭据安全,请避免将密码以明文形式提交到共享 Compose 文件中。 JWT 密钥仍按上面的配置持久保存到认证图配置;多节点必须使用同一个值。
Docker run
创建一个新容器,并仅向本机开放 REST 端口。
入口脚本完成认证配置和首次初始化后启动 Server。接着阅读检查认证结果。
Docker Compose
将下面的内容保存为 compose.yaml。必填变量缺失时,Compose 会报错,避免意外启动无认证服务。
在同一终端中启动服务。
以后重新创建容器前,需要重新设置这些变量。保留已有数据卷,并按部署要求持久保存配置。 接着阅读检查认证结果。
既有容器
此路径适用于原先未开启认证、使用本地持久化后端的官方 Server 容器。
先备份数据,并确认配置、后端数据及 conf-bak 均位于容器挂载的持久卷中。
官方镜像将 /hugegraph-server 声明为卷;自定义镜像应先检查挂载位置。
HStore/PD 或外部认证服务使用各自的管理员初始化流程。
停止原容器,使用同一镜像和数据卷打开临时维护容器。
原容器须保持停止,防止两个 JVM 同时打开本地数据库。
--entrypoint bash使维护容器只打开终端。在维护容器内修改配置并初始化。
enable-auth.sh首次运行时将原配置保存到conf-bak,然后修改默认hugegraph图和认证配置。 如果conf-bak已存在,脚本会跳过修改,须按StandardAuthenticator 模式检查三处配置。 使用其他认证图时也应手动配置对应文件。 按上面的配置将强随机 JWT 密钥写入认证图配置,再运行初始化命令。按提示输入管理员密码,确认初始化成功后退出。
在宿主机启动原容器。
不需要删除
docker/init_complete标记。后续PASSWORD环境变量的变化不会修改已存储的管理员密码。
检查认证结果
等待 Server 启动后,在宿主机执行以下请求验证。-u admin 会交互式提示输入密码:
未携带凭据的请求预期返回 401 Unauthorized,输入正确密码的请求返回 200 OK(若输入错误密码则同样返回 401)。
注:当前主线版本 URL 包含 /graphspaces/DEFAULT,1.7.0 等历史版本请省略 graphspace 前缀(直接使用 /graphs/hugegraph/...)。
若未提供凭据仍返回 200,说明鉴权未成功启用,请检查配置并重启 Server。