2012-02-07 2 views
1

에서 결과 세트의 데이터 보안 기존 데이터베이스에 전체 텍스트 검색 기능을 추가해야합니다. 물론 Solr 나 Elastic Search와 같은 것이 있습니다. 필자가 취해야 할 차단 점은 기본 검색 엔진에서 반환 된 결과를 안전하게 표시하는 방법입니다. Solr 또는 Elastic Search에 대해 생각해 봅시다. 그 외 다른 솔루션이나 엔진도 평가됩니다.Elastic Search, Solr 또는

까다로운 문맥은 예를 들어 내 시스템의 개인 프로필 기록에서 색인을 생성해야한다는 것입니다. 개인 프로필의 필드 중 하나는 관리자의 의견입니다. 일반적으로이 필드는 직원의 직속 관리자와 상위 계층에서만 볼 수 있습니다. 즉, 다른 지점의 '관리자'는 해당 필드를 볼 수 없습니다. 그러나 전체 텍스트 검색을 통해 해당 필드를 검색 할 수 있지만 실제로 볼 수있는 사용자 만 검색 할 수 있습니다.

이제 Solr에 'stupid'(즉 쿼리 문자열) 쿼리를 실행하면 N 개의 문서가 반환됩니다. 최종 사용자에게 반환 할 때 최종 사용자는 주어진 사람의 관리자가 아니기 때문에 '관리자의 피드백'필드를 제거합니다. 그러나 결과 세트의 문서가 이미 '어리석은'사람들의 증거입니다 ...

질문은 - 그 유스 케이스를 처리 할 수있는 유용한 접근법은 무엇입니까? 출력용 자체 보안 필터로 Solr/ES에 연결할 수 있습니까?

주의 사항은 :

  • 는 필터링 필드 만 검색 엔진이있는 필드를 말하지 않기 때문에

    1. 작동하지 않습니다 전체 문서를 필터링 때문에 위에서 언급 한 시나리오
    2. 작동하지 않습니다 일치 - 따라서 필드별로 결과 집합을 수동으로 필터링 할 수 없습니다. http://elasticsearch-users.115913.n3.nabble.com/Best-way-to-return-which-field-matched-td2713071.html

    3. 결과 세트의 ueses가 패싯을 망칠 것입니다 (예 : 엔진에 의해 반환 부서 일치)의 수 - 난에이 수동으로면을 다시 계산하거나 수동으로 기록을 필터링하는 일치하지 않으며 실제로 사용자
을 종료 보여주고 싶지 않아 무엇을 계시 할 것이다 것

답변

1

Solr에서 multiValued 필드를 만들 수 있습니다. 귀하의 경우 조직 구조의 정규화되지 않은 값을 저장하는 데 사용할 수 있습니다.

설명 된 시나리오에서 다중 값 필드 ouId (조직 단위 ID)을 생성하고 직원의 전액과 모든 부모 비용을 저장합니다. 즉, 을 절약 할 수 있습니다.이 필드에 들어갑니다.

검색 시나리오에서 당신은 FilterQuery - fq 매개 변수를 관리자별로 필터링합니다.

예 : 12 선택 매니저의 조직 단위 ID이다

..&fq=ouId:12 

.

+0

언급하지 않았지만이 접근법은 이미 평가되었으며 거부되었습니다. ouID 수는 실제로 (5000 명 이상의 직원으로 구성) 크게 될 수 있기 때문에 거부되었습니다. 이는 제한 가능한 필드마다 (10-20을 곱하는 등) 수행해야합니다. 이는 ~ 50000 개 항목의 오버 헤드를 제공하고 solr에 대한 쿼리를 과도하게 만듭니다. 마지막으로 - 조직 구조가 변경되면 완전히 망가질 것입니다. (- 모든 ACL을 다시 계산해야합니다.) –

+0

비정규 화에는 장단점이 있습니다. 오버 헤드는 평균 조직 구조의 깊이입니다. 20은 일부 직원이 20 CEO의 수준에 상관없이 솔직한 응답 시간은 100ms 미만입니다 (800,000 건 이상의 평균 응답 시간은 약 50ms입니다). 조직이 크게 바뀌면 전체 데이터베이스를 다시 인덱싱합니다 (5000 명 이것은 약 10-30 초 정도 걸릴 것입니다.) – Matej

+0

내 의견에 뭔가 빠져있는 것 같아요. '20'내 경우에 색인이 생성되는 각 레코드는 각각 20 개의 서로 다른 필드가있어서 각각의 권한 부여 규칙이 있습니다. 따라서 ACL 이 필드들 각각에 개별적으로 할당되어야한다. 나는 무엇이 ouId에 저장 될 필요가 있는지를 다르게 이해한다고 생각한다 - 일반적으로 이것은 'allow'/ 'deny'를위한 동적 규칙이 될 수있다. 따라서 회사의 각 사용자는 이렇게 지정하면 ACL이 실제로 길어집니다. 귀하의 솔루션은 ACL 할당 (조직 단위에 대한 세분성)의 하나의 유스 케이스만을 처리합니다. 우리는 자신을 다음과 같이 제한 할 수 없습니다 :( –

1

아마도 이것은 당신에게 유용합니다 https://github.com/salyh/elasticsearch-security-plugin 탄성 검사에 문서 수준 보안을 추가합니다.

"현재 사용자 기반 인증 및 권한 부여 용 Kerberos/SPNEGO 및 NTLM은 타사 라이브러리 와플을 통해 지원됩니다 (Windows 서버 만 해당). UNIX 서버의 경우 Kerberos/SPNEGO는 SPNEGO 밸브의 tomcat 빌드를 통해 지원됩니다 (Kerberos 구현시 인증을 위해서는 Active Directory 및 일반 LDAP가 지원됨) PKI/SSL 클라이언트 인증서 인증도 지원됩니다 (CLIENT-CERT 메서드). 클라이언트 인증없이 SSL/TLS도 지원됩니다.

또한이 플러그인을 사용할 수도 있습니다 Kerberos/NTLM/PKI는 없지만 호스트 기반 인증 만 사용할 수 있습니다.

현재 두 개의 보안 모듈 수행 :문서 수준 보안 (dls) : 누가 문서 수준에서 작업을 제한합니까? 문서 내의 어느 필드를 조회 할 수 있습니까?