C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: IIS7.0の認証について


(過去ログ 131 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■77629 / inTopicNo.1)  IIS7.0の認証について
  
□投稿者/ ふるふる (11回)-(2015/11/09(Mon) 17:08:47)

分類:[ASP.NET (C#)] 

OS: Windows Server2008 R2
開発環境 IIS 7.0 + VS2010(Framework4.0) + SQLServer2012

IIS WEBサーバーとSQLサーバーが別PCです。
社内イントラネット内のWEBアプリケーションの構築をしています。
Windows認証でサイトにアクセスし、アクセスしたユーザーでSQL Serverにも接続させたいと考えています。
そこでアプリケーションの認証の設定で、
Anonymous Authentication をDisabled
ASP.Net ImpersonationをEnable、Authenticated user を選択
Forms Authentication をDisabled
Windows Authentication をEnabled
にしてアクセスすると、下記エラーが表示されます。
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

設定方法を教えていただけませんか。





引用返信 編集キー/
■77633 / inTopicNo.2)  Re[1]: IIS7.0の認証について
□投稿者/ WebSurfer (700回)-(2015/11/09(Mon) 18:54:43)
No77629 (ふるふる さん) に返信

質問者さんは SQL Server の設定については十分な知識・スキルを持っていて、
SQL Server への ASP.NET Web アプリからの接続が分からないだけという理解で
いいのですよね?

「社内イントラネット内」ということですので、クライアントも Web サーバー
も SQL Server のサーバーも全て Active Directory ドメイン環境に属していて、
認証方式は SQL Server を含めて全て Windows 認証でいいのですよね?

以下の記事の「図 3. 信頼済みサブシステム モデル」と同様な形でいいのです
よね?

How To: ASP.NET 2.0 で偽装と委任を使用する方法
https://msdn.microsoft.com/ja-jp/library/ms998351.aspx

違うのであれば上記のあたりを詳しく書いてください。


その理解であっていれば、上記の記事の図 3 の "Trusted Service Identity" を
何にするかという話にななります。

IIS7 のデフォルトのワーカープロセスにするなら以下の記事の「SQL Server」の
セクションにあるように Network Service にアクセス権を与えればいいはずです。

How To: ASP.NET で Network Service アカウントを使用してリソースにアクセスする方法
https://msdn.microsoft.com/ja-jp/library/ms998320.aspx

SQL Server のログインや DB のアクセスに専用のドメインユーザーアカウントを
設けてそれでアクセスしたいということであれば、そのアカウントを偽装すること
になります。

この続きの話は、上記の理解でいいのか、どっちの方向に進みたいのかを明確にし
てもらってからにさせてください。
引用返信 編集キー/
■77639 / inTopicNo.3)  Re[2]: IIS7.0の認証について
□投稿者/ ふるふる (12回)-(2015/11/10(Tue) 10:05:50)
No77633 (WebSurfer さん) に返信

回答ありがとうございます。
SQL Serverについて、十分な知識・スキルがあるかは自信がないですが、現在の問題はSQL ServerにASP.NET Webアプリから接続ができない、ということです。接続文字列はIntegrated Security=SSPI、全てWindows認証で行います。
クライアントもWebサーバーも、SQLサーバーも同じドメイン内です。

> 以下の記事の「図 3. 信頼済みサブシステム モデル」と同様な形でいいのです
> よね?

クライアントは、既にSQLサーバーへのアクセス権を持っているので、クライアントのユーザーIDでSQLサーバーにログインしたいのです。
コネクションプーリングが有効に使えないと思いますが、接続数は多くないので問題ないと考えています。

How To: ASP.NET 2.0 で偽装と委任を使用する方法
https://msdn.microsoft.com/ja-jp/library/ms998351.aspx

の中の
Kerberos 認証および委任を使用する方法。
が該当するように思えます。

Kerberos認証について調べてみます。



引用返信 編集キー/
■77641 / inTopicNo.4)  Re[3]: IIS7.0の認証について
□投稿者/ ふるふる (13回)-(2015/11/10(Tue) 12:37:31)
解決しました。

原因は、接続文字列でした。
Data Source=labTNSAPWDB102;Initial Catalog=Planning;Integrated Security=SSPI
となっていたのを
Data Source=labTNSAPWDB102;Initial Catalog=Planning;Integrated Security=True
にしたところ、接続できるようになりました。
IISの設定は変更ありません。
Windows認証とASP.Net ImpersonationをEnabledにしています。

疑問なのはローカルで(WEBサーバーにログインしてIISマネージャからBrouseすると接続できていたことでしょうか。
DBに接続できていたため、接続文字列の間違いに気づいていませんでした。


解決済み
引用返信 編集キー/
■77642 / inTopicNo.5)  Re[4]: IIS7.0の認証について
□投稿者/ ふるふる (14回)-(2015/11/10(Tue) 12:54:33)
すいません、早とちりでした。

確認していたらASP.NET Impersonateで個人のID/パスワードが設定されていました。
クライアントからは接続できていません。

引用返信 編集キー/
■77643 / inTopicNo.6)  Re[4]: IIS7.0の認証について
□投稿者/ WebSurfer (701回)-(2015/11/10(Tue) 13:11:08)
No77641 (ふるふる さん) に返信

> 原因は、接続文字列でした。
> Data Source=labTNSAPWDB102;Initial Catalog=Planning;Integrated Security=SSPI
> となっていたのを
> Data Source=labTNSAPWDB102;Initial Catalog=Planning;Integrated Security=True
> にしたところ、接続できるようになりました。

なんか変ですね。sspi と ture は同じなんですが。MDSN ライブラリにも「sspi は、
true と等価です。」とはっきり書いてあります。なので、原因はそこではなさそう
な気がするのですが。

> IISの設定は変更ありません。
> Windows認証とASP.Net ImpersonationをEnabledにしています。

その状態では多分以下の記事の「図 1. 最初の呼び出し元を偽装する。」 の状態にな
っていると思います。

How To: ASP.NET 2.0 で偽装と委任を使用する方法
https://msdn.microsoft.com/ja-jp/library/ms998351.aspx

ただし、

> IIS WEBサーバーとSQLサーバーが別PCです。

ということですので、質問者さんが前のレスで書かれた、

> Kerberos 認証および委任を使用する方法。
> が該当するように思えます。

が正解のはずです。つまり、偽装だけではダメで委任の設定が必要です。

Web サーバーのブラウザからアクセスする場合はダブルホップにならないので委任の設定
なしでも接続できたということだと思います。

引用返信 編集キー/
■77644 / inTopicNo.7)  Re[5]: IIS7.0の認証について
□投稿者/ WebSurfer (702回)-(2015/11/10(Tue) 13:24:10)
No77642 (ふるふる さん) に返信
> すいません、早とちりでした。
>
> 確認していたらASP.NET Impersonateで個人のID/パスワードが設定されていました。
> クライアントからは接続できていません。


それは私が最初のレスで書いた「図 3. 信頼済みサブシステム モデル」で、

> SQL Server のログインや DB のアクセスに専用のドメインユーザーアカウントを
> 設けてそれでアクセスしたいということであれば、そのアカウントを偽装すること
> になります。

という形になっているようですが、であればクライアントは直接 SQL Server には接続
できてはいないものの、その「個人」の権限が適切に設定してあれば、クライアントは
SQL Server を利用できると思いますが。

その場合、シングルホップなので委任なしで接続できるはずで、委任とかの面倒なこと
はしなくても、それで十分ではないかという気がするのですが。

ユーザー別の権限で SQL Server の認証・承認が必要という理由があるのでしょうか?

引用返信 編集キー/
■77645 / inTopicNo.8)  Re[6]: IIS7.0の認証について
□投稿者/ ふるふる (15回)-(2015/11/10(Tue) 14:13:46)
回答ありがとうございます。

個人(IUSR含む)の設定でSQLサーバーに接続はさせたくないと考えています。
クライアントがSQLサーバーへの接続権限があるならそのままで接続させたいと。
IUSRユーザーに対し、新たにSQLサーバーへの接続権限を与えれば解決はしますが、
SQLServerへのユーザーの追加は必要ないのでは? というのが社内の意見です。
利用するクライアントのユーザーがSQLサーバーに接続できるのだから必要ないでしょ、と。

ダブルホップ、ということですね。

> ユーザー別の権限で SQL Server の認証・承認が必要という理由があるのでしょうか?

クライアントの権限で接続するのがシンプルでしょ、と言われています。
また開発者には開発者用のユーザー/パスワードがありますので、実行環境におけるユーザー/パスワードは
管理者以外には非公開にしたい、というのもあります。







引用返信 編集キー/
■77646 / inTopicNo.9)  Re[7]: IIS7.0の認証について
□投稿者/ WebSurfer (703回)-(2015/11/10(Tue) 15:12:29)
No77645 (ふるふる さん) に返信

> 個人(IUSR含む)の設定でSQLサーバーに接続はさせたくないと考えています。
> クライアントがSQLサーバーへの接続権限があるならそのままで接続させたいと。
> IUSRユーザーに対し、新たにSQLサーバーへの接続権限を与えれば解決はしますが、
> SQLServerへのユーザーの追加は必要ないのでは? というのが社内の意見です。
> 利用するクライアントのユーザーがSQLサーバーに接続できるのだから必要ないでしょ、と。

話が通じてないです。

IUSR とは、匿名認証が有効化されている場合に IIS によって使用さ
れる既定の ID です。

匿名認証が無効になっていて Windows 認証が有効になっている場合は
IUSR が SQL Server にアクセスに行くことはありません。

質問者さんの環境ではまず間違いなく匿名認証が無効、Windows 認証が
有効になっているはずですが違いますか? であれば、IUSR に SQL
Server に対するアクセス権を与える必要は全くありません。

匿名認証が無効、Windows 認証が有効、ASP.NET 偽装が無効になってい
る場合は、ワーカープロセスを実行しているアカウント(IIS7 では
NETWORK SERVICE)が SQL Server にアクセスに行きます。これが先の
レスで紹介した下記です。

How To: ASP.NET で Network Service アカウントを使用してリソースにアクセスする方法
https://msdn.microsoft.com/ja-jp/library/ms998320.aspx

匿名認証が無効、Windows 認証が有効、ASP.NET 偽装を有効として、単
純に <identity impersonate="true" /> とした場合にはログインユーザ
ーの Windows アカウントで SQL Server にアクセスに行きます。これが
多分質問者さんが今考えているやり方で、ダブルホップとなるので
「Kerberos 認証および委任を使用する方法」でないとダメです。質問者
さんがその設定を問題なくできるスキルがあると言うなら、これでもいい
かもしれません。

でも、「クライアントの権限で接続するのがシンプルでしょ」というのは
「Kerberos 認証および委任を使用する方法」を具体的に分かってないか
らそう言うのではないかと思います。

上記の状態から、偽装の設定に userName 属性、password 属性の設定を
追加し、特定の Windows ユーザーアカウントを偽装した場合は、常に
userName 属性に設定したユーザーアカウントで SQL Server にアクセス
に行きます。そのアカウントの権限を極限られてものにしておけばセキュ
リティ的には問題ないのでは? ユーザー認証は最初に Web サーバーが
行うわけですし。なので、先のレスで自分はこれで十分ではないのかと言
いました。

引用返信 編集キー/
■77654 / inTopicNo.10)  Re[5]: IIS7.0の認証について
□投稿者/ ふるふる (16回)-(2015/11/11(Wed) 12:36:45)
No77643 (WebSurfer さん) に返信

SQLServerにログインユーザー(ドメイン名\マシン名$)を追加して、IISサーバーからデータベースにアクセスできるようになりました。
この方法でいいかどうか、社内で話してみます。
ケルベロス認証と委任による接続方法は、ActiveDirectoryの設定が必要なので、こちらも社内の関係者と話して、
設定できるかどうか確認してみます。

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -