1. 页面概览

安全治理是 AIP 管理后台面向管理员的安全策略管理页,路由为 /admin/security。页面顶部安全概览卡片汇总敏感列、行级安全(RLS)、列级安全(CLS)、审计日志总数与 AI 护栏开关状态;下方两个 Tab 分别维护敏感列清单与 AI 护栏配置。

敏感列清单声明哪些表/列属于敏感数据及脱敏方式,是数据出口防护的依据;AI 护栏在查询进入链路时校验输入(敏感内容拦截、长度限制等),防止越权或注入。二者构成 AIP 查询链路的输入侧与输出侧防护。

一句话总结:安全治理把「敏感列声明 + AI 输入护栏」两项安全配置集中到一个页面,管理员可随时查看安全态势并调整防护策略。

2. 访问入口

2.1 路由与菜单

项目
路由 path/admin/security
路由 nameAdminSecurity
路由 title安全治理
requiresAuthtrue(父级 /admin 另有 requiresAdmin)
菜单位置AdminLayout 侧边栏菜单项「安全治理」
前端源码action/web/src/views/SecurityPage.vue
路由注册action/web/src/router/index.js

2.2 认证与权限

守卫校验 aip_is_admin='1',否则跳 /chat;请求走 action/web/src/api/aipClient.jsaip_token Bearer JWT),401 清 token 跳登录。

2.3 端口与 API 前缀

AIP 后端 18080,前缀 /aip-api(实际 /aip-api/v1/...,Vite 代理重写为 /api/v1)。

3. 界面布局

+------------------------------+
| 安全治理  [刷新]  [alert 提示] |
| 安全概览(card)              |
|   敏感列 | 行级安全(RLS) |     |
|   列级安全(CLS) | 审计日志总数 |
|   | AI 护栏(已开启/已关闭)   |
| Tab:敏感列 | AI 护栏          |
+------------------------------+
| 敏感列 Tab(card):          |
|   工具栏:[新建敏感列]        |
|   表格:表名|列名|敏感类型|脱敏方式|描述|操作
|   (行操作:编辑 | 删除)     |
| AI 护栏 Tab(card):         |
|   启用 AI 护栏 Switch +      |
|   最大输入长度(字符)        |
|   拦截关键词标签(只读)      |
|   + [保存护栏配置]            |
+------------------------------+

各板块职责:安全概览卡片展示 GET /security/overview 的数字统计(缺失自动 0 兜底);敏感列 Tab 做增删改查;AI 护栏 Tab 配置开关与最大输入长度,保存后即时生效。

4. 交互元素

控件位置含义与作用
刷新页头并行刷新概览、敏感列与护栏配置,加载中禁用并显示「加载中...」
新建敏感列 / 行内编辑、删除敏感列表格弹窗:表名*、列名* 必填;敏感类型下拉 PII/FINANCIAL/HEALTH/CREDENTIAL;脱敏方式下拉 全掩码/部分掩码/哈希/令牌化/置空(对应 full_mask/partial_mask/hash/tokenize/nullify);删除有 confirm 确认
启用 AI 护栏AI 护栏 TabSwitch 开关;关闭时最大输入长度输入框禁用
最大输入长度(字符)AI 护栏 Tabnumber 输入 min 1 max 100000 step 100,提示建议 1000~5000,超出该长度的输入将被拦截
保存护栏配置AI 护栏 Tab提交 {enabled, max_input_len}PUT /security/guardrails,保存中按钮显示「保存中...」并禁用

5. 后端关联

API 端点(读挂 protected 登录组、写挂 admin 管理组):

方法路径用途
GET/security/overview安全概览(sensitive_columns/rls_policies/cls_policies/audit_logs_total/ai_guardrail_enabled 等)
GET/security/sensitive-columns敏感列列表(data.sensitive_columns
POST / PUT / DELETE/security/sensitive-columns[/:id]敏感列增删改
GET/security/guardrails护栏配置(enabled/max_input_len/block_keywords)
PUT/security/guardrails更新护栏配置

5.1 关键机制

后端实现位于 action/products/aip/security/handler.go(双组注册)、service.go(护栏默认值/校验)、platform/model.SensitiveColumn

6. 权限与安全

7. 常见问题与排错

问题 1:安全概览数字全部为 0

原因GET /security/overview 失败(后端未就绪/401)或字段缺失,前端 num() 兜底 0。
处理:看 Network 确认概览请求返回;后端就绪后点「刷新」重拉。

问题 2:保存护栏提示「最大输入长度必须是正整数」

原因:长度输入被清空或为 0/负数。
处理:填写 1~100000 的正整数(建议 1000~5000)再保存。

问题 3:关闭 AI 护栏后长度输入框不可编辑

原因max_input_len 输入框 disabled 绑定 enabled=false。
处理:先打开开关再调整长度,或直接保存后重新进入页面。

问题 4:保存护栏成功但概览卡片仍显示「已关闭」

原因:概览 ai_guardrail_enabled 与表单 enabled 来自不同接口,概览未刷新。
处理:点「刷新」或重新进入页面,概览与表单会重新拉取。

8. 已知缺陷与边界

说明
脱敏方式仅登记敏感列只声明脱敏方式,页面不提供脱敏效果预览
RLS/CLS 只读统计概览只显示 RLS/CLS 数量,规则配置在「深度权限配置」页
拦截关键词只读block_keywords 仅以标签展示,本页不提供编辑
护栏保存即生效保存护栏无二次确认,误改会立即影响查询输入校验

注:概览接口失败时统计静默显示 0 误导(接口失败显示 0,可能与真实值不符)已于 2026-09-06 修复(失败显示「加载失败」占位)。