3

私は開発者 MVC4 + EF Code First + SQL Server 2008 Web アプリを持っています。IIS7でprodサーバーにアップロードしました。新しい資格情報を作成しましPCた。空のデータベースPCDBを SQL Server に追加し、所有者権限でユーザー PC を割り当てました。Web アプリを実行するとエラーが発生する

データベースにモデル メタデータが含まれていないため、モデルの互換性を確認できません。モデルの互換性は、Code First または Code First Migrations を使用して作成されたデータベースに対してのみ確認できます

私の接続文字列は

data source=174.xx.x.x;initial catalog=pcdb;user id=pc;password=xxxxx;

例外は理解できPCDBます。データベースを削除して、EFCode First にそれ自体を作成させることができます。しかし、資格情報はPCどうですか? ユーザーを管理者にしたくありませんPCが、それがなければ、EF Code First は SQL Server に新しいデータベースを作成できません。

問題を解決するには?

4

1 に答える 1

0

全体的な設計は、WebsiteASP.NET/IIS でのフォームまたは Windows 認証から始まります。そして、あなたが望む/必要とするアプリケーションとDBの認証で終わります。アプリケーションの承認は別のトピックです。ここではそれについては説明しません。

必要な認証モデルを実際に述べることはありません。だから私は免責事項から始めます。これは、本番サイトで使用したい提案です。しかし、それは究極の最終的なゲームではありませんし、あなたが検討する唯一の短期的な解決策でもありません.

これは、ワンマンショーが機能するソリューションです。また、安全であり、実行を継続するための過度の管理者の労力は必要ありません。

Windows Auth 経由で SQL サーバー ログオンを使用します が、すべてのユーザーを SQL サーバーに追加する必要はありません。
偽装のオプションもあります。しかし、それはトリッキーになる可能性があり、この説明はなりすましではありません。それは別の別のアプローチです。

まず、Web サイトが Windows 認証を使用していることを確認してください

Windows 認証を使用するように IIS を設定します。 ここに画像の説明を入力

これで、設定した IIS 上の Web サイトの背後にある APP プール。.

開始する良い方法として、APP プール内の疑似サービス ユーザーを提案します。つまり、WEBAPPLICATION_X_USER です。APP プールごとに個別のユーザーを持つことができます。各ユーザーは自分の DB のみにアクセスできます。したがって、アプリケーションの分離が得られます。ここにユーザーとパスワードを入力します。IIS は、必要に応じて暗号化および復号化します。(Web.config の計画テキストよりも優れています)

ここに画像の説明を入力 このユーザーは、サーバー自体で認証を減らす必要があります。ドメインまたはローカル管理者の管理者ユーザーではありません。SQLサーバーを使用してDBを作成できるように十分です。 したがって、通常のWindowsユーザーを作成します

ASP.Net を DB にログオンさせます。ASP.net でパスワードを暗号化および復号化します。

SQL サーバーでの特別なサービス ユーザー権限

したがって、状況は IIS 上の Windows AUTH です。IIS には、SQL サーバーにログオンできる特別な Windows ユーザーを持つアプリケーション プールがあります。このユーザーを SQL サーバー インスタンスに追加し、このサービス ユーザーに DB を作成する機能を割り当てました。ユーザーにすべてのデータベースへのアクセスを許可しないでください:-)作成するものだけです。さらに、パブリック アクセス (EF 経由)。

WEB APP でユーザー資格情報の状況を確認します。[System.Security.Principal.WindowsIdentity]を参照してください。 これにより、Windows で認証されたエンド ユーザーが表示されます。

System.Environment.UserName には、IIS APP POOL に配置したサービス ユーザー ID が必要です。

これで、EF が SQL サーバー インスタンスでデータを作成またはアクセスするときに、WEB.CONFIG エントリが Windows 統合セキュリティを使用するように設定されている場合、System.Environment.UserName に接続します。

<connectionStrings>
<add name="DbContextName" connectionString="Data Source=Your SQL server Instance;Initial Catalog=The DBNAME;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

そして、あなたは認証されたユーザーを知っていますhttpContextは、スレッドの現在のプリンシパルと同様にそれを提供します。HttpContext.User はデフォルトで {System.Security.Principal.WindowsPrincipal} にマップされます

したがって、アプリケーション レベルのチェックを実行できます。同じアプローチがフォーム認証でも機能するはずです。

警告: Windows WPFアプローチを使用している場合 (つまり、IIS を使用していないため、APP プールがない場合)、このアプローチは変更する必要があり、より複雑であり、開始するのに最適な場所ではなくなりました。

これがあなたが始めるのに役立つことを願っています

于 2013-02-19T14:20:27.930 に答える