[更新了我的查询,增加了更多的测试方案]
我在四个场景中运行以下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的命令行输出如下。
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' 。
场景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
场景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: 脚本执行成功
场景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
我使用了两个批处理文件。
RUNAS_callVBSScript.cmd)。
RUNAS /savecred /user:Domain\User callVBSScript.cmd
调用VBSScript.cmd
.\VBScript.vbs
第一次运行时要输入密码,如果修改密码。