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,就默认所有机器账户都适合采用同一种方式。
迁移可以按以下顺序进行:
- 先在非生产环境固定 Percona Server 版本,并确认插件实际可用。
- 使用一个低权限测试账户验证 IdP、TLS 和客户端交互。
- 明确 IdP 声明到 MySQL 用户、角色的映射规则。
- 记录 IdP 不可用、令牌过期和密钥轮换时的故障表现。
- 为管理员保留经过审查的应急访问路径,并对其使用进行审计。
- 逐步迁移人工用户,最后再评估应用和自动化账户。
结语
Percona Server for MySQL 的完全开源 OIDC 认证插件,把 MySQL 登录纳入标准化身份体系,同时保留 MySQL 原有的权限模型。它最适合已经部署企业 IdP、希望统一单点登录和账号生命周期管理的团队。
采用之前,重点不是只检查“能不能登录”,而是验证完整链路:插件版本、IdP 兼容性、令牌校验、用户映射、权限回收、故障恢复和应急访问。把认证交给 IdP 后,数据库授权和运维责任仍然需要由数据库团队明确承担。