2010-07-26 2 views
1

최근에 MySQL에서 PostgreSQL로 마이그레이션하기로 결정한 사람 중 하나입니다. 이전 습관이 많이 찢어졌습니다. 그러나 PostgreSQL에서 보존하고 싶은 MySQL의 기능이 있습니다.데이터베이스 유연성 및 개인 정보 보호, 숨겨진 구조, 소프트웨어 호환성 및 공용 권한

그래서 ... 주제 :

  1. 사용자는 제한된 공간에서 테이블을 생성 할 수있는 능력이 있어야합니다.
  2. 한 사용자의 테이블은 기본적으로 다른 사용자 (데이터, 구조, 저장 프로 시저 및 기타 등등)에서 볼 수 없어야합니다.
  3. 선택적으로 다른 사용자에게 GRANT 권한을 부여 받아야합니다.
  4. 새 사용자에 대한 기본 권한은 사용 권한이 없습니다 (아무 것도 읽지 않고 작성도 더 적음)
  5. 스키마를 인식하지 못하는 응용 프로그램과의 호환성을 유지하십시오. 포인트 1

:

MySQL을 아래 장소에서 솔루션은 사용자가 기준 'username_의 %'에 데이터베이스를 만들 수 있도록했다. PostgreSQL에서는 사용자 당 하나의 데이터베이스를 사용하여 원하는만큼의 스키마를 생성 할 수 있다고 생각했습니다. 그러나 데이터베이스간에 조인을 수행 할 수 없으며 동일한 데이터베이스의 스키마에서만 조인 할 수있는 한계가 있습니다.

동일한 데이터베이스에서 PostgreSQL 스키마를 모두 가질 가능성은 완전히 없지 않습니다. 그러나 그것은 포인트 2

... 다음 지점을 앓고 :

this question을 읽은 후 나는 유일한 방법은 완전히 개인 데이터가 다른 데이터베이스를 사용하는 것이었다하게 생각하는 경향이 있었다. 아직도 나는 그것을하는 방법을 알아낼 수 없다. 그리고 다른 한편으로는 이전의 점에서 언급 된 조인을 할 수있는 능력과 충돌한다.

포인트 3 :

이도 가능이나 할 당신이 필요로하는 권한의 역할 만들기 '를, 지정된 테이블/스키마에 대한 새 역할을 만들 수 있습니다.

포인트 4 : 다시

이 가능할까요? 내가 읽은 내용에서 기본 '공개'행동과 싸우고있는 것처럼 느껴지지만 관리자가 정보에 대한 액세스 권한을 부여하지 않으면 사용자에게 아무 것도 보이지 않게하고 싶습니다.

포인트 5 :

나는 그들이 데이터베이스에서 수행하는 작업의 직접 제어 할 수 없습니다하는 내가 MySQL과 사용하는 프로그램의 일부는, 인식 스키마되지 않습니다. 이는 스키마 레이어를 무시한다는 의미입니다. 이를 위해 PostgreSQL은 기본적으로 'public'스키마를 제공합니다. 그러나 이것은 어떤 경우에는 여전히 조금 어색합니다.

기본적으로 소프트웨어/도구 당 하나의 독립적 인 데이터베이스가 필요하거나 다른 사용자 (역할) 단위로 미리 정의 된 스키마로 설정하여 시스템을 트릭해야합니다.


그래서 지금까지 발견 한 옵션/해결책입니다. 나는 포인트 5search_path를 사용하지 및 테이블/개인 정보 보호를 위해서 다른 데이터베이스의 스키마 (점 12) 간의 조인 희생과 괜찮아,하지만, 난 여전히 무엇을 알고 싶습니다 위의 문제에 대한 최선의 해결책과이를 실천에 옮기는 가장 좋은 방법은 무엇입니까?

이렇게 말하면, 나는 모두 귀입니다.

PS : 위에서 언급 한 내용을 수행하는 방법에 대한 정보는 물론 환영합니다.

+0

이 올바르게 이해한다면, x 사용자가 자신의 개인 테이블을 가질 수는 있지만 서로 다른 데이터베이스에서도 여전히 올바른 작업을 수행하기를 원하십니까? – chotchki

+0

"여전히 가로 질러 갈 수 있습니다"라는 뜻입니까? 그렇다면 그렇습니다. 이것은 우리가 갖고 싶어하는 기능 중 하나입니다. – Unode

답변

1

우리가 복용 결국이 솔루션은 다음

포인트 1 : 사용자 당

하나의 데이터베이스. 사용자는 원하는만큼의 테이블과 스키마를 생성 할 수 있습니다. 데이터베이스를 통한 조인은 불가능합니다. 대안은 하위 집합을 검색하고 클라이언트에서 결과를 관리하는 것입니다. 분명히 가장 효율적인 방법은 아닙니다.

포인트 2는 :

이 주어진 데이터베이스에 대한 특정 소유권과 권한을 정의하고 기본 "공개"동작을 제거하여 수행 할 수 있습니다. 이를 통해 허용 된 그룹에 속하거나 소유자 인 사용자 만 콘텐츠에 액세스 할 수 있습니다.

참고 : PostgreSQL은 여러 수준의 사용 권한을 사용합니다. 즉, 데이터베이스가 다른 사람이 소유하고 있어도 다른 사용자가 소유 할 수 있습니다.

포인트 3은 :

WITH GRANT OPTION 수행 할 수 있습니다.

포인트 4는 :

이 작업을 수행하는 자동화 된 방법은 없습니다. 이를 보장하는 유일한 방법은 모든 기존 데이터베이스에 대한 "공개"액세스를 제한하는 것입니다.

포인트 5 :

사용자별로 search_path 사용은 (필요한 경우) 다른 스키마에 액세스하는 여러 사용자를 사용하여, 그것을 할 수있는 유일한 방법입니다. 분명히 스키마가 인식되지 않는 응용 프로그램이 search_path 사용자가없는 경우 다른 스키마에 "도달"할 수 없다는 문제가 있습니다.

관련 문제