【问题标题】:MySQL/MariaDB Remote Access over NodeJS in Docker StackMySQL/MariaDB 在 Docker Stack 中通过 NodeJS 进行远程访问
【发布时间】:2020-09-03 09:43:28
【问题描述】:

我已经构建了一个运行多个服务的 Docker 堆栈: 重要的: - 数据库(MariaDB) - API (NodeJS)

数据库用户初始化如下:

CREATE USER 'remote'@'%' IDENTIFIED BY '#####';
GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'remote'@'%';
FLUSH PRIVILEGES;

我正在我的 Typescript 中建立 MySQL 连接,如下所示:

import ENV from "dotenv";
...
private connection = MySql.createConnection({
    host: process.env.DATABASESERVER,
    user: SecretStorage.getSecret('api_sql_user'),
    password: SecretStorage.getSecret('api_sql_pass'),
    database: process.env.DATABASE,
    multipleStatements: true //TODO: Muss ausgeschalten werden
});

使用

const fs = require('fs');
export class SecretStorage{
    public static getSecret(secretID:string):string{
        return fs.readFileSync("/run/secrets/" + secretID);
    }
}

export DATABASE=mydatabase
export DATABASESERVER=db

当我尝试通过 NodeJS 进行一些操作时,我得到了

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'remote'@'10.0.35.4' (using password: YES)

但是,当我执行到 docker 容器中时,安装一个 mysql 客户端并执行

mysql -p####### -uremote -hdb mydatabase

我可以成功连接到我的数据库(并进行操作)。

有人有想法吗? 谢谢! :) 保持健康!

【问题讨论】:

    标签: mysql node.js docker mariadb


    【解决方案1】:

    问题如下: 当我从文件中读取时,字符串的末尾也会包含一个换行符。

    所以我不得不像这样更改 getSecret 函数:

    const fs = require('fs');
    export class SecretStorage{
        public static getSecret(secretID:string,OneLine:boolean=false):string{
            if(OneLine){
                return fs.readFileSync("/run/secrets/" + secretID).replace(/(\r\n|\n|\r)/gm,"")
            } else{
                return fs.readFileSync("/run/secrets/" + secretID);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-22
      • 1970-01-01
      • 2018-09-19
      • 2017-10-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多