3

統合認証を使用して、WebパーツからSQLデータベースにアクセスしたいと思います。IISアプリケーションプールIDを使用する必要があります。

デフォルトでは、次のエラーが発生します。

System.Data.SqlClient.SqlException: Login failed for user 'SERVER\IUSR_VIRTUALMACHINE'.

web.configでは、偽装がtrueに設定されているためです。

<identity impersonate="true" />

これをfalseに設定すると、データベースコードが機能します。匿名でアクセスされたサイトも機能します。ただし、認証を使用するSharePointサイトは失敗するため、これは実際の解決策ではありません。

これを解決するには、昇格された特権で実行するためにすべてのデータベースアクセスコードをカプセル化する必要がありますが、SharePointは内部でどのように実行しますか?どういうわけか、それは最もパフォーマンスの高いソリューションのようには思えません。それでも、SQLセキュリティを使用してSharePointカスタムWebパーツからデータベースにアクセスする方法はありますか?

4

3 に答える 3

4

web.config ファイルの要素<identity /><authentication />要素は、統合認証を使用する場合に SQL Server への接続に使用されるアカウントを一緒に決定します。

が構成されている場合<authentication mode="Windows" />は、ユーザーの認証を IIS に委ねます。あなたのweb.configには次が含まれていると思います:

<authentication mode="Windows" />
<identity impersonate="true" />

IIS が匿名ユーザーを許可するように構成されていること。この設定<identity impersonate="true" />により、IIS は IIS 匿名アクセス アカウントの ID を SQL Server に渡します。

Lars が指摘するように、SPSecurity.RunWithElevatedPrivileges を使用すると、目的が達成されます。パフォーマンスに顕著な影響が見られるとは思いませんが、それはテストできるものです:-)

于 2009-06-30T07:30:07.673 に答える
0

これは正しくありません。が true に設定されているため<identity impersonate="true" />、ASP.NET / IIS は現在ログインしているユーザーとしてスレッドを実行します (アプリ プール アカウントではなく、Web サイトにログインしている実際のユーザー)。

ここで何か他のことが起こっています。カスタム データベースの接続文字列を投稿していただけますか? (コース外の個人データを差し引いたもの)

于 2009-06-30T05:59:44.637 に答える