6

우리 회사는 계약자를 고용하여 우리의 주 데이터베이스 (SQL Server 2005)의 단일보기에서 데이터를 선택해야하는 작은 프로젝트를 수행했습니다.하나의보기 만 읽을 수있는 권한을 가진 SQL Server 사용자를 만들지 만 시스템보기와 절차를 볼 수 있습니까?

"그의"보기의 SELECT에 대한 사용 권한만으로 잠금 해제 된 SQL Server 로그인을 만들고 싶었습니다.

그래서 내가 서버에 새 사용자를 생성하고 난 그냥이 하나 개의보기에 그에게 권한을 준 : 기본적으로

grant select on SpecialView to SpecialUser; 

이 작동 - 그는 우리 테이블과 저장 프로 시저 중 하나를 볼 수 없습니다 , "그의 것"을 제외하고 어떤 전망도.

그러나 :

  • 그가 모든 시스템에 액세스 할 수는
  • 그가 모든 시스템 저장 프로 시저에 액세스 할 수 있습니다 전망.

는 분명히 자신의 권한을 자동으로 잠 깁니다 (그가 권한이있는 sys.objects 쇼 개체 만, sp_who 그렇게 만 자신의 프로세스 및 표시).

그래서, 내 질문은 : 그것은 시스템 뷰 및 저장 프로 시저에 액세스하지 않고 사용자를 생성 할 수

인가?
(그래, 내가 무슨 일을하고 있는가하면?)

또는 심지어 잠긴 사용자가 시스템 뷰 및 저장 프로 시저에 액세스해야하는 이유 몇 가지 이유가있다?

편집 :
kevchadders, 사용자는 마스터, 모델 또는 MSDB에 액세스 할 수 없습니다 - 단지 그가보고하도록되어 볼 수있는 데이터베이스에.

그러나 한 가지를 명확히하기 위해 사용자가 볼 수있는 시스템보기/procs는 ...이 마스터 데이터베이스가 아닌 데이터베이스에서 입니다. 동일한 데이터베이스에서 하나의보기를 선택해야하므로 그의 모든 액세스를 비활성화 할 수는 없습니다.
요점은 그가 볼 수있는 단일보기에 대해서만 명시 적으로 권한을 설정하더라도 왜 여전히 시스템보기/procs를 볼 수 있습니까?

답변

2

DENY VIEW DEFINITION을 사용하십시오. 뷰 및 저장 프로 시저의 존재 여부를 확인하는 기능은 제거 할 수 없지만 대부분의 내용을 볼 수있는 기능은 제거 할 수 있습니다. 예를 들어

deny view definition to smallperms_role 
go 
sp_addrolemember 'smallperms_role ', 'smallperms_user' 
go 
sp_addrolemember 'db_datareader', 'smallperms_user' 
go 

:
EXEC sys.sp_databases 반환 아무것도하지만, 실행합니다.
SELECT * FROM INFORMATION_SCHEMA.TABLES은 아무 것도 반환하지 않지만 오류는 반환하지 않습니다.

1

사용자를 마우스 오른쪽 버튼으로 클릭하고 사용자 매핑 페이지를 선택하십시오. 당신이 마스터, 모델MSDB 데이터베이스에서 그의 모든 액세스를 해제가 시도에서

?

나는 그가 그 시스템 뷰/저장된 procs를 실행할 때 자신의 로그인에 어떤 영향을 미치는지보기 위해 퍼블릭 롤을 제거하려고 시도 할 수 있도록 그가 3 개의 모든 것에 공개적으로 설정 될 것이라고 생각합니다.

테스트 로그인을 만들어 실험 해보십시오.

+0

편집 내 대답은 위를 참조하십시오! –

0

나는 사용자를 위해 PUBLIC 액세스를 제거 할 수 없다고 생각합니다. (사용자 속성에서)

데이터베이스 속성에서 PUBLIC에 대한 사용 권한을 거부 할 수 있습니다.

  • 마우스 오른쪽 단추로 클릭 게스트 역할에 대한 권한
  • 변경 권한에 등록
  • 이동로 이동 DB
  • 합니다.

하지만 마스터 또는 임시 DB에 대한 'CONTROL'권한을 거부 할 수 없으며 마스터에서 SELECT를 거부하면 서버에 로그인 할 수 없습니다.

+0

그건 아닌 것 같아요. 우리에게는 손님 (GUEST) 역할이 없습니다. –