治理与运维
访问控制
开通人员、编入用户组、控制他们可以运行哪些模型,并以只读方式共享数据——这些都在数据库层面强制执行,而不只是在界面上藏起来。
打开 管理 → IAM (仅超级管理员可见)。这里的一切都由数据库的行级安全策略强制执行,这也是它靠得住的原因:智能体、API 调用和界面撞上的是同一套规则,因此没有哪条路径能悄悄绕过它们。
六个页签
| Tab | 在那里能做什么 |
|---|---|
| 用户 | 邀请、创建、封禁、删除;授予 / 撤销超级管理员;管理用户组成员 |
| 用户组 | 创建、重命名、删除用户组并管理成员 |
| 访问控制 | 模型规则与资源授权 |
| 预算 | 按用户组的消费上限——参见 预算 |
| 设置 | 公开注册开关、默认模型访问策略(允许还是拒绝)、追踪保留期,以及当前的超级管理员列表 |
| SSO | SAML 身份提供商配置 |
角色
只有两种: 超级管理员 和其他所有人。由 ADMIN_EMAIL 指定的账号是永久的引导超级管理员——即便它的记录被删掉,角色也仍然保留,所以你不会把自己锁在外面。超级管理员可以提升或降级其他人。
注意
用户
添加人员有两种方式:
- 邮件邀请 ——由对方自己设密码。推荐这种;任何凭据都不经你的手。
- 手动创建并给临时密码 ——适用于没配邮件发送,或者你在批量开通的场景。记得让他们改掉。
用户可以被封禁(禁止登录,但内容保留)或删除。有人离职时先封禁——删除不可撤销。
用户组
一组命名的用户。模型规则和资源授权都挂在用户组上,于是入职变成一句「加入工程组」,而不是十几条单独授权——离职也变成一次移除。
模型规则
控制某个人可以运行哪些模型。「没有规则」意味着什么,由实例自己决定—— 设置 → 默认模型访问策略:
| 情形 | 默认允许(默认设置) | 默认拒绝 |
|---|---|---|
| 该用户没有规则,所属用户组也没有规则 | 不受限制——所有模型可用 | 一个模型都不能用,除非有规则把它列入允许清单 |
| 有规则适用(自己的或用户组的) | 可用范围 = 这些规则的并集 | 可用范围 = 这些规则的并集(与左侧相同) |
| 超级管理员 | 规则对他们与对其他人一样生效 | 完全绕过——上锁的管理员不能被自己锁在外面 |
规则为 openai + * | 该提供商的所有模型 | 该提供商的所有模型 |
规则为 openrouter + openai/* | 前缀匹配——仅限这些模型 | 前缀匹配——仅限这些模型 |
切到「拒绝」可以分步上线
为什么这样设计
强制执行发生在服务端每次对话请求分发的那一刻,因此覆盖实验场、已保存的智能体、集群节点、API 运行——以及 公开嵌入——它们为匿名访客执行所有者保存的模型,每次请求都会按所有者的生效规则校验。选择器也会过滤到允许的模型,但那只是便利——真正起作用的检查发生在请求上。不被允许的模型会返回明确错误,而不是不知所以地失败。
资源共享
把某个资源的 只读 访问权授予某个用户或用户组,位置在 管理 → IAM → 访问控制。共有十种资源类型可授权,由数据库约束强制执行:
| 类型 | 被授权者获得什么 |
|---|---|
| 📚 知识库 | 他们的智能体可以检索它 |
| 🗄 SQL 数据表 | 可查询,受行筛选与列遮蔽约束 |
| 🔑 密钥 | 可以引用使用;取值从不显示 |
| 📊 BI 仪表板 | 可查看,受行筛选与列遮蔽约束 |
| 🧮 语义模型 | 它的度量与维度可以被提问 |
| 🗂 数据目录数据源 | 它抓取到的表与画像可以浏览 |
| 🤖 大模型密钥 / ☁️ 大模型凭据 | 调用计入所有者的密钥账单 |
| 🏢 数据库 / 数据仓库连接 | 可查询——见下文 |
| 🔌 应用数据源 | 可同步——见下文 |
接收方会看到一个 已共享 徽标;编辑和删除控件会被隐藏,而且无论如何写操作都会被数据库拦下。
由于大多数授权是由行级安全策略强制执行的,智能体工具会自动继承它们——一张被共享的表,该用户的智能体无需额外配置就能查询。
收窄授权:行筛选与列遮蔽
共享一个数据集或仪表板,不一定意味着把它全部共享出去。可以给以下两种类型的授权附加两项可选限制: SQL 数据表 或 BI 仪表板 ——它们是唯二会输出数据行的类型。这两项限制对其余八种不适用,平台在那里也拒绝保存它们。
| 限制项 | 整理 | 对被授权者的影响 |
|---|---|---|
| 行筛选 | 一个列名和一组取值 | 他们只能看到该列取值命中其中之一的那些行 |
| 列遮蔽 | 一组列名 | 这些列在服务端被移除——既不在列清单里,也不在任何数据行里 |
某个区域负责人被授予销售表,行筛选设为 region ∈ (EMEA) ,列遮蔽设为 salary ,那么他可以自由查询这张表,但只看得到 EMEA 的行,任何回答里都不会出现薪酬列。
两者都在服务端、在数据离开之前生效——对已保存的仪表板快照、对实时数仓查询、对智能体 SQL 工具读到的行一视同仁。不存在只对其中一条生效的路径。
授权只会叠加,永不相减
被遮蔽的列同时也不可用于筛选
无法校验的限制返回空
聚合类组件对受筛选的被授权者会显示为空
SELECT product, sum(revenue) FROM sales GROUP BY product 的组件,输出里没有 region 这一列,所以被筛选到 region ∈ (EMEA) 的被授权者看到的是一个空组件,而不是一个无视他筛选条件的全局合计。解决办法是把筛选列投影出来——按 region, product 分组——这样行才能被校验。空组件说明限制在起作用,不是查询坏了。共享连接以其所有者身份运行
连接是行级规则的例外,因为那些记录里带着加密的 凭据。我们刻意 否 设置任何把访问权授予接收方的行级策略——那会让被授权者用自己的令牌直接从 API 取到密文。取而代之的是,授权在服务端解析,记录以服务角色加载,因此被授权者获得的是连接的 使用权 ,而永远拿不到连接本身。 {{secret:NAME}} 引用同样按所有者身份解析,绝不会用被授权者自己的密钥库。
共享的 应用数据源 以所有者身份同步,写入所有者的数据集——所以被授权者重跑一次过期的同步,刷新的是真实数据集,而不是在自己账号下另建一份平行副本。共享数据源让人能维护它;若还要让对方读取同步出来的数据,那些数据集也要一并共享。每次调用(包括定时运行)都会重新解析授权,因此撤销在下次使用时即生效。 完整说明见「数据源」.
注册策略与 SSO
- 仅限邀请
- 关掉公开注册后,数据库本身就会拒绝那些既非受邀、也非管理员创建的新账号。这是在触发器层面强制执行的,所以 OAuth 注册也一并覆盖。
- SSO
- 接入 SAML 身份提供商,让大家用企业目录登录。可以设为强制路径。
实操示例——为一个数据分析团队开通
- 1
用户组 → 新建用户组
命名为analytics。用户组就是你避免逐个人授权的手段。 - 2
用户 → 添加用户 → 邮件邀请
由他们自己设密码,任何凭据都不经你的手。团队其他人重复一遍,然后在各自那一行把他们加入 analytics。 - 3
访问控制 → 模型规则 → 主体:用户组 analytics
添加openai+gpt-4o-mini和openai+gpt-4o。该团队现在被限制在这两个模型内;组外的人除非另有规则适用,否则仍不受限制。 - 4
访问控制 → 资源授权
授权analytics读取权限,授予revenue数据表以及Finance policies知识库。他们的智能体现在无需额外配置就能查询这两者。 - 5
预算 → 新建上限,作用范围为用户组 analytics
在发放访问权之前就设好每月美元上限,而不是等第一次被账单惊到之后。 - 6
设置 → 关闭公开注册
在你把 URL 发出去之前就做这件事。邀请和管理员创建用户仍然照常可用。
一个稳妥的推进顺序
- 以此身份登录:
ADMIN_EMAIL登录,确认你能看到 IAM 页面。 - 按人们实际的协作方式建用户组,而不是照组织架构图。
- 分享 URL 之前先关掉公开注册。
- 在用户组上设模型规则——先宽松,再依据分析中心的数据收紧。
- 把团队需要读取的数据集合共享出去,而不是复制一份给他们。
- 把规则与 预算上限搭配使用:规则决定 能用什么,预算决定 能用多少.