MySQL社区版需8.0.28+且启用authentication_ldap_sasl插件才支持LDAP认证,仅限SASL绑定;须检查插件状态、系统OpenLDAP/SASL库配置、DN格式正确性,并手动GRANT权限。

MySQL 社区版不支持完整的 LDAP 统一身份认证,必须用企业版或 MySQL 8.0.28+ 社区版(需确认是否启用 authentication_ldap_sasl 插件),且仅限 SASL 绑定方式——简单 bind、匿名绑定、LDAPS 均不被原生支持。
确认插件是否存在且可加载
社区版默认不含 authentication_ldap_sasl.so,企业版才自带。别在 INSTALL PLUGIN 失败后反复重试,先查真实状态:
- 运行
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'authentication_ldap_sasl';—— 若无返回或状态非ACTIVE,说明插件未就位 - 检查文件是否存在:
ls /usr/lib/mysql/plugin/authentication_ldap_sasl.so(路径依安装方式而异,RPM 包通常在/usr/lib64/mysql/plugin/) - 若文件存在但未激活,必须在启动时加参数:
--plugin-load-add=authentication_ldap_sasl.so;仅靠INSTALL PLUGIN无法持久化,重启即失效
配置 my.cnf 并验证 LDAP 连通性
authentication_ldap_sasl 不读取 ldap_server_host 这类变量,它只依赖系统级 OpenLDAP 配置(/etc/openldap/ldap.conf)和 SASL 机制。常见错误是以为改 MySQL 变量就能连上 LDAP:
- 确保
openldap-clients和cyrus-sasl-plain(或cyrus-sasl-gssapi)已安装,否则插件加载失败,错误类似Plugin 'authentication_ldap_sasl' is not loaded - 在
/etc/openldap/ldap.conf中设置:HOST ldap.example.com、PORT 389、TLS_CACERT /etc/openldap/certs/ca.crt(如需 TLS) - 用
ldapsearch -x -H ldap://ldap.example.com -b "dc=example,dc=com" "(uid=testuser)"手动验证可达性与 DN 结构,避免 MySQL 报错LDAP search failed却不知是网络还是 DN 写错
创建用户时 AS 子句必须写对 DN 格式
用户创建语句中的 AS 'xxx' 不是密码,而是 LDAP 中该用户的完整可识别名(DN),MySQL 会拿它去 SASL bind。写错格式会导致 Access denied for user,但日志里不会明说哪部分错了:
解析 MySQL 8.0 的 DDL 脚本,并将表结构导出为 Excel 格式。适用于用户需将 MySQL 的 `CREATE TABLE` 语句转换为结构化的 Excel 文件场景,导出内容包含字段名、数据类型、长度及精度等信息。支持多张表的批量处理,每张表对应 Excel 中的一个独立工作表。适用于数据库文档编写、数据字典生成及模式分析等任务。
- AD 环境常用 UPN:
CREATE USER 'alice'@'%' IDENTIFIED WITH authentication_ldap_sasl AS 'alice@example.com'; - OpenLDAP 环境常用 DN:
CREATE USER 'bob'@'%' IDENTIFIED WITH authentication_ldap_sasl AS 'uid=bob,ou=people,dc=example,dc=com'; - 不能省略引号,不能混用单双引号;
AS后面的字符串必须和ldapsearch实际返回的dn:完全一致(区分大小写、空格) - 不要试图在
AS里塞密码或过滤条件——那是authentication_ldap_simple的用法,而它不支持动态用户名映射
权限仍需本地 GRANT,LDAP 不同步组角色
LDAP 只管“你是谁”,不管“你能干啥”。即使你的 LDAP 用户属于 mysql_admins 组,MySQL 也不会自动赋予 DBA 权限:
- 必须手动执行
GRANT ALL ON *.* TO 'alice'@'%';,权限存于mysql.user表,和认证解耦 - 若想按 LDAP 组映射权限,得靠外部工具(如 Orchestrator + 反向代理 +
X-Forwarded-User)或自研中间层,MySQL 原生不支持ldap_group_search_attr自动授权 - 最易忽略的一点:用户连接成功但执行 SQL 报
Access denied,大概率是忘了GRANT,不是认证失败
真正卡住的地方往往不在 MySQL 配置,而在系统级 OpenLDAP/SASL 库版本兼容性、SELinux 对 socket 的拦截、或防火墙只放行了 636 却没开 389——这些比写 SQL 语句更难排查。










