You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Sequelize连接MariaDB时auth_gssapi_client认证失败求助

Express + Sequelize 数据库连接认证协议错误排查与解决

问题现象

  • 使用Sequelize连接MariaDB时,Express服务器启动失败,抛出认证协议不支持错误
  • 直接通过mariadb原生库配置连接时,数据库可正常连接
  • 通过.env+config.js+database.js的Sequelize配置方式启动后,8080端口无法访问,Postman请求被端口拒绝

报错信息

Unable to connect to the database: ConnectionError [SequelizeConnectionError]: (conn:3, no: 45025, SQLState: 08004) Client does not support authentication protocol 'auth_gssapi_client' requested by server.
    at ConnectionManager.connect (F:\Code\Web\apr-ts\backend\node_modules\sequelize\lib\dialects\mariadb\connection-manager.js:100:17)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async ConnectionManager._connect (F:\Code\Web\apr-ts\backend\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:222:24)
    at async F:\Code\Web\apr-ts\backend\node_modules\sequelize\lib\dialects\abstract\connection-manager.js:174:32 {
  parent: SqlError: (conn:3, no: 45025, SQLState: 08004) Client does not support authentication protocol 'auth_gssapi_client' requested by server.
      at module.exports.createFatalError (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\misc\errors.js:90:10)
      at Authentication.pluginHandler (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:274:20)
      at Authentication.dispatchAuthSwitchRequest (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:242:36)
      at Authentication.handshakeResult (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:62:14)
      at Authentication.onPacketReceive (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:40:17)
      at PacketInputStream.receivePacketBasic (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\io\packet-input-stream.js:85:9)
      at PacketInputStream.onData (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\io\packet-input-stream.js:135:20)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:559:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) {
    sqlMessage: "Client does not support authentication protocol 'auth_gssapi_client' requested by server.",
    sql: null,
    fatal: true,
    errno: 45025,
    sqlState: '08004',
    code: 'ER_AUTHENTICATION_PLUGIN_NOT_SUPPORTED'
  },
  original: SqlError: (conn:3, no: 45025, SQLState: 08004) Client does not support authentication protocol 'auth_gssapi_client' requested by server.
      at module.exports.createFatalError (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\misc\errors.js:90:10)
      at Authentication.pluginHandler (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:274:20)
      at Authentication.dispatchAuthSwitchRequest (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:242:36)
      at Authentication.handshakeResult (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:62:14)
      at Authentication.onPacketReceive (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\cmd\handshake\authentication.js:40:17)
      at PacketInputStream.receivePacketBasic (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\io\packet-input-stream.js:85:9)
      at PacketInputStream.onData (F:\Code\Web\apr-ts\backend\node_modules\mariadb\lib\io\packet-input-stream.js:135:20)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:559:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) {
    sqlMessage: "Client does not support authentication protocol 'auth_gssapi_client' requested by server.",
    sql: null,
    fatal: true,
    errno: 45025,
    sqlState: '08004',
    code: 'ER_AUTHENTICATION_PLUGIN_NOT_SUPPORTED'
  }
}

已尝试操作

  • 修改数据库用户认证插件:
ALTER USER 'your_username'@'your_host' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_password');
FLUSH PRIVILEGES;
  • 确认用户插件配置:
SELECT user, host, plugin FROM mysql.user WHERE user = 'your_username';
  • 验证原生mariadb库连接正常:
const mariadb = require('mariadb');

const pool = mariadb.createPool({
    host: 'your_host',
    user: 'your_username',
    password: 'your_password',
    database: 'your_database',
    connectionLimit: 5
});

async function connectDatabase() {
    let conn;
    try {
        conn = await pool.getConnection();
        console.log("Connected to the database!");
    } catch (err) {
        console.error("Unable to connect to the database:", err);
    } finally {
        if (conn) conn.release(); // release to the pool
    }
}

connectDatabase();

排查与解决建议

1. 强制Sequelize使用指定认证插件

在Sequelize连接配置中显式指定authPlugin,避免默认选择不兼容的认证协议:

const { Sequelize } = require('sequelize');
const config = require('./config');

const sequelize = new Sequelize(config.database, config.username, config.password, {
  host: config.host,
  dialect: 'mariadb',
  dialectOptions: {
    authPlugin: 'mysql_native_password' // 强制使用mysql_native_password认证
  }
});

2. 校验环境变量与配置传递

检查.env文件中的数据库参数是否与原生连接完全一致,避免大小写、空格或转义错误:

DB_HOST=your_host
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=your_database

确保config.js正确读取环境变量:

require('dotenv').config();

module.exports = {
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME
};

3. 检查依赖版本兼容性

Sequelize与mariadb驱动版本不匹配可能导致认证逻辑异常,尝试锁定兼容版本:

# 安装稳定兼容版本
npm install sequelize@^6 mariadb@^3

4. 确保服务器在数据库连接成功后启动

数据库连接失败会导致Express服务器无法正常初始化,添加连接校验逻辑:

// database.js中添加连接测试
async function initDatabase() {
  try {
    await sequelize.authenticate();
    console.log('数据库连接成功');
    // 连接成功后启动服务器
    require('./app').listen(8080, () => {
      console.log('服务器运行在8080端口');
    });
  } catch (error) {
    console.error('数据库连接失败:', error);
    process.exit(1); // 连接失败时退出进程,避免端口挂起
  }
}

initDatabase();

5. 确认数据库用户主机权限

若用户host配置为localhost无法连接,尝试改为允许所有主机访问(生产环境需限制IP):

ALTER USER 'your_username'@'%' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_password');
FLUSH PRIVILEGES;

内容的提问来源于stack exchange,提问作者luthfinzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:47:04