Skip to content

PERSONAL_ACCESS_TOKENS 个人访问令牌表 ​

Personal Access Token(PAT)是用户手动创建的长期访问凭证,用于脚本、CLI、CI/CD 等无法交互式登录的场景。用户拿到 PAT 后,将其作为 Bearer token 携带在请求中,或者URL参数 access_token传递,即可代替用户名密码完成鉴权。

位置 ​

模型路径:/sysdata/data/tables/sec/PERSONAL_ACCESS_TOKENS.tbl

物理表名:SZSYS_5_PERSONAL_ACCESS_TOKENS

表结构 ​

字段名字段类型字段描述
IDVARCHAR(128)主键,令牌原文单向加密后的值,不可反推。鉴权时对请求携带的令牌做同样的加密后以此值查表
USER_IDVARCHAR(128)所属用户 ID
USER_DIRECTORYVARCHAR(64)用户目录,sys 系统用户、external 外部用户
NAMEVARCHAR(256)用户给 token 取的备注名,如 "My CI Script"
DESCVARCHAR(1024)用途描述,如 "用于 Jenkins 自动部署流水线"
ENABLEDNUMBER(1)是否启用。1 有效,0 已吊销。吊销时清除关联 session
EXPIRE_TIMETIMESTAMP过期时间,由用户指定(按天/月或永不过期)
CREATE_TIMETIMESTAMP创建时间
TOKEN_MASKVARCHAR(64)脱敏后的令牌明文,形如 succ-abcd****abdc:保留明文前 9 位和末 4 位,中间固定 4 个 *。只在签发时写入一次,供用户辨认列表里哪条对应手里的令牌
LAST_ACCESS_TIMETIMESTAMP最后一次以该令牌原文发起访问的时间,见使用注意里的记录规则
LAST_ACCESS_IPNUMBER(16)最后一次以该令牌原文发起访问的来源 IPv4 地址,整数格式存储;取不到地址时为 0

表索引 ​

类型名称字段列表是否唯一说明
主键PRIMARYID是令牌原文加密后的值作为主键,鉴权时直接主键 lookup

快速理解 ​

PAT 鉴权流程 ​

用户携带 PAT 请求资源时,系统按以下流程鉴权:

步骤阶段动作
1请求拦截识别 Authorization: Bearer succ-xxx 前缀
2凭证校验对令牌原文做单向加密,以此查 PERSONAL_ACCESS_TOKENS 确认令牌有效且未过期
3会话分配以 PAT 主键作为 session ID 创建 Session
4用户登录校验用户状态,创建 HTTP Session
5后续请求同一 rawToken 再次请求时,直接通过 session ID(即 PAT ID)查找已有会话

数据示例 ​

以下展示 PAT 的典型落表形态,ID / TOKEN_MASK 用可读占位表示。

IDUSER_IDUSER_DIRECTORYNAMEDESCENABLEDEXPIRE_TIMECREATE_TIMETOKEN_MASKLAST_ACCESS_TIMELAST_ACCESS_IP
succ-9f3c2a7e...adminsysMy CI Token用于 Jenkins 自动部署流水线12026-09-17 10:00:002026-06-17 10:00:00succ-9f3c****b7d12026-09-28 17:20:00192168007033
succ-21c9f7b...zhangsansys数据导出脚本每日凌晨导出报表数据02027-01-01 00:00:002026-01-01 00:00:00succ-4d81****0ea92026-03-02 08:15:00192168007033
succ-4bd0a83...lisiexternal旧脚本(空)1(空,永不过期)2025-11-01 09:00:00(空)(空)(空)
  • 第 1 行:admin 创建的 PAT,有效期 3 个月,最近一次带令牌访问来自内网 192.168.7.33。
  • 第 2 行:zhangsan 的 PAT 已被吊销(ENABLED = 0),即使未到过期时间也无法使用。
  • 第 3 行:未保存脱敏令牌且尚无访问记录的旧令牌,TOKEN_MASK / LAST_ACCESS_* 为空。
  • LAST_ACCESS_IP 以整数格式存储,上面的 192168007033 即 192.168.7.33。

使用注意 ​

  1. ID 是令牌原文单向加密后的值,不可反推。令牌原文仅在创建时返回一次,之后无法找回。
  2. ENABLED = 0 后鉴权立即失效,关联 session 被清除。
  3. session ID 为 PAT 主键,PAT 表自身承载 session 标识。
  4. 令牌原文以 succ- 为前缀,鉴权时靠前缀区分个人令牌和普通 access_token。
  5. TOKEN_MASK 保留明文的前 9 位(含 succ- 前缀)和后 4 位,中间固定 4 个 *,共 17 个字符。它只在签发时写入一次,之后不随任何操作更新,仅供人工辨认,不能用于鉴权。
  6. 旧令牌可能没有 TOKEN_MASK,界面显示「—」。由于系统不保存令牌原文,无法补生成脱敏值。
  7. LAST_ACCESS_* 通常在访问后约 20 秒更新,不是实时数据;短时间内多次访问只保留最近一次记录。
  8. LAST_ACCESS_* 只覆盖以令牌原文发起的请求(Authorization: Bearer succ-xxx 或 URL 参数 access_token)。令牌首次登录后改用 JSESSIONID cookie 续期的请求、以及命中登录跳过规则的 URI 都不记录,所以它可能明显早于用户印象里的「最近活动时间」。
  9. 地址取不到或不是 IPv4(例如 IPv6 客户端)时 LAST_ACCESS_IP 记 0,界面显示「—」。
微信公众号微信公众号:山川软件