节点 Sequelize (MSSQL) - 用户“”登录失败
Node Sequelize (MSSQL) - Login failed for user ''
我看过几个关于这个问题的帖子,但是,none 其中似乎有实际答案。有几个想法,但 none 可行。
在仔细研究了 Sequelize 和 Tedious 包并观察我的配置被正确传递后,我不知所措。
我正在尝试 运行 迁移到 MSSQL 中的新数据库。使用我在这里使用的相同凭据连接到它没有问题,所以我知道这不是问题所在。
我的 config.js 正在提取环境变量。除了我的自定义控制台语句外,这个文件是从 sequelize 自动生成的,并且在我的 sequelizerc
中被正确引用
require('dotenv').config()
console.log('[+] Loading database config...')
if (process.env.NODE_ENV === 'production') {
console.log(`[+] Using database: ${process.env.PROD_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'development') {
console.log(`[+] Using database: ${process.env.DEV_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'test') {
console.log(`[+] Using database: ${process.env.TEST_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'local') {
console.log(`[+] Using database: ${process.env.LOCAL_DB_DATABASE}`)
} else {
console.log(`[-] CANNOT LOAD DATABASE FROM ENV: ${process.env.NODE_ENV}`)
process.exit()
}
module.exports = {
production: {
database: process.env.PROD_DB_DATABASE,
username: process.env.PROD_DB_USERNAME,
password: process.env.PROD_DB_PASSWORD,
host: process.env.PROD_DB_HOST,
port: process.env.PROD_DB_PORT,
dialect: process.env.PROD_DB_DIALECT,
storage: process.env.PROD_DB_STORAGE,
logging: false,
dialectOptions: {
instanceName: process.env.PROD_INSTANCE_NAME
},
pool: {
min: 5,
max: 1,
acquire: 6000,
idle: 6000
}
},
development: {
database: process.env.DEV_DB_DATABASE,
username: process.env.DEV_DB_USERNAME,
password: process.env.DEV_DB_PASSWORD,
host: process.env.DEV_DB_HOST,
port: process.env.DEV_DB_PORT,
dialect: process.env.DEV_DB_DIALECT,
storage: process.env.DEV_DB_STORAGE,
logging: console.log,
dialectOptions: {
instanceName: process.env.DEV_INSTANCE_NAME,
debug: true
},
pool: {
min: 5,
max: 1,
acquire: 6000,
idle: 6000
}
},
test: {
database: process.env.TEST_DB_DATABASE,
username: process.env.TEST_DB_USERNAME,
password: process.env.TEST_DB_PASSWORD,
host: process.env.TEST_DB_HOST,
port: process.env.TEST_DB_PORT,
dialect: process.env.TEST_DB_DIALECT,
storage: process.env.TEST_DB_STORAGE,
logging: false
},
local: {
database: process.env.LOCAL_DB_DATABASE,
username: process.env.LOCAL_DB_USERNAME,
password: process.env.LOCAL_DB_PASSWORD,
host: process.env.LOCAL_DB_HOST,
port: process.env.LOCAL_DB_PORT,
dialect: process.env.LOCAL_DB_DIALECT,
storage: process.env.LOCAL_DB_STORAGE,
logging: false
}
}
当我 运行 我的迁移我得到错误:
> node_modules/.bin/sequelize db:migrate
// ERROR: Login failed for user ''.
如上所述,我研究了 sequelize 和 tedious,我的配置通过两者都正确传递了,所以我知道这不是 env var 问题或 NODE_ENV 问题。
这里有人有什么想法吗?我差点把脸砸到键盘上了
旧版本的更多信息:
如果您使用 sequelize@4
,那么似乎有一个隐藏的要求,您必须使用 tedious@<=5
。
您使用的是哪个版本的 Sequelize?如果是v5,
根据 Sequelize v5's document:
Sequelize now works with tedious >= 6.0.0
然而,在它的package.json
中,它根本不依赖于tedious
。
由于你的程序还在运行,我猜你之前手动安装了旧版本的tedious
,导致了这个奇怪的问题。
手动安装版本>=6的tedious
应该可以解决这个问题,正如其Getting started document page中所述:
You'll also have to manually install the driver for your database of choice:
# One of the following:
$ npm install --save pg pg-hstore # Postgres
$ npm install --save mysql2
$ npm install --save mariadb
$ npm install --save sqlite3
$ npm install --save tedious # Microsoft SQL Server
const Sequelize = require('sequelize');
const sequelize = new Sequelize(
process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
dialect: 'mssql',
host: process.env.DB_HOST, //This is an IP
dialectOptions: {
options: {
instanceName: process.env.DB_INSTANCE_NAME,
trustServerCertificate: true
},
}
}
);
module.exports = {
sequelize,
Sequelize
};
这是另一个解决方案,它对我有用。
我遇到了同样的错误。原因是因为在 sequelize 配置文件中明确提到了 DB 的名称,但它并不存在。在您的情况下,原因可能有所不同,但快速查看 SQL 服务器错误日志将为您提供失败的原因。
Login failed for user 'user'. Reason: Failed to open the explicitly specified database 'dbo'. [CLIENT: XX.XX.XX.XX]
我看过几个关于这个问题的帖子,但是,none 其中似乎有实际答案。有几个想法,但 none 可行。
在仔细研究了 Sequelize 和 Tedious 包并观察我的配置被正确传递后,我不知所措。
我正在尝试 运行 迁移到 MSSQL 中的新数据库。使用我在这里使用的相同凭据连接到它没有问题,所以我知道这不是问题所在。
我的 config.js 正在提取环境变量。除了我的自定义控制台语句外,这个文件是从 sequelize 自动生成的,并且在我的 sequelizerc
中被正确引用require('dotenv').config()
console.log('[+] Loading database config...')
if (process.env.NODE_ENV === 'production') {
console.log(`[+] Using database: ${process.env.PROD_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'development') {
console.log(`[+] Using database: ${process.env.DEV_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'test') {
console.log(`[+] Using database: ${process.env.TEST_DB_DATABASE}`)
} else if (process.env.NODE_ENV === 'local') {
console.log(`[+] Using database: ${process.env.LOCAL_DB_DATABASE}`)
} else {
console.log(`[-] CANNOT LOAD DATABASE FROM ENV: ${process.env.NODE_ENV}`)
process.exit()
}
module.exports = {
production: {
database: process.env.PROD_DB_DATABASE,
username: process.env.PROD_DB_USERNAME,
password: process.env.PROD_DB_PASSWORD,
host: process.env.PROD_DB_HOST,
port: process.env.PROD_DB_PORT,
dialect: process.env.PROD_DB_DIALECT,
storage: process.env.PROD_DB_STORAGE,
logging: false,
dialectOptions: {
instanceName: process.env.PROD_INSTANCE_NAME
},
pool: {
min: 5,
max: 1,
acquire: 6000,
idle: 6000
}
},
development: {
database: process.env.DEV_DB_DATABASE,
username: process.env.DEV_DB_USERNAME,
password: process.env.DEV_DB_PASSWORD,
host: process.env.DEV_DB_HOST,
port: process.env.DEV_DB_PORT,
dialect: process.env.DEV_DB_DIALECT,
storage: process.env.DEV_DB_STORAGE,
logging: console.log,
dialectOptions: {
instanceName: process.env.DEV_INSTANCE_NAME,
debug: true
},
pool: {
min: 5,
max: 1,
acquire: 6000,
idle: 6000
}
},
test: {
database: process.env.TEST_DB_DATABASE,
username: process.env.TEST_DB_USERNAME,
password: process.env.TEST_DB_PASSWORD,
host: process.env.TEST_DB_HOST,
port: process.env.TEST_DB_PORT,
dialect: process.env.TEST_DB_DIALECT,
storage: process.env.TEST_DB_STORAGE,
logging: false
},
local: {
database: process.env.LOCAL_DB_DATABASE,
username: process.env.LOCAL_DB_USERNAME,
password: process.env.LOCAL_DB_PASSWORD,
host: process.env.LOCAL_DB_HOST,
port: process.env.LOCAL_DB_PORT,
dialect: process.env.LOCAL_DB_DIALECT,
storage: process.env.LOCAL_DB_STORAGE,
logging: false
}
}
当我 运行 我的迁移我得到错误:
> node_modules/.bin/sequelize db:migrate
// ERROR: Login failed for user ''.
如上所述,我研究了 sequelize 和 tedious,我的配置通过两者都正确传递了,所以我知道这不是 env var 问题或 NODE_ENV 问题。
这里有人有什么想法吗?我差点把脸砸到键盘上了
旧版本的更多信息:
如果您使用 sequelize@4
,那么似乎有一个隐藏的要求,您必须使用 tedious@<=5
。
您使用的是哪个版本的 Sequelize?如果是v5, 根据 Sequelize v5's document:
Sequelize now works with tedious >= 6.0.0
然而,在它的package.json
中,它根本不依赖于tedious
。
由于你的程序还在运行,我猜你之前手动安装了旧版本的tedious
,导致了这个奇怪的问题。
手动安装版本>=6的tedious
应该可以解决这个问题,正如其Getting started document page中所述:
You'll also have to manually install the driver for your database of choice:
# One of the following: $ npm install --save pg pg-hstore # Postgres $ npm install --save mysql2 $ npm install --save mariadb $ npm install --save sqlite3 $ npm install --save tedious # Microsoft SQL Server
const Sequelize = require('sequelize');
const sequelize = new Sequelize(
process.env.DB_NAME, process.env.DB_USER, process.env.DB_PASS, {
dialect: 'mssql',
host: process.env.DB_HOST, //This is an IP
dialectOptions: {
options: {
instanceName: process.env.DB_INSTANCE_NAME,
trustServerCertificate: true
},
}
}
);
module.exports = {
sequelize,
Sequelize
};
这是另一个解决方案,它对我有用。
我遇到了同样的错误。原因是因为在 sequelize 配置文件中明确提到了 DB 的名称,但它并不存在。在您的情况下,原因可能有所不同,但快速查看 SQL 服务器错误日志将为您提供失败的原因。
Login failed for user 'user'. Reason: Failed to open the explicitly specified database 'dbo'. [CLIENT: XX.XX.XX.XX]