web-dev-qa-db-ja.com

データベースロールにスキーマの実行権限を付与するにはどうすればよいですか?私は何が間違っているのですか?

SQL Server 2008 Expressエディションを使用しています。

ログイン、ユーザー、ロール、スキーマを作成しました。ユーザーをログインにマップし、ロールをユーザーに割り当てました。

スキーマには、いくつかのテーブルとストアドプロシージャが含まれています。

ロールにスキーマ全体の実行権限を持たせたいのですが。

Management Studioを介して、およびクエリウィンドウにコマンドを入力して、実行権限を付与しようとしました。

GRANT EXEC ON SCHEMA::schema_name TO role_name

しかし、SQL Management Studioを使用して(作成したログインとして)データベースに接続すると、最初にストアドプロシージャが表示されませんが、さらに重要なことに、それらを実行しようとすると、アクセス許可拒否エラーが発生します。

問題のストアドプロシージャは、同じスキーマ内のテーブルからデータを選択する以外は何もしません。

次の行を含む、または含まないストアドプロシージャを作成してみました。

WITH EXECUTE AS OWNER

これは何の違いもありません。

スキーマの作成時にエラーが発生したか、どこかに所有権の問題があると思われますが、何かを機能させるのに本当に苦労しています。

ストアドプロシージャの実行に成功した唯一の方法は、ロールに制御アクセス許可を付与することと実行することですが、これが正しい安全な方法であるとは思いません。

どんな提案/コメントも本当にいただければ幸いです。

ありがとう。

2
Lewray

以下のテクニックで幸運を祈りました(例として"myschema"という名前のスキーマを使用)。ほとんどの部分が配置されているように見えますが、スキーマ/ロールの所有権が正しく設定されていない可能性があります。

-- Create the role that will own the schema
CREATE ROLE [myschema_owner] AUTHORIZATION [dbo];

-- Create the role that will have execute permissions on the schema
CREATE ROLE [myschema_execute] AUTHORIZATION [dbo];

-- Create the schema owned by our role
CREATE SCHEMA [myschema] AUTHORIZATION [myschema_owner];

-- Assign execute permissions to execute role
GRANT SELECT, EXECUTE ON SCHEMA::[myschema] TO [myschema_execute];
3
user113230

これを特定のスキーマに制限する方法はわかりませんが(構文は機能するように見えますが)、データベース全体に対する実行権限が許容される場合は、次の方法でうまくいきます。次に、次のような役割にログインを追加します。 Ankurは説明します。

grant execute to <ROLE_NAME>

また、このロールにVIEW DEFINITIONを付与すると、ロール内のログインが許可され、ストアドプロシージャが表示されます。

2