Node 中以“second all-powerful user”不使用密码连接本地 MariaDB 时,报 Access denied 处理

得配 socketPath

Posted by NeptLiang on April 19, 2024

背景

在 Node 中以“second all-powerful user”不使用密码连接本地 MariaDB 时,报 Access denied,但是在终端里使用对应用户可以直接登录

  • Node 中使用的是 mariadb
  • MariaDB 服务器上该用户的认证方式结合文档和 Arch Linux Wiki 的建议配置成了

      IDENTIFIED VIA mysql_native_password USING 'HASHOFPASSWORD' OR unix_socket
    

谷歌了好久,直到看到 ruiquelhas@stack overflow 在问题《Connection with mysql on remote server via UNIX socket》下的回答(https://stackoverflow.com/a/60395955/10838083)

才整明白原来还得配 socketPath,故在此记录下

解决办法

使用 unix_socket 连接时,可以在 createPool 时使用 socketPath[1]

const pool = mariadb.createPool({
  socketPath: '/path/to/your/unix/socket/file.sock'
  user: 'fake_user',
});

您需要设置的具体 socket 路径由服务器系统变量 socket 定义。如果您不知道它,可以从服务器检索。[2]

SHOW VARIABLES LIKE 'socket';

参考文献

  1. ruiquelhas@stack overflow 在问题《Connection with mysql on remote server via UNIX socket》下的回答(https://stackoverflow.com/a/60395955/10838083)
  2. npm mariadb Homepage README promise documentation 《Connecting to Local Databases》(https://github.com/mariadb-corporation/mariadb-connector-nodejs/blob/master/documentation/promise-api.md#connecting-to-local-databases)

//End of Article


公众号二维码