Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HikawaRin/7dcd7cf58de6ddd08a24290539580679 to your computer and use it in GitHub Desktop.
Save HikawaRin/7dcd7cf58de6ddd08a24290539580679 to your computer and use it in GitHub Desktop.
TiDB Hackathon 2022 RFC

Ti Ticket

(完整版本, 可进入初赛评分)

中杯 大杯 超大杯 Team

项目介绍

为 TiDB 实现一个"售票处", 提供数据库账号自助服务。

  • 为普通用户提供账号注册及提权申请功能, 用户通过 SSO 授权自动在 TiDB 中注册临时账号, 用户可通过本服务提交权限申请待管理员审核后获得相应权限。
  • 为管理员提供用户权限管理API, 简化提权步骤。
  • 周期性的更新临时用户密码, 定时删除不活跃用户, 增强数据库的安全性。

背景&动机

基于脑暴会上东旭的 SSO 实现 TiDB 登录权限校验的 idea 发散而来。 目前 TiDB 缺少用户权限管理功能, 管理员需要通过手动操作数据库为每个用户创建账户并赋予权限, 工作量极大。 其中运维账户具有持续时间短, 短查询多, 所需权限不固定等特点, 专门维护一批运维账户既浪费存储空间又会增加安全风险, 同时运维团队的人员流动性也较大, 这也增加了账户泄露的可能。 让运维人员自行注册临时账户并申请所需权限, 临时用户定期进行清理可以有效解决上述痛点但会显著加重管理员的工作负担也增大了管理员账户泄露的风险。

项目设计

Ti Ticket 基于 golang 进行实现, 在启动时将 TiDB root 账户密码作为参数读入, 后续无需显式输入密码。为了降低使用成本, Ti Ticket 仅要求用户端基于可用的浏览器及网络连接, 降低用户上手成本。 Ti Ticket 提供 Restful 的 API 接口, 用户首先登录获取 Auth Token, 为了降低实现难度临时采用直接获取用户密码的方式, 返回的密码有效时间与 Token 有效期相同, 后期强制用户在页面进行 sql 查询, 避免直接传输密码。 service design

基础功能(中杯)

一个 auth service, 实现 TiDB 的账户自助服务, 通过设置定时器定时刷新临时用户的数据库密码并提供下述功能接口:

  • User
    • GET /login: 访问 Github 的认证接口第三方 SSO 登录, 登录成功后自动创建临时账户与随机密码并返回一个 Auth Token
    • GET /get_passwd: 获取当前用户对应的数据库密码
  • Admin
    • POST /admin: 仅支持管理员账户密码登录
    • POST /assign: 为用户添加权限
    • POST /delete: 删除用户

后续功能(不一定做的完 先挖个坑 咕)

  • 增加用户申请权限及管理员审核权限功能, 减轻管理员手动设置权限的负担(大杯)
  • 为上述功能实现一个前端 Web UI, 增加 proxysql 代理 sql query 并将单一 Auth Token 更新为常用的 Auth+Refresh Token 进一步提高安全性彻底杜绝密码泄露的可能。(超大杯)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment