4

ドメイン資格情報を使用して SQL Server に接続できないという問題があります。SA資格情報を使用すると機能し、クエリは期待どおりに実行されます。しかし、ドメイン資格情報を使用すると、エラーが発生します。

スクリプトは次のとおりです。

$SQLServer = 'server.domain.com'
$SQLDBName = 'DBname'
$username  = "DOMAIN\user"
$password  = "password"

$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

#--> With SA, it works, with DOMAIN creds, it does not

#$SqlConnection.ConnectionString = "Server=$SQLServer; Database=$SQLDBName; User ID=sa; Password=SApassword;"
$SqlConnection.ConnectionString = "Server=$SQLServer; Database=$SQLDBName; User ID=$username; Password=$password;"

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = 'select count (*) from my.table'
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]

そして、スクリプトを実行したときに表示されるエラーは次のとおりです。

"1" 個の引数を指定して "Fill" を呼び出し中に例外が発生しました: "SQL Server への接続を確立しているときに、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいことを確認してくださいSQL Server がリモート接続を許可するように構成されていること (プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした)

C:\scripts\PowerShell\myscript.ps1:28 文字:1
+ $SqlAdapter.Fill($DataSet)
+ ~~~~~~~~~~~~~~~~~~~~~~~ ~~
+ CategoryInfo : NotSpecified: (:) []、MethodInvocationException
+ FullyQualifiedErrorId : SqlException

ドメイン内にないコンピューターから SQL Server に接続しているという事実を指摘しておく必要があります (したがって、どのような種類の認証パススルーも使用できません)。

ドメイン資格情報に接続できない理由についてのアイデアはありますか? 接続やファイアウォールなどのチェックに関するアドバイスを提供する他の投稿をフォローしました。これですべて正常に動作し、スクリプトは sa (ローカル) ユーザーとして完全に実行されます。ドメイン上にないだけです..

4

5 に答える 5

5

SQL 資格情報がある場合は、次のようなものを使用します。

$ConnectionString = server=*serverName*;database=*databaseName*;user id=*userName*;password=*passWord*;

ドメイン資格情報がある場合は、次のようなものを使用します。

$ConnectionString = "server=*serverName*;database=*databaseName*;user id=*domain\username*;password=*passWord*;trusted_connection=true;"

これは私の環境では機能します。もちろん、その後は次のことを行います。

$Connection = New-Object System.Data.SQLClient.SQLConnection($ConnectionString)
于 2015-02-03T18:47:44.863 に答える
3

その方法でドメイン資格情報に接続することはできません。

ドメイン資格情報は、接続を確立するプロセスに存在します。プロセスで使用するアカウント (または RUNAS で NETWORK ONLY オプションを使用する場合) は、統合セキュリティを使用して SQL Server への接続を確立するために使用されます。

もちろん、コンピューターがそのドメインと信頼関係にないため、プロセスを実際にそのドメインのユーザーとして実行することはできないため、RUNAS /NETONLY の使用を検討することをお勧めします。

これによりパスワードの入力が求められるため、代わりに CreateProcessWithLogonW API を使用する独自の代替を作成する必要がある場合があります。

https://stackoverflow.com/a/758805/18255

これにより、プロセスは、ネットワーク接続でのみ使用され、その時点で検証される他のドメインからのドメイン資格情報を使用できるようになりますが、他のことにはローカル アカウントを引き続き使用できます。これにより、ローカル (または他のドメイン?) アカウントに依存する可能性のある他のネットワーク リソースにアクセスする際に問題が発生する可能性があります。同じプロセスから別のネットワーク接続を作成した場合に RUNAS /NETONLY がどのように機能するかを完全にテストしていません。

于 2013-03-25T16:36:15.017 に答える
2
Function SQL_CONN1 ($Query) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection 
$SqlConnection.ConnectionString = "Server=myPC;Database=myDB;Integrated Security=True" 
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand 
$SqlCmd.Connection = $SqlConnection 
$SqlCmd.CommandText = $Query 
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter 
$SqlAdapter.SelectCommand = $SqlCmd 
$DataSet = New-Object System.Data.DataSet 
$a=$SqlAdapter.Fill($DataSet) 
$SqlConnection.Close() 
$DataSet.Tables[0]  }

SQL_CONN1 "Select * from [MyTable]"

$SqlConnection.ConnectionString = "Server=myPC;Database=myDB;Integrated Security=True" を試してください

于 2013-09-18T12:52:58.007 に答える
0

セキュリティについて心配していない場合は、次のようにすることができます (ただし、安全ではありません)。

#Set variables here

$connectionString="server=$s;database=$sqlDbName;user id=$userName;password=$passWord";

$sqlConnection=New-Object System.Data.SqlClient.SqlConnection($connectionString);

これは SQL Server 2012 で動作します。ただし、これも安全ではありません。それが誰かを助けることを願っています...

于 2015-05-12T18:37:52.480 に答える
-1

ユーザー名とパスワードを文字列として渡すことはできません。

このようなことを試してください -

#$cred = Get-Credential
# this will prompt for username and password, fill them in
# use this in your connection string
$secpwd = ConvertTo-SecureString $password -AsPlainText -Force

$SqlConnection.ConnectionString = 'Server=$SQLServer; Database=$SQLDBName; User ID=$username; Password=$secpwd;'
于 2013-03-25T16:39:28.057 に答える