2016-07-18 6 views
6

従来のコンソールアプリケーションでローカルデータベースへのSQL接続を開くと問題はありませんが、ステートレスサービス内で同じことを実行しようとするとサービスファブリックでログインエラーが発生します。開発環境でService Fabricクラスタを実行しているときにローカルSQL Serverインスタンスに接続

私は受信エラーが"Login failed for user 'WORKGROUP\\NICK$'."

であり、これは私がSQL Serverにそのユーザを追加しようとすると、それは、ユーザーがすることができないことを私に伝えます

using (var con = new SqlConnection("Server=.;Trusted_Connection=True;Database=AddressBook")) 
{ 
      try 
      { 
       con.Open(); 
      } 
      catch (Exception e) 
      { 

      } 
} 

を接続するために使用しているコードです。見つかりました。

+0

どのようにユーザーのクレジットを指定していますか?あなたはプロセスが実行されているユーザーに頼っていますか?そうであれば、それはコンソールアプリケーションで動作しますが、サービスファブリックではプロセスはデフォルトでネットワークサービスアカウントで実行されます。 –

+0

@VaclavTurecekはい、私はプロセスが実行されていたユーザーに頼っていました。私はSQL Serverで新しいユーザーを設定し、パスワードを指定しました。私は結び目を次のように変更しました。サーバーも同様に変更する必要がありますか? 「サーバー=。ユーザーID =ファブリック;パスワード= mypassword;データベース=アドレスブック」 –

答えて

14

上記のコメントに基づいて、サービスファブリックはNETWORK SERVICEアカウントで実行されていることが分かりました。

解決策は、SFクラスタ内でアクセスするデータベースのユーザーマッピングとロールメンバシップを更新することです。

SSMSでは、[セキュリティ、ログイン]を展開し、[ネットワークサービス]を右クリックし、次に[プロパティ]を選択します。 [ユーザマッピング]で、アクセスを公開するデータベースの横にあるチェックボックスをpublicdb_datareader/writerの下に置きます。

enter image description here

+2

または、DBにアクセスできる別のユーザーアカウントとして実行するようにサービスを構成することもできます。https://azure.microsoft.com/ ja-jp/documentation/articles/service-fabric-application-runas-security /#適用サービスへのrunaspolicyの適用 –

関連する問題