1

일련의 응용 프로그램에 대한 모든 테이블이 포함 된 데이터베이스 (DB_data라고 부름)로 작업하고 있습니다. 업그레이드 중 다운 타임을 최소화하기 위해 DB_data의 각 테이블에 대한 뷰가있는 facade 데이터베이스 (DB_facade라고 부름)가 생성되었습니다. 또한 이러한 뷰에 대해 작동하는 모든 함수 및 저장 프로 시저를 포함합니다.데이터베이스 간보기 권한

DB_data에서 보안을 잠그려고 할 때 DB_data의 모든 사용자에 대해 모든 테이블에서 DENY를 수행했습니다. 이러한 모든 사용자는 뷰에 대한 사용 권한이있는 DB_facade에서도 생성되었습니다.

여기서 문제는 데이터베이스 간 소유권 체인으로 인해 DB_data의 DENY가 DB_facade의 GRANT보다 우선합니다.

원래의 테스트에서 액세스 문제를 해결 한 것 같지만 잠재적 인 보안 문제로 인해이 두 데이터베이스의 소유권 체인을 사용하지 않는 것이 좋습니다. 또한 응용 프로그램에 미치는 영향을 최소화하기 위해 모든 액세스가 저장 프로 시저를 통해 이루어지고 인증서 사용이 필요하지 않습니다.

아무도이 문제를 해결하는 방법에 대한 다른 제안이 있습니까?

감사합니다.

+0

[권한 부여] (http://www.sommarskog.se/grantperm.html) 및 [게스트 사용자 계정] (http://www.mssqltips.com/tip.asp?)에서 이러한 링크를 찾을 수 있습니다. tip = 1172) helpful –

답변

1

DB_data의 테이블에서 DENY를 제외하면이 문제가 있습니까? 이러한 테이블에 대한 사용 권한을 명시 적으로 부여하지 않으면 뷰를 통해 필요한 보안을 확보하고 액세스 권한을 얻을 수 있습니다.

+0

테이블에 대한 액세스를 거부하지 않는 한 제대로 작동하지만 DB_data를 통해 테이블에 대한 직접 액세스를 방지하려고합니다. –

+0

테이블에 GRANT가 없으므로 사용자는 테이블에 액세스 할 수 없습니다. 하지만 이것이 최선의 해결책이 아니라고 당신이 맞습니다. 나는 또 다른 생각을 가지고 있을지 모른다. 나는 다른 대답을 시도 할 것이다. – bobs

0

나는 무엇을 보아 왔으며, SQL 서버는 명시 적으로 그렇게하지 않는 한 당신이 어떤 권한도 가지지 못하게합니다. 사용자에게 DB_Data의 select (또는 역할 데이터 사용기)를 부여 할 수 있어야하며, 동일한 계정이고 두 데이터베이스 모두에 매핑되어야합니다 (db_facade에 select 및 exec를 부여해야 함). 잘 됐네.

+0

단일 데이터베이스 내에 있다면 테이블에 대한 액세스를 거부해도 해당 테이블에있는 뷰를 통한 액세스가 차단되지는 않습니다. 그러나 데이터베이스 전반에 걸쳐 사용자가 동일한 계정에 묶여 있어도 SQL Server는 사용자에게 권한이있는보기를 통해 테이블에 대한 액세스를 차단합니다. –

+0

나는 이것을 시험하기 위해 사용할 수있는 좋은 실험실 환경을 갖고 있었으면한다. – DForck42

0

DB_facade 데이터베이스의 각보기에 대해 DB_data 데이터베이스에서보기를 만들 수 있습니다. 새보기에는 표에서 선택할 수있는 권한이 있습니다. DB_data 뷰의 GRANT SELECT. DB_data의 뷰에서 DB_facade의 뷰를 SELECT로 변경하십시오. 그리고 테이블에는 DENY가 설정되어 있습니다.

나는 이것에 대한 한 가지 단점을 알고있다. 사용자는 여전히 DB_data 데이터베이스와 상호 작용할 수 있습니다. 그들은 테이블에 액세스 할 수 없지만 새보기에 액세스 할 수 있습니다.

관련 문제