에서 결과 세트의 데이터 보안 기존 데이터베이스에 전체 텍스트 검색 기능을 추가해야합니다. 물론 Solr 나 Elastic Search와 같은 것이 있습니다. 필자가 취해야 할 차단 점은 기본 검색 엔진에서 반환 된 결과를 안전하게 표시하는 방법입니다. Solr 또는 Elastic Search에 대해 생각해 봅시다. 그 외 다른 솔루션이나 엔진도 평가됩니다.Elastic Search, Solr 또는
까다로운 문맥은 예를 들어 내 시스템의 개인 프로필 기록에서 색인을 생성해야한다는 것입니다. 개인 프로필의 필드 중 하나는 관리자의 의견입니다. 일반적으로이 필드는 직원의 직속 관리자와 상위 계층에서만 볼 수 있습니다. 즉, 다른 지점의 '관리자'는 해당 필드를 볼 수 없습니다. 그러나 전체 텍스트 검색을 통해 해당 필드를 검색 할 수 있지만 실제로 볼 수있는 사용자 만 검색 할 수 있습니다.
이제 Solr에 'stupid'(즉 쿼리 문자열) 쿼리를 실행하면 N 개의 문서가 반환됩니다. 최종 사용자에게 반환 할 때 최종 사용자는 주어진 사람의 관리자가 아니기 때문에 '관리자의 피드백'필드를 제거합니다. 그러나 결과 세트의 문서가 이미 '어리석은'사람들의 증거입니다 ...
질문은 - 그 유스 케이스를 처리 할 수있는 유용한 접근법은 무엇입니까? 출력용 자체 보안 필터로 Solr/ES에 연결할 수 있습니까?
주의 사항은 :
- 는 필터링 필드 만 검색 엔진이있는 필드를 말하지 않기 때문에
- 작동하지 않습니다 전체 문서를 필터링 때문에 위에서 언급 한 시나리오
작동하지 않습니다 일치 - 따라서 필드별로 결과 집합을 수동으로 필터링 할 수 없습니다. http://elasticsearch-users.115913.n3.nabble.com/Best-way-to-return-which-field-matched-td2713071.html
- 결과 세트의 ueses가 패싯을 망칠 것입니다 (예 : 엔진에 의해 반환 부서 일치)의 수 - 난에이 수동으로면을 다시 계산하거나 수동으로 기록을 필터링하는 일치하지 않으며 실제로 사용자
언급하지 않았지만이 접근법은 이미 평가되었으며 거부되었습니다. ouID 수는 실제로 (5000 명 이상의 직원으로 구성) 크게 될 수 있기 때문에 거부되었습니다. 이는 제한 가능한 필드마다 (10-20을 곱하는 등) 수행해야합니다. 이는 ~ 50000 개 항목의 오버 헤드를 제공하고 solr에 대한 쿼리를 과도하게 만듭니다. 마지막으로 - 조직 구조가 변경되면 완전히 망가질 것입니다. (- 모든 ACL을 다시 계산해야합니다.) –
비정규 화에는 장단점이 있습니다. 오버 헤드는 평균 조직 구조의 깊이입니다. 20은 일부 직원이 20 CEO의 수준에 상관없이 솔직한 응답 시간은 100ms 미만입니다 (800,000 건 이상의 평균 응답 시간은 약 50ms입니다). 조직이 크게 바뀌면 전체 데이터베이스를 다시 인덱싱합니다 (5000 명 이것은 약 10-30 초 정도 걸릴 것입니다.) – Matej
내 의견에 뭔가 빠져있는 것 같아요. '20'내 경우에 색인이 생성되는 각 레코드는 각각 20 개의 서로 다른 필드가있어서 각각의 권한 부여 규칙이 있습니다. 따라서 ACL 이 필드들 각각에 개별적으로 할당되어야한다. 나는 무엇이 ouId에 저장 될 필요가 있는지를 다르게 이해한다고 생각한다 - 일반적으로 이것은 'allow'/ 'deny'를위한 동적 규칙이 될 수있다. 따라서 회사의 각 사용자는 이렇게 지정하면 ACL이 실제로 길어집니다. 귀하의 솔루션은 ACL 할당 (조직 단위에 대한 세분성)의 하나의 유스 케이스만을 처리합니다. 우리는 자신을 다음과 같이 제한 할 수 없습니다 :( –