连接到SQL服务器需要用明确的凭证启动CMD。

问题描述 投票:1回答:1

[更新了我的查询,增加了更多的测试方案]

我在四个场景中运行以下VBS代码。

连接字符串1: 增加 "User ID=YYDOMAIN\YYAccount;Password=YYPassword;",删除 "Integrated Security=SSPI"

connect.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;" _
"Initial Catalog=reportservertempdb;Data Source=10.10.10.10;Use Procedure for Prepare=1;" _
"Auto Translate=True;Packet Size=4096;Workstation ID=ServerHostName;Use Encryption for Data=False;" _
"Tag with column collation when possible=False;User ID=YYDOMAIN\YYAccount;Password=YYPassword;"

场景1: "用户YYDOMAIN/YYAccount登录失败" "80040E4D" "微软OLE DB Provider for SQL Server

  1. 我在我的本地电脑上以 "YYdomian/yyram "登录加入域名 "yydomain.com"。
  2. 已开通CMD
  3. 在CScript.exe中按回车键
  4. 得到错误信息 "用户YYDOMAIN/YYAccount登录失败" '80040E4D' 'Microsoft OLE DB Provider for SQL Server' 。

场景1的命令行输出如下。

C:\Users\yyram>whoami
YYDOMAIN\yyram

C:\Users\yyram>CScript.exe "C:\Temp\Sql_Connect.vbs"
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

C:\Temp\Sql_Connect.vbs(8, 1) Microsoft OLE DB Provider for SQL Server: Login failed for user 'YYDOMAIN\YYAccount'.


C:\Users\yyram

方案二:"用户YYDOMAIN/YYAccount登录失败 '用户YYDOMAIN/YYAccount登录失败' '80040E4D' 'Microsoft OLE DB Provider for SQL Server' 。

  1. 我在我的本地电脑上以 "YYdomian/yyram "登录加入域名 "yydomain.com"。
  2. 打开CMD'以不同的用户身份运行',并提供的详细信息为'用户:YYDOMAIN/YYAccount & Pass.YYPassword'(仅供参考:在SQL查询中使用相同的用户详细信息连接SQLDB。YYPassword' (仅供参考:在SQL查询中使用相同的用户详情来连接SQLDB)
  3. 在CScript.exe中按回车键
  4. 得到错误信息 "用户YYDOMAIN/YYAccount登录失败" '80040E4D' 'Microsoft OLE DB Provider for SQL Server' 。

场景2的命令行输出如下。

C:\Users\yyram>whoami
YYDOMAIN\YYAccount

C:\Users\yyram>CScript.exe "C:\Temp\Sql_Connect.vbs"
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

C:\Temp\Sql_Connect.vbs(8, 1) Microsoft OLE DB Provider for SQL Server: Login failed for user 'YYDOMAIN\YYAccount'.


C:\Users\yyram>

连接字符串2。 删除 "用户ID=YYDOMAIN/YYAccount;密码=YYPassword;",增加 "Integrated Security=SSPI"

connect.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;" _
"Initial Catalog=reportservertempdb;Data Source=10.10.10.10;Use Procedure for Prepare=1;" _
"Auto Translate=True;Packet Size=4096;Workstation ID=ServerHostName;Use Encryption for Data=False;" _
"Tag with column collation when possible=False;Integrated Security=SSPI;"

场景三:"用户YYDOMAIN/yyram登录失败""80040E4D""Microsoft OLE DB Provider for SQL Server"。 "用户YYDOMAINyyram登录失败" "80040E4D" "Microsoft OLE DB Provider for SQL Server

  1. 我在我的本地电脑上以 "YYdomian/yyram "登录加入域名 "yydomain.com"。
  2. 已开通CMD
  3. 在CScript.exe中按回车键
  4. 得到错误 "用户YYDOMAIN/yyram登录失败"'80040E4D''Microsoft OLE DB Provider for SQL Server'。

场景3的命令行输出如下。

C:\Users\yyram>whoami
YYDOMAIN\yyram

C:\Users\yyram>CScript.exe "C:\Temp\Sql_Connect.vbs"
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.

C:\Temp\Sql_Connect.vbs(8, 1) Microsoft OLE DB Provider for SQL Server: Login failed for user 'YYDOMAIN\yyram'.


C:\Users\yyram>

场景4: 脚本执行成功

  1. 我在我的本地电脑上以 "YYdomian/yyram "登录加入域名 "yydomain.com"。
  2. 打开CMD'以不同的用户身份运行',并提供的详细信息为'用户:YYDOMAIN/YYAccount & Pass.YYPassword'(仅供参考:在SQL查询中使用相同的用户详细信息连接SQLDB。YYPassword' (仅供参考:在SQL查询中使用相同的用户详情来连接SQLDB)
  3. 在CScript.exe中按回车键
  4. 报告生成 "C:\temptest.csv "成功。

场景4的命令行输出如下。

C:\Users\yyram>whoami
YYDOMAIN\YYAccount

C:\Users\yyram>CScript.exe "C:\Temp\Sql_Connect.vbs"
Microsoft (R) Windows Script Host Version 5.812
Copyright (C) Microsoft Corporation. All rights reserved.


C:\Users\yyram>

那么,有没有办法提供另一个Windows认证信息而不是登录用户信息来运行上面的VBScript呢?

VBScript主代码如下。

Dim connect, sql, resultSet, pth, txt

Set ObjFSO = CreateObject("Scripting.FileSystemObject")
Set connect = CreateObject("ADODB.Connection")

connect.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;" _
"User ID=YYDOMAIN\YYAccount;Password=YYPassword;Initial Catalog=reportservertempdb;Auto Translate=True;" _
"Data Source=10.10.10.10;Use Procedure for Prepare=1;Packet Size=4096;Workstation ID=ServerHostName;" _
"Use Encryption for Data=False;Tag with column collation when possible=False;Trusted_Connection=True;"

connect.Open

sql="select sql query"

Set resultSet = connect.Execute(sql)

pth = "C:\temp\test.csv"

Set txt = ObjFSO.CreateTextFile(pth, True)

On Error Resume Next
resultSet.MoveFirst
Do While Not resultSet.eof
  txt.WriteLine(resultSet(0) & "," & resultSet(1))
  resultSet.MoveNext
Loop

resultSet.Close
connect.Close
Set connect = Nothing
sql-server vbscript
1个回答
0
投票

我使用了两个批处理文件。

RUNAS_callVBSScript.cmd)。

RUNAS /savecred /user:Domain\User callVBSScript.cmd

调用VBSScript.cmd

.\VBScript.vbs

第一次运行时要输入密码,如果修改密码。

© www.soinside.com 2019 - 2024. All rights reserved.