뷰에 외부 데이터베이스를 제공하는 방법은 무엇입니까?


8

Drupal에서 외부 데이터베이스를 사용하는 것에 대한 여기와 다른 곳에서 많은 토론이 있습니다. 내가 알아 낸 것은 다음과 같습니다.

  • 데이터베이스 테이블에서 데이터를 다루는 가장 좋은 방법은보기 모듈을 사용하는 것입니다. 나는 그것을 설치하고 그것을 사용하기 시작했고 그것이 사이트 데이터베이스에 추가 한 테이블로 작업하기에 좋습니다.
  • Drupal이 작성하지 않은 테이블을 사용하여 뷰를 작동시키는 쉬운 방법은 데이터 모듈을 사용하는 것입니다. 이 모듈은 Drupal에서 사용하지 않는 사이트 데이터베이스의 모든 테이블을 "고아 테이블"로 취급하고 버튼 클릭시 "적용"할 수 있도록합니다.
  • "테이블 마법사"모듈은 사이트 데이터베이스에없는 테이블을 사용하여이를 수행하는 방법을 제공합니다. 그러나 Drupal 7에서는 해당 모듈을 사용할 수 없습니다.
  • "데이터베이스 설정"섹션의 "settings.php"파일에는 사이트에서 사용할 수있는 추가 데이터베이스를 정의하는 방법에 대한 자세한 문서가 있습니다. 그러나 데이터베이스가 그런 식으로 정의되면 해당 테이블이 데이터 모듈의 고아 테이블 목록에 표시되지 않습니다.

내 사이트 중 하나의 "settings.php"파일에서 데이터베이스 정의를 변경 한 내용은 다음과 같습니다.

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), 'extra' => array ('default' => array ( 'database' => 'db__extra', 'username' => 'db_admin', 'password' => '_________, 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), );

다중 사이트 설치에서 둘 이상의 사이트에서 사용하려는 테이블이 있습니다. 즉, 각 사이트에서 액세스 할 수있는 데이터베이스에 테이블이 있어야합니다. 내가 한 독서에 따르면, 그 일을위한 나의 선택은 다음과 같습니다

  1. 가능한 경우 가장 좋은 방법 : "settings.php"에 정의 된 추가 데이터베이스에서 데이터 모듈이 테이블을 인식하도록하는 방법이 있으므로이를 채택 할 수 있습니다.
  2. 모든 사이트에서 하나의 데이터베이스를 사용할 수 있도록 테이블 접두사를 사용하십시오.
  3. Forena Reports ” 모듈 은 내가 원하는 것을 정확하게하는 것처럼 보였지만 설치할 때 제대로 작동하지 못했습니다. 문제 2475645를 제출 했으며 해당 문제에 대한 해결책이 없으면 더 이상 할 수 없습니다.
  4. "settings.php"에 정의 된 추가 데이터베이스에 대한보기 액세스 권한을 부여하는 자체 모듈을 작성하십시오.
  5. Drupal 6을 테이블 마법사와 함께 설치하고 뷰를 사용하여 외부 테이블을 확인한 다음 결과를 가져 와서 Drupal 7에 넣습니다 (이것은 일부 게시물에서 제안되었습니다).
  6. https://drupal.stackexchange.com/a/3321/45991 의 절차를 따르십시오. 패치 설치로 시작하여 자체 모듈을 만들어야 할 것 같습니다.
  7. 또한 Feeds, Feeds SQL, Views XML Backend 및 Migrate 모듈을 살펴 보았지만 외부 db를 Views에 연결할 수 있다고 말하는 사람은 없습니다. 뭔가 빠졌습니까? 그들 중 하나가 올바른 해결책입니까?

옵션 2는 수백 개의 테이블이있는 거대한 데이터베이스를 만들어 관리하기 매우 어렵 기 때문에 실용적이지 않습니다. Drupal을 시작하는 데 큰 진전이 있었지만 4, 5 또는 6의 과제를 느끼지 못합니다. 옵션 1과 같은 가능성이 있습니까? 아니면 내 자신의 모듈을 쓰지 않고 사이트 데이터베이스 외부의 테이블에서 뷰를 작동시키는 다른 방법이 있습니까?

두 가지 추가 세부 정보 : 작업해야 할 첫 번째 테이블은 6,000 개가 넘는 열과 약 20 개의 열이 있습니다. 페이지 방문자를 위해 데이터베이스에서 가져온 정보를 제외하고 사이트 방문자에게 데이터베이스에 대한 액세스 권한을 부여 할 의도는 없습니다.

당신의 도움을 주셔서 감사합니다.

답변:


2

나는 Forena 모듈이 실제로 당신이 원하는 것을 정확하게 생각한다고 생각 합니다 . 설치 문제는 지원 요청 일 뿐이며 "수정"이 필요한 것은 아닙니다. 해결 된 후에는 뷰 통합을 사용하거나 사용하지 않을 수도 있습니다.

작성한 Forena 문제는 매우 잘 문서화되어 있습니다 (훌륭한 작업입니다). 그러나 권한 부여 에 대해 아무것도 말하지 않습니다 (필요한 권한 중 일부가 누락되었다고 생각합니다). 그래서 여기에이를 해결하려는 시도가 있습니다 :

  • 부여한 (필수) Forena 관련 권한 중 어떤 것을 간단히 설명 할 수 있습니까?

  • 필요한 Forena 권한은 Forena ? 와 함께 제공 되는 설치 안내서에 설명되어 있습니다 . 참고로 여기에 (일부) 인용이 있습니다.

    Forena는 표준 Drupal 관리 기능을 사용하여 역할에 권한을 부여함으로써 관련 권한 부여보고와 관련하여 많은 세분성을 허용합니다. 부여 할 수있는 Forena 관련 Drupal 권한 목록은 처음에 약간 압도적 일 수 있습니다. 각각의 정의 된 데이터 소스에 대해 3 개의 항목이 있고 vanilla Forena에는 이미 3 개의 데이터 소스가 제공됩니다.

    자신의 사이트에서이 안내서를 검색하려면 /reports/help.setup으로 이동하십시오.

"데이터"에 대한 액세스 권한은 원래 보류되어 있습니다. Forena는 Forena를 통해 데이터에 대한 액세스 권한을 부여하는 것과 관련된 모든 것에 매우 민감하기 때문에 의도적으로 설계된 것입니다. 원하지 않는 것은 Forena (권한 관리자없이)를 설치하고 구성하기 만하면 보안 데이터에 대한 임시 해결책으로 사용할 수 있다는 것입니다.

또한 전체 데이터 소스 수준의 권한 외에도 특정 데이터 블록 (= 사용자 지정 SQL 쿼리)에 필요한 권한을 세분화 할 수있는 옵션이 있습니다. 이렇게하려면 SQL 문 내에서 필요한 (Drupal) 권한을 지정하면됩니다 (구문 세부 정보는 Forena 안내서에 포함되어 있음). 이를위한 일반적인 사용 사례는 중요한 데이터가 포함 된 열에 대한 액세스를 보호하는 것입니다.

공개 : 저는 이 모듈 의 공동 유지 자입니다. 이것이 자체 프로모션에
대한 사이트의 정책을 위반하지 않기를 바랍니다 .


감사합니다. 처음 설치 프로그램을 진행할 때 다른 사람에게는 부여되지 않은 5 개의 권한이 있다는 것을 알지 못했습니다. 나는 이제 관리자 (즉, 나)에게 권한을 부여했다. 설치 문서는 이러한 권한이 원래 보류 된 이유와 관리자에게 권한을 부여하지 않는 이유가 무엇인지 말하지 않습니다. 그러나 이제는 해당 데이터 소스가 있으므로 문제가 해결되었습니다. 제출 한 문제 대신 여기에 응답 한 이유가 있습니까?
NewSites

진행 상황을 읽는 것이 좋습니다! 그것은 어떻게 든 내 대답의 "공감"을 보상합니다 ... 참고 : 나는 또한 이슈 큐를 통해 응답했습니다. 이제 "이것으로 문제가 해결되었습니다."라는 말은 Forena가 실제로 질문에 대한 "답"으로 간주한다는 것을 의미합니까? 참고 : 여기에 "해당 사용 권한이 원래 보류 된 이유"를 간단히 설명하기 위해 답변을 업데이트하려고합니다.
Pierre.Vriens

나는 당신의 답을 다운 투표 한 사람이 아니 었습니다. 나는 이제 당신을 <u> the </ u> 답변으로 받아 들여서 투표했습니다 (불행히도 0으로 반환합니다).
NewSites

흠, 나는 @NewSites가 downvoted했다고 가정하지 않았으며, 실제로 downvotes와 함께 사는 법을 배웠습니다. 나는 개인적으로 일반적으로 downvoting을 좋아하지 않으며 어떻게 든 설명 할 의견이없는 곳은 무시합니다. 그러나 물론 "공개"및 "수락"은 대단히 높이 평가됩니다. 물론 지금 Forena를 발견 한 것으로 보이는 드루팔 사용자가 또 있다는 것을 알고 있습니다. 적절한 경우 문제를 제기 (지원?)해야합니다 (직장의 지원도 참조하십시오).
Pierre.Vriens

2

나는 이것을 몇 가지 다른 방법으로 성공적으로 수행했습니다.

SQL보기를 사용 db_local하여의 해당 테이블을 참조 하는 가상 테이블을 작성하십시오 db__extra. 생성하는 쿼리는 다음과 같습니다.

USE db_local; CREATE VIEW some_table AS SELECT * FROM db__extra.some_table;

그런 다음 Drupal 데이터베이스의 기본 테이블 인 것처럼이 SQL 뷰를 참조 할 수 있으며 settings.php에 외부 데이터베이스를 추가 할 필요조차 없습니다. 이는 데이터 모듈과 호환되지 않을 수 있지만 ( https://www.drupal.org/node/1973806 참조 ), 구현하여 Drupal Views 모듈에 대한 SQL보기를 설명하고 hook_views_data()Data 모듈 사용을 중지 할 수 있어야 합니다. .

또 다른 가능성은 다음과 같습니다. 선택적 테이블 접두사를 사용하여 Drupal이 {some_table}을 db__extra.some_table에 다시 쓰도록 속입니다. 이것은 Drupal 테이블의 접두사와 다릅니다.

귀하의 $databases설정은 다음과 같을 것이다 :

$databases = array ( 'default' => array ('default' => array ( 'database' => 'db_local', 'username' => 'db_local', 'password' => '_________', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => array( 'some_table' => 'db__extra.', ), )) );

다시 말하지만, 이것을 사용하지 않기 때문에 이것이 데이터 모듈과 호환되는지 확실하지 않습니다. 그러나 hook_views_data()스스로 구현하면 뷰와 함께 작동해야합니다 .


두 가지 방법 모두 <code> hook_views_data () </ code>를 구현해야한다고 말합니다. 모듈 작성이 필요하지 않습니까? 어쨌든 두 번째 방법으로 데이터베이스 정의를 시도했습니다. "db_extra"의 테이블이 데이터 모듈의 분리 된 테이블 목록에 나타나지 않습니다. 첫 번째 방법에서 제안한 쿼리를 사용자 정의 모듈에없는 경우 어디에 두어야합니까?
NewSites

SQL보기를 작성하는 경우 MySQL에서 CREATE VIEW 조회를 한 번 직접 실행해야합니다. 다시 실행할 필요가 없습니다.
Les Lim

죄송합니다. 아직 이해가되지 않습니다. 이 쿼리를 어디에서 실행 하시겠습니까? phpMyAdmin에서? 그러면 뷰에서 사용할 수있는 것이 있습니까? 나는 Drupal.org 얻은에서 "SQL보기"를 검색 drupal.org/project/sql_views 더 생산 다운로드가 없으며에서 그 문서, drupal.org/node/2458947은 내가 쓰는 방법을 가정 후크를 (구현해야 말한다 모듈)을 사용하여 Views 모듈에 내 SQL보기를 알려줍니다. 그래서 그것은 당신이 제안하는 것이 모듈을 작성해야한다는 것처럼 들리며 (아직 준비가되지 않았다고 생각합니다), 그렇지 않다면, 당신이 나에게 말한 것을 얻지 못합니다.
NewSites
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.