背景
在 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';
参考文献
- ruiquelhas@stack overflow 在问题《Connection with mysql on remote server via UNIX socket》下的回答(https://stackoverflow.com/a/60395955/10838083)
- 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