사용자는 SSMS에서 기본이 아닌 스키마의 테이블을 볼 수 없습니다


10

VIEW DEFINITION내 사용자 중 하나의 스키마 수준에서 권한을 적절하게 설정하는 데 문제 가 있습니다. 스키마를 TestSchema만들고 일부 테이블을 추가했습니다. 사용자는 현재 사용 권한이 액세스 설정 및 테이블 (수정이 SELECT, UPDATE, DELETE관통 등) dbo_datareaderdbo_datawriter역할. 그러나 SSMS 개체 탐색기에서 테이블을 볼 수 없습니다.

정의를 볼 수있는 권한을 부여하려고했습니다.

grant view definition on SCHEMA :: [TestSchema] to [User]

작동하지 않았습니다. 테이블 수준 권한을 설정하려고했습니다.

grant view definition on [TestSchema].[NewTable] to [User]

그것은 또한 작동하지 않았다. 그런 다음 담요 보조금을 시도했습니다.

grant view definition to [User]

그리고 일을; TestSchema액세스 권한이 없어야하는 다른 스키마뿐만 아니라을 볼 수 있습니다 .

여기서 목표는 사용자가 주어진 스키마 내의 모든 테이블을 볼 수 있도록하는 것입니다. 어떻게하면 되나요? 내가하면 해야 기본적으로이 작업을 수행 할 수있을, 나는 왜 수 없습니다 찾을에서 어떤 권한을보고해야 하는가?


2008_R2 인스턴스에서 db_datareader 또는 db_datawriter를 부여하면 모든 스키마를 볼 수 있습니다. 나는 그것이 당신이 찾고있는 것이 아니라는 것을 알고 있지만 설정과 광산 사이에 큰 차이가 있으므로 실제로 테스트 할 수는 없습니다. 버전이 다르거 나 다른 보안이 수정 되었습니까?
cfradenburg

@cfradenburg-말하기 어렵다. 이것은 IT에서 관리하는 서버이므로 수행 한 작업이 확실하지 않으며 SQL Server 초보자이므로 무엇을 찾아야할지 모르겠습니다. 내 질문의 일부는 다른 권한 / 역할 / ??입니까? 권한으로 간단하게 해결할 수 있는지 확인해야합니까?
eykanal

사용자가 테이블을 쿼리 할 수 ​​있습니까? 그들이 쿼리 할 수 ​​있다면 SSMS 내에서 문제 일 수 있습니다.
user9164

@ user9164 예, 사용자 테이블을 쿼리 할 있습니다. SSMS 내에서 보는 문제 일뿐입니다.
eykanal

답변:


11

짧은 답변 : 음주 사용하지 db_datareader거나 db_datawriter또는 동등들이 거부합니다. 이전 버전과의 호환성을 위해서만 사용됩니다. 그것들을 사용하면 직면 한 것과 같은 문제가 발생할 수 있습니다.

Alice Alice에 스키마 Sales의 모든 테이블 반환 개체에 대한 SELECT, INSERT, UPDATE 및 DELETE 권한을 부여하려면 다음을 사용하십시오.

GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::Sales TO Alice ;

Alice에게 모든 스키마의 모든 테이블 반환 개체에 대한 SELECT, INSERT, UPDATE 및 DELETE 권한을 부여하려면 다음을 사용하십시오.

GRANT SELECT, INSERT, UPDATE, DELETE TO Alice ;

그러면 메타 데이터 가시성이 올바르게 작동합니다.


'역방향 호환성'비트에 대한 소스가 있습니까? 스키마가 더 이상 사용되지 않는다는 것을 이해하지만 역할에 대한 정보를 찾을 수 없습니다.
Stijn

0

문제를 일으키는 어딘가에 거부가있을 수있는 다른 권한을 교장을 살펴보십시오. 거부는 항상 보조금 상단에 적용됩니다. 그리고 servr이 아니기 때문에 IT 부서가 설정 한 계정에 무언가가있을 수 있습니다.

서버 수준에 다음과 같은 것을 사용하십시오.

    use master
    go
    SELECT a.*,b.name as 'Login ID' FROM sys.server_permissions as A inner join 
    sys.server_principals as B on a.grantee_principal_id = b.principal_id
    where b.name = 'login ID of the account'
    GO

데이터베이스 수준에서 이와 같은 것

SELECT a.*,b.name as 'Login ID' FROM sys.database_permissions as A 
inner join sys.server_principals as B on a.grantee_principal_id = b.principal_id
where b.name = 'test'
GO

의견 주셔서 감사합니다, 나는 월요일에 다시 일을 시작하면 이것을 시도합니다.
eykanal

0

SQL Server를 2008R2에서 2014로 업그레이드 할 때 이런 일이 일어났습니다. db_datareader 또는 db_datawriter 또는 이에 상응하는 거부 기능은 2008R2에서 완벽하게 작동하지만 2014에서는 작동하지 않습니다.

SQL Server 2014에서 권한을 부여하는 예

Alice 사용자에게 스키마 Sales의 모든 테이블 반환 개체에 대한 SELECT, INSERT, UPDATE 및 DELETE 권한을 부여하려면 다음을 사용하십시오.

SCHEMA에서 GRANT 선택, 삽입, 업데이트, 삭제 :: Alice에게 판매; Alice에게 모든 스키마의 모든 테이블 반환 개체에 대한 SELECT, INSERT, UPDATE 및 DELETE 권한을 부여하려면 다음을 사용하십시오.

선택, 삽입, 업데이트, Alice에게 삭제; 그러면 메타 데이터 가시성이 올바르게 작동합니다.

[Greenstone Walker]를 참조하십시오.


1
Sundeep, 그냥 링크를 제공하는 대신 답변을 설명하십시오. 도움이 필요하면 사이트 둘러보기
LowlyDBA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.