首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker,node.js,mysql:未处理的拒绝SequelizeAccessDeniedError

Docker,node.js,mysql:未处理的拒绝SequelizeAccessDeniedError
EN

Stack Overflow用户
提问于 2022-11-29 15:30:37
回答 1查看 14关注 0票数 0

我试图修改一个项目,该项目由一个连接到mysql数据库的node.js应用程序组成。

这两个容器都启动了,但是节点容器总是得到一个"SequelizeAccessDeniedError“

代码语言:javascript
复制
> scrumboard-app@1.0.0 start
> node app.js

Use no environment variables
{
  username: 'scrumboard',
  password: 'scrumboard',
  database: 'scrumboard',
  host: 'mysql',
  dialect: 'mysql',
  port: 3306,
  operatorsAliases: false
}
(node:20) [SEQUELIZE0004] DeprecationWarning: A boolean value was passed to options.operatorsAliases. This is a no-op with v5 and should be removed.
(Use `node --trace-deprecation ...` to show where the warning was created)
server is running on port 3000
Unhandled rejection SequelizeAccessDeniedError: Access denied for user 'scrumboard'@'172.23.0.3' (using password: YES)
    at /scrumboard-app/node_modules/sequelize/lib/dialects/mysql/connection-manager.js:125:19
    at tryCatcher (/scrumboard-app/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/scrumboard-app/node_modules/bluebird/js/release/promise.js:547:31)
    at Promise._settlePromise (/scrumboard-app/node_modules/bluebird/js/release/promise.js:604:18)
    at Promise._settlePromise0 (/scrumboard-app/node_modules/bluebird/js/release/promise.js:649:10)
    at Promise._settlePromises (/scrumboard-app/node_modules/bluebird/js/release/promise.js:725:18)
    at _drainQueueStep (/scrumboard-app/node_modules/bluebird/js/release/async.js:93:12)
    at _drainQueue (/scrumboard-app/node_modules/bluebird/js/release/async.js:86:9)
    at Async._drainQueues (/scrumboard-app/node_modules/bluebird/js/release/async.js:102:5)
    at Async.drainQueues [as _onImmediate] (/scrumboard-app/node_modules/bluebird/js/release/async.js:15:14)
    at process.processImmediate (node:internal/timers:471:21)

a user is connected

mysql容器也是如此:

代码语言:javascript
复制
2022-11-29T15:11:59.491328Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2022-11-29T15:11:59.491368Z 0 [Note] IPv6 is available.
2022-11-29T15:11:59.491377Z 0 [Note]   - '::' resolves to '::';
2022-11-29T15:11:59.491389Z 0 [Note] Server socket created on IP: '::'.
2022-11-29T15:11:59.495079Z 0 [Warning] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
2022-11-29T15:11:59.499174Z 0 [Note] Event Scheduler: Loaded 0 events
2022-11-29T15:11:59.499449Z 0 [Note] mysqld: ready for connections.
Version: '5.7.40'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
2022-11-29T15:12:00.101178Z 2 [Note] Access denied for user 'scrumboard'@'172.23.0.3' (using password: YES)

所以看起来他们之间的沟通是有效的。

这是我的停靠-撰写文件:

代码语言:javascript
复制
version: '3.8'

services: 
  mysql:
    image: mysql:5.7
    restart: unless-stopped
    env_file: ./.env
    environment:
      - MYSQL_ROOT_PASSWORD=scrumboard
      - MYSQL_PASSWORD=scrumboard
      - MYSQL_DATABASE=scrumboard
      - MYSQL_USER=scrumboard
    ports:
      - 3306:3306
      # [HOST:]CONTAINER

    volumes:
      - db:/var/lib/mysql

  app:
    depends_on:
      - mysql
    build: ./scrumboard-app
    restart: unless-stopped
    env_file: ./.env
    ports:
     - 3000:3000
    stdin_open: true
    tty: true

volumes:
  db:

这是一个配置文件,它是由sequelize使用的:

代码语言:javascript
复制
  "development": {
    "username": "scrumboard",
    "password": "scrumboard",
    "database": "scrumboard",
    "host": "mysql",
    "dialect": "mysql",
    "port": 3306,
    "operatorsAliases": false
  }

这是建立到DB连接的代码:

代码语言:javascript
复制
const config = require(__dirname + '/../config/config.json')[env];

let sequelize;

 console.info('Use no environment variables');
 console.info(config);
 sequelize = new Sequelize(config.database, config.username, config.password, config);

我不知道这里出了什么问题,因为我三次检查了用户名、密码等。有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-29 15:40:50

我的猜测是,用户不允许从外部连接?

你能检查一下…的结果吗

代码语言:javascript
复制
SELECT user, host, account_locked, password_expired FROM user

您应该看到您的用户在那里,它不应该被锁定或过期。

此外,主机应该匹配IP 172.23.0.3或通配符适合IP。

要允许从任何地方连接到您的用户,您可以:

代码语言:javascript
复制
GRANT ALL PRIVILEGES
ON *.*
TO 'scrumboard'@'%';

请注意,此查询将对所有内容授予所有特权。这是好的,首先测试,所以我们可以排除您的连接,但适当的特权应在之后到位。

如果仍然无法连接,请检查是否可以直接从mysql容器内连接,如果可以,这至少意味着凭据是有效的。如果没有,您将需要尝试重置密码,双重检查用户名等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74616461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档