0

私の webapp は、5 つのスキーマを持つ SQL 2008 データベースでストアド プロシージャの読み取り、書き込み (INSERT、UPDATE、DELETE)、および実行を行う必要があります。

SQL を介して認証するユーザーを作成し、[セキュリティ] -> [ログイン] -> [(ユーザー名) プロパティ] -> [ユーザー マッピング] を介して、ユーザーに db_datareader、db_datawriter、および db_procedureexec を付与しました。次に、ユーザー名と適切なパスワードを使用してデータベースに接続するようにアプリを構成しましたが、ストアド プロシージャを実行しようとすると、次のエラーが発生しました。

The EXECUTE permission was denied on the object '(stored procedure name)', database '(new database)', schema '(schema 1)'.

データベースのセキュリティ セクションでこのユーザーを見つけ、DB 内の 5 つのスキーマの所有者にしました。

付与した特権が多すぎませんか? プロシージャの読み取り、書き込み、および実行を行うために、アプリケーション レベルのユーザーはスキーマの所有者である必要がありますか?

4

2 に答える 2

2

いいえ、プロシージャの読み取り、書き込み、および実行を行うために、アプリ ユーザーがスキーマの所有者である必要はありません。

次のように言うことができます。

GRANT EXEC ON SCHEMA::whatever TO [user];

これにより、[whatever] スキーマでプロシージャを実行できるようになります。推移的な権限を必要としないために (たとえば、プロシージャが動的 SQL を実行するなど)、それらを に設定することを検討できますEXECUTE AS OWNER

于 2012-06-13T21:53:44.823 に答える
0

アプリケーション ユーザーにデータベースの所有権を付与したくない場合。これにより、基本的にカートブランシュが提供されます。あなたがすべきことは、ユーザーに役割を付与db_datareaderdb_datawriter、適用可能なすべてのストアドプロシージャと関数の実行を許可することです。

于 2012-06-13T21:59:51.250 に答える