0

私がコーディングしているとき、以下のコードは正常に機能しています。IISでコードを公開しましたが、接続に失敗します。

私がコーディングしているときは、ウィンドウログインをクレデンシャルとして取得し、IISではAppPoolIdentityを取得しています。Windowsのログイン資格情報をconnectionstringに渡すにはどうすればよいですか?

Public Shared Function DbCollection(connectionString As String) As DatabaseCollection
   Dim server As New Microsoft.SqlServer.Management.Smo.Server(connectionString)
   Return server.Databases
End Function

エラー:

   Login failed for user 'Domain\Computername$'. 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

    Exception Details: System.Data.SqlClient.SqlException: Login failed for user
 'Domain\Computername$'.
4

2 に答える 2

1

エラーに基づいて、SQLがIISと同じボックスにない可能性があります...構成に応じて可能なオプションは次のとおりです。

  • SQL認証とSQLを同じボックスで使用していない場合: HttpContext.CurrentUserを使用してユーザーの資格情報を取得し、それらの資格情報を偽装できるはずですが、システムの設定に大きく依存します。すでに偽装している可能性がありますが(ASP.Netのデフォルト構成)、サーバーがIISとは異なるボックスにある場合、通常のユーザーの資格情報は他のボックスにフロートできません(検索用語「NTLMワンホップ」)。
  • 別のサーバー上のデータベースで、組織ですでにKerberos認証を使用している場合:別のサーバーで偽装するには、Kerberosで認証する必要があると思います。そのような認証が構成/許可されていない場合、あなたのケースのためだけにオンになる可能性は低いことに注意してください。
  • Windows認証を使用する別のサーバー上のデータベース-特定のユーザーアカウントですべてのSQLクエリを実行できます(または、プロセスのアカウントで実行するための相互運用機能をすべて備えたRevertToSelf)。
  • どこにいてもデータベースを作成でき、SQL認証を使用できます。組織で問題がない限り、最も簡単な方法です。この方法を使用する場合は、構成ファイルの接続文字列を暗号化することを検討してください。
于 2013-02-18T16:22:15.330 に答える
0

@smooreの投稿に、接続文字列と着信接続を許可するSQLサーバーの構成に大きく依存することを追加します。問題の説明からわかるように、Windowsユーザーではなく、SQLユーザーのみを許可するように設定されている可能性があります。接続文字列の詳細(貼り付ける前にユーザー/パスワードを匿名化/削除してください!)と、SQLサーバーインスタンスで許可されている認証モードを教えてください。

于 2013-02-18T16:25:48.593 に答える