いいえ - 委任のためにサーバーを信頼するために Kerberos (SPN) が必要であり、これがそれを行う唯一の方法であると言うのは正確ではありません。はい、これはそれを行う 1 つの方法です (そして、Kerberos 経由で実現するにはすべてが必要です) が、これが唯一の方法ではなく、技術的に最も安全な方法または最も簡単な方法でもありません。追加の構成を行い、SQL で DB へのすべての Web ユーザーのログインを作成する必要がありますか? これらのアカウントのいずれかが侵害された場合はどうなりますか? より多くのアカウント、より多くの脆弱性。
いいえ、代わりにドメイン サービス アカウントを作成し、SQL にアクセスできるようにします。セキュリティ担当者が物事をロックする場合は、そのユーザーに、サービスとしてログオン、バッチ ジョブとしてログオン、およびローカル ログオンを許可する権限を付与します。または、これが単に理論を開発してテストするためのものである場合、または設定を気にしない、または設定を見つけることができない、または後でエラーが発生する場合、これは多くのフォロワーを獲得しない可能性がありますが、ローカル管理者を付与します (場合によっては、あなたがしなければならないことをしなければなりません-一部のセキュリティ専門家は、私が書きたいと思うよりも厳しく物事をロックします-後でいつでもセキュリティのトラブルシューティングを行ってロックダウンすることができます)。次に、そのアカウントをアプリ プールのカスタム アカウントとして設定し、そのアカウントに SQL でのログインを付与します。その1つのデータベースだけでdboを与えます。
IIS の Web サイトで、認証の種類を Windows に設定します。他のブログで「基本」と言っているのを見たので、Kerberos は機能しますが、NTLM は Windows 認証を使用します。IIS 7 では、ASP .NET 偽装を有効にすることもできます。個人的には、IIS 6 でしかこれを試したことはありませんが、プリンシパルは同じです。
web.config で、これを の下に追加します<configuration>
。これは の「ピア」<system.web>
です。
<connectionStrings>
<add
name="NorthwindConnectionString"
connectionString="Data Source=serverName;Initial
Catalog=Northwind;Integrated Security=SSPI;User
ID=userName;Password=password"
providerName="System.Data.SqlClient"
/>
</connectionStrings>
そしてで<system.web>
:
<authentication mode="Windows"/>
<identity impersonate="true"
userName="domain\user"
password="password" />
次に、次のように文字列をアプリに読み込みます。
using System.Configuration;
string connString = String.Empty;
if (ConfigurationManager.ConnectionStrings.ConnectionStrings.Count > 0)
{
connString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
if (connString != null) // do DB connection stuff here
Console.WriteLine("Northwind connection string = \"{0}\"",
connString.ConnectionString);
else
Console.WriteLine("No Northwind connection string");
}
http://msdn.microsoft.com/en-us/library/ms178411.aspxを参照してください。
偽装タグと SQL 接続のために web.config にそのアカウントを入力した後、サービス アカウントに接続しない場合は、WindowsImpersonationContext ( http://msdn.microsoft.com/en-us ) を使用して偽装メソッドを使用できます。 /library/system.security.principal.windowsimpersonationcontext.aspx )。具体的には、トークンを取得した後に wic.Impersonate() と wic.Undo() が必要です。サービス アカウントのドメイン、名前、およびパスワードは、web.config から AppKeys の形式で読み取ることができます。
要するに、問題を回避する方法があります。web.config でパスワードを暗号化することもできます - ConnectionString と、「impersonate」タグに直接ではなく AppKey に保存する場合、そこにプレーン テキストのパスワードを入れたくない場合 (これは私は反対することをお勧めします)、偽装メソッドを使用する必要がある場合は、ログオン トークンの作成に使用できます (私が行ったように)。