うん - あなたはその権利を読んだ!Web アプリケーションをローカルの SQL Server Express (2008R) データベースに接続しないようにしたい!
Web アプリケーション用のドメイン ユーザー アカウントを作成し、そのユーザーをドメイン (AD) グループに追加しました。
ローカルの SQL Server インスタンスで、その AD グループのログインを作成しました。ユーザー アカウントは、SQL データベースのどこにも記載されていません。
次に、ローカル IIS で、作成したアカウントを使用するようにそのサイトのアプリ プールを変更しました。
ブラウザでローカル サイトを閲覧すると、ほら! データベースに接続します。
では、AD にアクセスして、そのユーザー アカウントを AD グループから削除します。iisreset を実行します。これで、ブラウザで自分のローカル サイトを閲覧できます。データベースに接続します。
は?どのように接続されていますか?を[Integrated Security=SSPI][2]
使用すると、アプリケーション プールで使用されているアカウントを介して認証を行う必要があります。それで、それは sql データベースにアクセスできるグループに属していないので、失敗するべきではありませんか?
どうすれば失敗しますか?他のWindows認証で接続している可能性がありますか?さて、私のサーバーのインスタンスへのログインは次のとおりです。
- mydomaingroup (アプリ プールのユーザー アカウントなし)
- 私のドメインの管理者アカウント
- さ
- NT AUTHORITY\NETWORK SERVICE ( SQL ログ ビューアを含め、すべてに必要)
AND - これらのログインのいずれも、特別なドメイン グループを除いて、データベースに許可されたユーザーにユーザー マップされていないことを確認できます。
ああ、もっと悪い。接続文字列がSSPI
を使用する場合、ユーザー名とパスワードが存在する場合はそれを受け入れて使用することになっています。したがって、AD グループから除外したアカウントのユーザー名とパスワードを指定すると、アプリケーション プールは不正な資格情報でログインしようとするのではないでしょうか? -- そう思うかもしれませんが、ほら、出来上がり!つながる!
したがって、これら 2 つの接続文字列は両方とも、SQL Server インスタンスに資格情報を持たないように見えるドメイン ユーザー アカウントに接続します。
<add name="development" connectionString="server=mycomputer\sqlexpress;database=shoppe;Persist Security Info=False;Integrated Security=SSPI; user id=myuser; password=mypassword; Pooling=True" providerName="System.Data.SqlClient"/>
<add name="development" connectionString="server=mycomputer\sqlexpress;database=shoppe;Persist Security Info=False;Integrated Security=SSPI; Pooling=True" providerName="System.Data.SqlClient"/>
追加Trusted_Connection=False;
してみましたが、まだ接続されています!
では、接続するためのアクセスはどこにあるのでしょうか? どのアカウントが接続に使用されているかを知る方法はありませんか?
一方、Integrated Security=SSPI;
接続文字列から削除すると、Windows 認証でまったく接続できなくなります。これが手がかりかどうかはわかりません。