MySQL 接入 OpenID Connect:开源 OIDC 认证插件带来的变化

2026-09-02 33 预计阅读时间: 1 分钟
来源: percona.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

Percona Server for MySQL 现在提供了完全开源的 OpenID Connect(OIDC)认证插件。它让 MySQL 账户可以交给符合标准的身份提供商(IdP)认证,而不必依赖数据库本地保存的密码。

该能力从 Percona Server for MySQL 8.4.11-11 开始提供;9.7.2-2 也将包含该插件,但摘要发布时该版本尚未发布。对于已经使用企业统一身份平台的团队,这意味着数据库登录可以纳入现有的身份治理、令牌策略和账号生命周期管理。

从本地密码转向身份提供商

传统 MySQL 认证通常依赖这样的链路:用户在客户端输入用户名和密码,服务器使用本地账户信息完成校验。数据库需要保存或管理与密码相关的认证数据,账号的创建、禁用和权限回收也往往需要单独维护。

OIDC 认证改变了认证边界:

  • MySQL 账户仍然负责数据库授权,例如库、表和操作权限。
  • IdP 负责确认用户身份以及令牌是否有效。
  • 数据库不再必须依赖本地密码作为用户登录凭据。
  • 企业可以继续使用现有的单点登录、多因素认证和集中式账号禁用流程。

这里需要区分“认证”和“授权”。OIDC 解决的是“你是谁”,并不会自动决定你能访问哪些表。MySQL 中的账户、角色和权限仍然需要设计和维护。

完全开源意味着什么

认证插件位于数据库服务器的关键路径上。对安全团队来说,插件是否能够审计、构建和持续维护,通常和功能本身同样重要。完全开源可以带来更清晰的供应链审查边界,也便于团队检查版本、依赖和部署方式。

不过,开源并不等于开箱即用。生产环境仍需要确认以下事项:

  • 当前 Percona Server 版本是否已经包含该插件。
  • 使用的 IdP 是否符合所需的 OIDC 标准能力。
  • 客户端连接方式是否支持插件要求的认证交互。
  • TLS、令牌有效期、时钟同步和密钥轮换是否正确配置。
  • IdP 用户或声明如何映射到 MySQL 账户和角色。

摘要没有给出插件名称、具体安装包路径或完整配置参数,因此下面的配置采用“可改造示例”形式。实际部署前,应以对应版本的 Percona 文档和插件说明为准。

一个可改造的部署示例

假设环境中有一个 OIDC IdP,服务地址为 https://idp.example.com,数据库服务器为 mysql-db-01.example.com。可以先用环境变量集中保存部署参数,避免把客户端标识和端点散落在脚本中:

export OIDC_ISSUER="https://idp.example.com"
export OIDC_CLIENT_ID="mysql-prod-client"
export OIDC_AUDIENCE="mysql"
export MYSQL_HOST="mysql-db-01.example.com"
export MYSQL_PORT="3306"

# 仅用于确认目标版本;生产环境中请固定并审查具体版本。
percona-server-mysql --version

# 检查服务器是否能解析并访问 IdP 的 OIDC 元数据端点。
curl --fail --silent --show-error \
  "${OIDC_ISSUER}/.well-known/openid-configuration" \
  | jq '{issuer, authorization_endpoint, token_endpoint, jwks_uri}'

服务器端的配置名称会取决于 Percona 提供的插件实现。可以按下面的结构准备一份部署清单,再将字段映射到实际配置参数:

# oidc-mysql-auth.yaml
# 这是部署参数模板,不是特定版本的官方配置文件。
version: 1
identity_provider:
  issuer: https://idp.example.com
  audience: mysql
  client_id: mysql-prod-client
  scopes:
    - openid
    - profile
    - email
security:
  require_tls: true
  verify_issuer: true
  verify_audience: true
  clock_skew_seconds: 60
mysql_mapping:
  claim: preferred_username
  default_role: app_readonly

完成插件安装和服务器配置后,可以为需要 OIDC 登录的用户创建或调整 MySQL 账户。下面的 SQL 同样表达的是目标模型;具体认证插件名和 CREATE USER 语法必须替换为当前版本文档中的实际值:

-- 示例:将 IdP 中的身份映射到 MySQL 账户。
-- oidc_auth_plugin 仅为占位名称,请替换为实际插件名。
CREATE USER 'alice@example.com'@'%'
  IDENTIFIED WITH oidc_auth_plugin;

GRANT SELECT ON reporting.* TO 'alice@example.com'@'%';
GRANT 'app_readonly' TO 'alice@example.com'@'%';

验证时建议使用单独的测试账户,而不是直接修改管理员账户。测试应覆盖登录成功、令牌过期、错误的签发者、错误的受众、IdP 用户禁用以及数据库权限不足等场景。任何一个场景失败,都要明确它属于“身份认证失败”还是“MySQL 授权失败”。

迁移时要留意的边界

OIDC 适合统一用户身份,但并不适合替代所有数据库认证方式。应用程序使用的长期连接、备份任务和自动化作业,往往需要专门评估令牌获取、续期和故障恢复机制。不能因为人工登录已经接入 SSO,就默认所有机器账户都适合采用同一种方式。

迁移可以按以下顺序进行:

  1. 先在非生产环境固定 Percona Server 版本,并确认插件实际可用。
  2. 使用一个低权限测试账户验证 IdP、TLS 和客户端交互。
  3. 明确 IdP 声明到 MySQL 用户、角色的映射规则。
  4. 记录 IdP 不可用、令牌过期和密钥轮换时的故障表现。
  5. 为管理员保留经过审查的应急访问路径,并对其使用进行审计。
  6. 逐步迁移人工用户,最后再评估应用和自动化账户。

结语

Percona Server for MySQL 的完全开源 OIDC 认证插件,把 MySQL 登录纳入标准化身份体系,同时保留 MySQL 原有的权限模型。它最适合已经部署企业 IdP、希望统一单点登录和账号生命周期管理的团队。

采用之前,重点不是只检查“能不能登录”,而是验证完整链路:插件版本、IdP 兼容性、令牌校验、用户映射、权限回收、故障恢复和应急访问。把认证交给 IdP 后,数据库授权和运维责任仍然需要由数据库团队明确承担。


相关推荐