Sql server 如何使用mssql模块通过Node.JS的windows身份验证连接到SQL Server
您好,我无法连接到在节点js中使用windows身份验证的SQL server。我正在使用mssql模块。错误消息是:Sql server 如何使用mssql模块通过Node.JS的windows身份验证连接到SQL Server,sql-server,node.js,npm,Sql Server,Node.js,Npm,您好,我无法连接到在节点js中使用windows身份验证的SQL server。我正在使用mssql模块。错误消息是: [ConnectionError: Login failed for user ''. The user is not associated with a trusted SQL Server connection.] name: 'ConnectionError', message: 'Login failed for user \'\'. The user is not a
[ConnectionError: Login failed for user ''. The user is not associated with a trusted SQL Server connection.]
name: 'ConnectionError',
message: 'Login failed for user \'\'. The user is not associated with a trusted SQL Server connection.',
code: 'ELOGIN' }
这是我的密码:
config = {
server : "localhost\\MSSQLSERVER",
database : "mydatabase",
port : 1433
}
function loadDepts() {
var conn = new sql.Connection(config);
var request = sql.Request(conn);
conn.connect(function(err) {
if (err) {
console.log(err);
return;
}
request.query("select deptid, deptname from departments", function(err, table) {
if (err) {
console.log(err);
return;
}
else {
console.log(table);
}
conn.close();
});
});
}
loadDepts();
我从来没有能够让
mssql
+windowsauth为我的任何项目工作过。试试edge
和edge-sql
——它对我很有用
从那里开始,就有很多蒸汽
var edge = require('edge');
var params = {
connectionString: "Server=YourServer;Database=YourDB;Integrated Security=True",
source: "SELECT TOP 20 * FROM SampleData"
};
var getData = edge.func( 'sql', params);
getData(null, function (error, result) {
if (error) { console.log(error); return; }
if (result) {
console.log(result);
}
else {
console.log("No results");
}
});
编辑
嗯。。。在我最初回答10天后,显然mssql
将Windows Auth添加到包中。他们听到了我们的喊声:)。我还没有对它进行测试,但它已经正式在我的待办事项列表中,用于测试集成。我会回来报到的
FWTW,如果mssql
符合您的需要,我会同意,因为1)edge sql
已经休眠了2年,2)主要贡献者说他已经离开了这样的项目,因为他不再在那里工作
编辑2
这不断得到支持,并且有评论说其他一些答案的代码示例要么不起作用,要么在Windows上不起作用
这是我的代码,使用mssql
,在Windows上工作,同时还安装了msnodesqlv8
:
var sql = require('mssql/msnodesqlv8');
var config = {
driver: 'msnodesqlv8',
connectionString: 'Driver={SQL Server Native Client XX.0};Server={SERVER\\NAME};Database={dbName};Trusted_Connection={yes};',
};
sql.connect(config)
.then(function() {
...profit...
})
.catch(function(err) {
// ... connect error checks
});
我很难使用windows身份验证模式连接在远程windows服务器上运行的mssql服务器。然后我发现解决方案就像下面的代码一样使用
sql.connect("Data Source=172.25.x.x,1433;User Id=CSLx\\Name;Password=xxxxxx1234;Initial Catalog=giveTHedataabseNamel;Integrated Security=True",function(err){ }
因为这是一个相当明显的答案,所以我想添加一个代码片段,该代码片段适用于我的受信任连接。从编辑后的答案开始
const sql = require("mssql");
require("msnodesqlv8");
const conn = new sql.Connection({
database: "db_name",
server: "server_name",
driver: "msnodesqlv8",
options: {
trustedConnection: true
}
});
conn.connect().then(() => {
// ... sproc call, error catching, etc
// example: https://github.com/patriksimek/node-mssql#request
});
使用trusted connection,我能够执行存储过程、记录输出并关闭连接,没有任何问题,并且比任何其他驱动程序更新得都快(最新版本是2016年10月,截至2016年11月3日),因此这似乎也是一个安全的选择
下面是一个使用mssql@4.0.4. 唯一的更改是初始require,它从mssql中引入msnodesqlv8,而sql.Connection现在是sql.ConnectionPool。您还需要更改存储过程调用,因为响应不同。乔恩的回答值得称赞,因为他比我先更新了我的答案
const sql = require("mssql/msnodesqlv8");
const conn = new sql.ConnectionPool({
database: "db_name",
server: "server_name",
driver: "msnodesqlv8",
options: {
trustedConnection: true
}
});
conn.connect().then(() => {
// ... sproc call, error catching, etc
// example: https://github.com/patriksimek/node-mssql#request
});
关于如何使用mssql+WindowsAuth,我也苦苦挣扎了一段时间,下面是我如何让它在我的项目中发挥作用的 正如中所指出的,您还需要安装msnodesqlv8
npm install msnodesqlv8
接下来,您可以这样使用它:
const sql = require('mssql/msnodesqlv8')
const pool = new sql.ConnectionPool({
database: 'database',
server: 'server',
driver: 'msnodesqlv8',
options: {
trustedConnection: true
}
})
pool.connect().then(() => {
//simple query
pool.request().query('select 1 as number', (err, result) => {
console.dir(result)
})
})
作为说明,我试图添加这一点作为对Aaron答案的评论,因为我的回答只是对他的补充/更新,但我没有足够的声誉来这么做。我尝试了许多变体,这是我的完整解决方案。
我正在使用SQL server Express
首先,我只连接到主数据库。
您只需更改“YOURINSTANCE\\SQLEXPRESS”
(一定要保持上面的双斜杠!!!)
我也在使用集成安全性。
查询完全不依赖任何内容(在数据库中)。
您需要添加节点包
==>NPM安装MSSQL和
==>NPM安装msnodesqlv8
希望您的连接问题将成为过去。
也许吧。
求你了
我刚刚在配置中添加了域:“DNAME”,因此此配置帮助我使用windows auth连接到MS SQL
const config = {
driver: 'msnodesqlv8',
domain: "DNAME",
user: 'username',
password: 'pass',
server: '7.6.225.22',
database: 'DBNAME',
requestTimeout: 3600000, //an hour
options: {
trustedConnection: true
},
debug: true,
parseJSON: true
};
我只能使用带有连接字符串(而不是配置对象)的msnodesqlv8(仅限于Windows环境)来获得可信任的连接
下面的代码正在为我工作
const sql = require('mssql/msnodesqlv8')
// config for your database
var config = {
driver: 'msnodesqlv8',
server: 'serverNAme\\SQLEXPRESS',
database: 'Learn' ,
options: {
trustedConnection: true
}
};
它对我有用
需要安装msnodesqlv8和mssql。也……:)
此版本不需要用户名或密码 为了使用windows身份验证,我安装了mssql和msnodesqlv8 然后在我的app.js文件中:
const mssql = require('mssql/msnodesqlv8');
注意,如果您使用这个示例,那么它是mssql而不是sql
var config = {
database:'YOUR DATABASE NAME',
server: 'localhost\\SQLEXPRESS',
driver: 'msnodesqlv8',
options: {
trustedConnection: true,
enableArithAbort: true
}
};
您需要在配置中更改数据库名称。除此之外,它应该是有效的。我的例子是:
app.get('/', function (req, res) {
mssql.connect(config, function (err) {
if (err) console.log(err);
var request = new mssql.Request();
request.query('select * from dbo.visit', function (err, result) {
if(err) console.log(err);
console.log(result);
});
});
});
对我来说
我使用了如下的连接设置
"server":"",
"domain":"", //sepcify domain of your user
"port": ,
"user":"", // enter username without domain
"password":"",
"database":""
以及TS代码
import * as sql from 'mssql';
const pool = await new sql.ConnectionPool(connection).connect();
const result = await pool.request()
.query(`SELECT count(idpart) part_computed FROM demo.PARTs;`);
pool.close();
return Promise.resolve(result.recordset);
这对我有用
const sql = require("mssql/msnodesqlv8");
const conn = new sql.ConnectionPool({
database: "DB name",
server: "server name",
driver: "msnodesqlv8",
options: {
trustedConnection: true
}
});
conn.connect().then((err) => {
if(err) throw err;
else console.log("connected");
const req = new sql.Request(conn)
req.query("select * from table", function(error, res){
console.log(res)
})
});
你把用户名放在哪里了?我没有放用户名,因为我的SQL Server的身份验证方法是Windows身份验证。在.Net中,我将这样定义我的连接字符串:“Server=localhost;integratedsecurity=SSPI;Database=mydatabase”。不过我不知道如何在Node.js中实现类似的功能。哦,我使用sa帐户使用SQL server身份验证对其进行了测试,结果证明它是有效的。但我需要的是它能在Windows身份验证中工作。我在Windows Auth开启时运气不太好。@GetGlady请给出一个带有实际值的连接字符串的具体示例好吗?我有点困惑{}在实践中是否应该存在,我得到了“TypeError:Invalid server:undefined”@ChrisPeacock尝试替换
var sql=require('mssql')代码>带有var sql=require('mssql/msnodesqlv8')代码>-显然在感谢@getglady中破坏了更改!这一点,再加上对“Driver=…”位的修改,就解决了这个问题。我没有意识到连接字符串中的驱动程序引用了ODBC驱动程序(我甚至没有意识到ODBC也包含在其中)。@previousdeveloper您现在知道如何在Linux中实现此功能了吗?您是否提供了windows密码?我们不应该为窗口身份验证提供windows密码。它应该会自动判断哪个用户正在运行应用程序。节点mssql模块没有使用windows身份验证登录的选项。为了实现,我可以找到上面唯一的方法,有关更多详细信息,请参阅git hub问题。我意识到这是一个较旧的注释,但当我尝试上面的代码时,我得到的是“用户“”登录失败”。不确定为什么它没有拉入我的windows信息。@Holt-我只能使用实际的连接字符串使它工作。我
"server":"",
"domain":"", //sepcify domain of your user
"port": ,
"user":"", // enter username without domain
"password":"",
"database":""
import * as sql from 'mssql';
const pool = await new sql.ConnectionPool(connection).connect();
const result = await pool.request()
.query(`SELECT count(idpart) part_computed FROM demo.PARTs;`);
pool.close();
return Promise.resolve(result.recordset);
const sql = require("mssql/msnodesqlv8");
const conn = new sql.ConnectionPool({
database: "DB name",
server: "server name",
driver: "msnodesqlv8",
options: {
trustedConnection: true
}
});
conn.connect().then((err) => {
if(err) throw err;
else console.log("connected");
const req = new sql.Request(conn)
req.query("select * from table", function(error, res){
console.log(res)
})
});