1

vbscript を使用して、別のドメインの SQL サーバーに接続しようとしています。サーバーはクラスターの一部であり、SQL Server Data Center Edition (64 ビット) です。自分のマシンからサーバーに ping を実行できます。SSMSで正常に動作する接続にIPアドレスを使用しています。私が使用しているvbscriptコードは次のとおりです。

Set cn = CreateObject("ADODB.Connection")
cn.Open "DRIVER={SQL Server};Server=123.456.345.567\instance;Database=MyDB;User
ID=domain\myuserid;Password=mypass;"
strCommandText = "Select * from mytable"
cn.Execute strCommandText

これを実行すると、次のエラーが表示されます: Microsoft OLE DB Provider for ODBC Drivers: [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'domain\myuserid'.

テスト マシンをドメインに参加させることができず、SQL サーバーで無効になっているため、SQL 認証を使用できません。

これを機能させるにはどうすればよいですか?

4

3 に答える 3

6

クエリ文字列を見ると、ユーザー名とパスワードを指定していることがわかります。これは、SQL認証のクレデンシャルを提供していることを意味します。ただし、質問では、SQLサーバーでSQL認証が無効になっていると述べています。

これが、SQLサーバーが許可しない理由です。サーバーがSQL認証クレデンシャルを予期していないときに、SQL認証クレデンシャルを提供しています。

SQL認証が無効になっている場合は、サーバーが混合モード認証になっていない可能性が非常に高いため、SQLサーバーがログインにWindows認証を使用していることを意味します。この構成はあなたのコントロールを超えています、それはあなたのDBAがその選択をしたのです。

したがって、接続しているSQLサーバーがWindows認証モードを使用している場合、クエリ文字列は次のようになります。

cn.Open "DRIVER={SQL Server};Server=123.456.345.567\instance;Database=MyDB;Trusted_Connection=yes;"

ただし、ここで注意が必要な部分があります... [DOMAIN_A]の一部であるテストマシンからVBScriptを実行している場合、[DOMAIN_A]Windowsの資格情報の下で実行されます。ただし、SQLサーバーは、参加しているドメインからのWindowsクレデンシャルを期待しています。それを[Domain_B]と呼びましょう。

AD管理者が[DOMAIN_A]と[DOMAIN_B]の間に信頼関係を作成していない限り、正しいクエリ文字列があるにもかかわらず、ログインの試行は失敗します。

テストマシンを[DOMAIN_B]に参加できない場合、このクロスドメインの問題をどのように解決しますか?簡単。「Runas」コマンドを使用します。

[DOMAIN_A]に参加しているテストマシンで、コマンドプロンプトを開き、次のコマンドを実行します。

Runas /noprofile /netonly user:[DOMAIN_B]\myuserid %comspec%

パスワードの入力を求められます。クエリ文字列に最初に持っていた「mypass」パスワードを入力します。「myuserid」は、元のクエリ文字列のユーザー名でもあります。

その後、新しいコマンドプロンプトウィンドウが表示されますが、タイトルに気付いた場合は、[DOMAIN_B]のクレデンシャルで実行されています。

[DOMAIN_A]に参加しているテストマシン上にまだ存在しているにもかかわらず、この新しいコマンドプロンプトで実行するものはすべて、[DOMAIN_B]の資格情報の下で実行されます。まさにSQLサーバーが期待していることです。

したがって、この時点で残っているのは、この新しいコマンドプロンプトウィンドウでVBScriptを実行することだけです。これにより、SQLサーバーに適切な資格情報が提供されます。

それで問題が解決したかどうかをお知らせください。

于 2012-11-07T16:41:43.737 に答える
1

私の知る限り、ドメインに参加するか、SQL 認証を使用せずに接続するオプションはありません。仮想的にドメインに参加する VPN を介して接続できる場合があります

于 2012-10-26T15:03:09.147 に答える
0

接続文字列、特にドライバーをプロバイダーに変更してみてください。

これを試してみてください

Provider=SQLNCLI10;Server=myServerAddress;Database=myDataBase;Uid=myUsername; Pwd=myPassword;

接続文字列の例を次に示します: http://www.connectionstrings.com/sql-server-2005#sql-server-native-client-10-0-oledb-provider

于 2012-10-26T15:02:46.243 に答える