2012-03-15 3 views
0

スキーマを使用してデータベース内の機能を分離します。たとえば、&のCreate Value(CMV)オブジェクトはすべてCMVスキーマ内に存在します。もちろん、各スキーマはストアドプロシージャ、ビュー、関数などのオブジェクトを使用します。スキーマでSQL Serverのカスタムデータベースロールを作成する

セキュリティ目的で使用するために、スキーマで一連のデータベースロールを作成します。

db_datareader 
db_datawriter 
cmv_executor //for stored procs and functions 
cmv_viewer //for views 

だから私の質問は次のとおりです:たとえば

I GRANT EXECUTE(または何でも)するにはどうすればよいさまざまなビュー、関数やストアドプロシージャ(など)のスキーマによってとせずに、単一の役割にそれらを束ねます手で各GRANTを実行していますか?

答えて

1

スキーマ権限

-- execute permission on programmability objects in CMV schema 
GRANT EXECUTE ON SCHEMA::CMV TO cmv_executor 
-- DML permissions on tables/views in CMV schema 
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::CMV TO cmv_viewer 

ユーザーがCMV以外のスキーマ内のオブジェクトのためのリード/ライトを必要としない限り、これはdb_datareaderdb_datawriter役割にユーザーを追加するための必要性を排除する必要があります。

granting schema permissionsの詳細については、こちらをご覧ください。

オブジェクト権限

-- use output of this query to grant permissions for individual objects 
SELECT 
    'GRANT SELECT ON ' + 
    QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + 
    QUOTENAME(name) + ' TO [cmv_viewer];' 
FROM 
    sys.objects 
WHERE 
    SCHEMA_NAME(schema_id) = 'CMV' 
     AND 
    type_desc = 'VIEW' 
UNION 
SELECT 
    'GRANT EXECUTE ON ' + 
    QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + 
    QUOTENAME(name) + ' TO [cmv_executor];' 
FROM 
    sys.objects 
WHERE 
    SCHEMA_NAME(schema_id) = 'CMV' 
     AND 
    type_desc IN ('SQL_STORED_PROCEDURE', 'SQL_SCALAR_FUNCTION', 
        'SQL_INLINE_TABLE_VALUED_FUNCTION'); 

私はCLRファンクションまたはプロシージャが含まれるので、必要に応じてそれらを追加しませんでした。 type_desc列の有効な値はhereです。

+0

EXECUTEはプロシージャと関数を意味しますか?他のユーザーはどのようにVIEWSに対して権限を与えますか? –

+1

ビューは 'GRANT SELECT'に含まれませんか? –

+0

@PrisonerZEROこのページでは、さまざまなオブジェクトタイプに適用されるアクセス許可とその適用方法について説明します。 http://msdn.microsoft.com/en-us/library/ms191291.aspx – Bryan

0

いくつかのオプションがあります。パーミッションは、スキーマ内のすべてのオブジェクトに対して同じである場合、あなたはこれを行うことができます。権限はオブジェクトごとのある、またはあなたの要件が複雑であれば、あなたがソース管理の権限のスクリプトを維持することができるいずれか

GRANT SELECT ON SCHEMA::CMV TO cmv_reader

そして例えば、手動で新しいオブジェクトを追加、またはメタデータからスクリプトを生成し、それを実行します。

select 
    'GRANT SELECT ON cmv.' + object_name(object_id) + ' TO cmv_reader;' 
from 
    sys.tables 
where 
    schema_id = schema_id('cmv') and 
    name like 'A%' -- or whatever 

そして、あなたは開発のために使用しているものをツールセットによっては、他のオプションがあるかもしれません。実際の要件はどれほど複雑であるかが分かりますが、メタデータからアクセス許可スクリプトを生成することは、一般的で柔軟なソリューションです。

関連する問題