2012-03-15 3 views
0

스키마를 사용하여 데이터베이스의 기능을 분리합니다. 예를 들어 모든 & 유지 관리 값 (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 

그리고 당신은 개발에 사용중인 도구 세트에 따라 다른 옵션이있을 수 있습니다. 실제로 요구 사항의 복잡성에 따라 달라 지지만 메타 데이터에서 사용 권한 스크립트를 생성하는 것이 일반적이며 유연한 솔루션입니다.

관련 문제