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

如何在Hasura中自定义GraphQL端点为不同客户提供独立Schema?

实现Hasura多客户端点与Schema隔离

是的,完全可以实现给不同客户分配独立的GraphQL端点和对应Schema,解决统一端点的混乱和数据可见性问题,结合你已有的dc-agents自定义连接器,具体方案如下:

1. 利用Hasura的多GraphQL API功能(推荐)

Hasura Enterprise Edition(或Hasura Cloud付费方案)支持创建多个独立的GraphQL API实例,每个实例可实现:

  • 配置专属端点路径(如/graphql/customer1、/graphql/customer2)
  • 关联独立Schema(包括通过dc-agents接入的自定义数据源)
  • 设置单独的权限规则、GraphiQL访问权限

操作步骤:

  • 登录Hasura控制台,进入APIs页面,点击Create New API
  • 为每个客户的API设置唯一名称和GraphQL Path(比如customer1对应路径/graphql/customer1)
  • 为该API添加对应数据源:包括你用dc-agents创建的自定义连接器及所需数据库
  • 配置API专属Schema:仅暴露该客户需要的表、字段、自定义查询/突变,屏蔽无关数据
  • 配置GraphiQL权限:限制该API的GraphiQL界面仅对授权用户开放,且仅展示当前API的Schema

2. 反向代理+Hasura权限隔离(开源版替代方案)

若使用Hasura开源版,可通过反向代理(如Nginx)配合Hasura的行级权限、Schema权限实现:

  • 用Nginx配置不同路径转发至同一Hasura实例,同时携带不同的X-Hasura-Role或自定义请求头
  • 在Hasura中为每个客户创建专属角色,配置严格的Schema权限(仅允许访问该客户的表/字段)和行级权限(仅能访问自身数据)
  • 不同路径下,Nginx自动注入对应角色头,Hasura会根据角色返回匹配的Schema和数据
  • 配置GraphiQL:通过请求头切换角色,或为不同角色禁用GraphiQL访问

Nginx配置示例:

server {
    listen 80;
    server_name your-hasura-domain.com;

    location /graphql/customer1 {
        proxy_pass http://hasura-instance:8080/v1/graphql;
        proxy_set_header X-Hasura-Role customer1_role;
        proxy_set_header X-Hasura-User-Id customer1;
    }

    location /graphql/customer2 {
        proxy_pass http://hasura-instance:8080/v1/graphql;
        proxy_set_header X-Hasura-Role customer2_role;
        proxy_set_header X-Hasura-User-Id customer2;
    }
}

3. 结合dc-agents的注意事项

  • 为每个客户的API单独配置dc-agents连接器,确保每个连接器仅访问该客户对应的数据源
  • 在Hasura中为每个API的自定义数据源设置权限,避免跨客户数据访问
  • 测试每个端点的Schema:通过GraphiQL访问对应路径,确认仅展示该客户的Schema和数据

内容的提问来源于stack exchange,提问作者Chilarai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:52:44