MS SQL 2008でasp.net 4 c#およびエンティティフレームワーク4を使用しています。IIS 7.を使用してローカルでWebアプリケーションをセットアップしようとしています。
私のWebサイトでは、Aspメンバーシッププロバイダーを使用しており、db(aspnet_)にさまざまなテーブルとsprocをインストールしています。
スクリプトを実行すると、次のエラーが表示されます。
The EXECUTE permission was denied on the object 'aspnet_CheckSchemaVersion', database 'XXX', schema 'dbo'. at System.Data.SqlClient.SqlConnection.OnError
メンバーシップテーブルに関連するいくつかのdbロールが必要です(例:aspnet_profile_fullaccess)。使用しているアカウントが適切なロールのメンバーであることを確認してください。
DBに接続するユーザーにdbowner権限を割り当てないでください。アカウントには、必要な権限のみが付与され、それ以上の権限は付与されません。あなたがdboを許可すると、誰かがあなたのウェブサイトの欠陥を悪用した場合、彼らは彼らが望むものへのあなたのデータベース全体への完全な制御されていないアクセスを持ちます-テーブルを削除し、自由にデータを変更します。
ユーザーをdb_ownerにすべきではないと思います。私は同じ問題を抱えており、BasicAccessの4つのロールをユーザーに付与して、すべてのストアドプロシージャに対する実行権限を付与するだけで十分でした。
GRANT EXECUTE TO [theUserName];
これは理想的ではないことを知っています。必要なストアドプロシージャに対してのみEXECUTE権限を付与する必要がありますが、ユーザーが実行できる必要のあるSPが見つかるまでの簡単な解決策が必要な場合は、これでうまくいくはずです。
問題は、アプリケーションがログインに使用しているユーザーIDがデータベースに十分な権限を持っていないことです。データベースの所有者であるか、すべてのaspnet_ストアドプロシージャに対するアクセス許可が付与されている必要があります。
したがって、この特定のユーザーのSQL Server 2008の権限を確認してください。可能であれば、このユーザーをdbownerにします。
お役に立てれば...
編集:パーミッションの問題があることを確認するためだけにdbownerにしたかったのですが、問題がわかったら、そのユーザーにパーミッションを割り当てることができます。したがって、正確な原因と正確な解決策を知っています。
Db_ownerロールを追加して権限エラーを確認することでテストできることに同意します。ただし、テストのみを行い、役割を削除することが急務であることに注意してください。
[ログインユーザー]を右クリックして[プロパティ]を選択し、[ユーザーマッピング]をクリックします。
提供されたSQLエラーを見ると、これは「実行権限が拒否されました」に基づく問題であると推測できます。テストと確認としてdb_ownerロールを使用した後、さまざまなSQLステートメントを見て、どのストアドプロシージャが呼び出されているかを確認できます。たとえば、以下を検討してください
SQL As String = "EXEC [EAC]。[myStoredProcedure]"など。 。 。 」
アプリケーションが使用するさまざまなストアドプロシージャを見つけたら、それらの特定の実行に対して実行を許可できます。たとえば、次のSQLを考えてみます。
USE DATABASE
GRANT EXECUTE ON OBJECT::EAC.myStoredProcedure
TO myRoleorUser;
コードで言及されているEAC.myStoredProcedureは、データベースを展開してから、プログラマビリティを展開してから、ストアドプロシージャを展開したときに見つかります。
SQLサーバー上の特定のストアドプロシージャを対象とする場合の詳細については、Microsoft KBをご覧ください。 https://docs.Microsoft.com/en-us/sql/relational-databases/stored-procedures/grant-permissions-on-a-stored-procedure?view=sql-server-2017