데이터베이스의 모든 비 시스템 뷰에만 사용자 액세스 권한을 부여 할 수있는 방법이 있습니까?


9

SQL Server에서는 특정 데이터베이스에 사용자가 있으며 데이터베이스의 모든 비 시스템 뷰에만 액세스 권한을 부여하라는 요청을 받았습니다. 유형 뷰의 보안 가능 항목을 편집하고 각각에 대해 선택 권한을 부여하면이 작업을 수행 할 수 있다고 생각하지만 많은 뷰가 있습니다. 이것을 달성하는 더 효율적인 방법이 있습니까?

답변:


8

다음 과 같은 구문 이 없습니다

GRANT SELECT ON ALL::Views TO SomeUser 

당신은 할 수 있습니다 GRANT SELECT개별 권한 개체 , 스키마 또는 전체 데이터베이스 에만 개체 유형에 의해 필터링하지만이 뷰를 포함한다. 이런 종류의 임시 작업의 경우 아마도라는 새 역할을 만들고 ViewReaderSSMS 실행에서 해당 역할에 사용자를 추가합니다.

SELECT 'GRANT SELECT ON ' + 
          QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name) + 
      ' TO ViewReader;'
FROM sys.views
WHERE is_ms_shipped = 0

GRANT필요한 권한 으로 실행할 스크립트를 생성합니다 .


매우 우아한 답변에 감사드립니다. 스크립트가 약간 어려워서 구현하기 전에 약간의 독서를 할 것입니다. 다시 감사합니다.
Christopher Garcia

1
@lush-스크립트는 검토, 복사, 붙여 넣기 및 실행 명령을 제공합니다. 결과를 연결하기 위해보다 정교한 작업을 수행 할 수는 EXEC있지만 일회성 작업을 귀찮게하지는 않습니다.
Martin Smith

이해합니다.이 문제에 대한 완벽한 솔루션입니다. 감사합니다.
Christopher Garcia

4

내 경우에는 다른 접근 방식을 취했습니다. 이것이 내가 한 일입니다.

  1. 로그인을 작성하여 데이터베이스에 맵핑하십시오.
  2. 예를 들어, 데이터베이스로 이동하여 Public_View라는 스키마를 작성하십시오. 이 스키마의 소유자는 뷰가 참조 할 테이블의 소유자와 동일해야합니다.
  3. 새 사용자에게 새 스키마에 대한 액세스 권한을 부여하십시오.
  4. 새 스키마에서 원하는만큼보기를 작성하면 새 사용자가 액세스 할 수 있습니다.

좋은 점은 새로운 사용자가 테이블에 액세스 할 수없고 테이블을 볼 수도 없다는 것입니다.

도움이 되길 바랍니다.


4
+1이 솔루션에 대한 좋은 점은 새보기를 만들 때 명시 적으로 권한을 할당 할 필요가 없다는 것입니다.
Martin Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.