Pular para conteúdo

Configuração de esquemas do PostgreSQL visíveis para a varredura

Ao verificar um endpoint de banco de dados, o usuário configurado determina quais tabelas e exibições serão verificadas na instância especificada (para Oracle) ou no banco de dados (para PostgreSQL e MS SQL Server).

Por padrão no PostgreSQL e, portanto, no PostGIS, o esquema público é criado em cada novo banco de dados e qualquer usuário que possa se conectar a ele vê esse esquema. A prática recomendada determina que os dados não devem ser armazenados nesse esquema, mas que vários esquemas devem ser criados, cada um com seus próprios direitos de usuário ou grupo de usuários, garantindo maior granularidade de uso e isolamento de segurança.

O FME depende dos direitos e dosearch_path para estabelecer sua conexão com um banco de dados PostGIS. Às vezes, o banco de dados não está configurado corretamente.

Para que o Scan FME possa analisar as tabelas em um esquema, :

  • o usuário configurado tem direitos de leitura para as tabelas;
  • o caminho do usuário contém os esquemas que contêm as tabelas.

Demonstração e pedidos

Vejamos o exemplo de um banco de dados PostgreSQL 9.3 com um banco de dados PostGIS 2.1.3 chamado geofla, que armazena os limites administrativos do produto lIGN France e está estruturado em 9 esquemas, 6 dos quais correspondem à França continental e a cada DOM, um(global) sendo o conjunto mesclado e os últimos 2 sendo os esquemas inerentes ao DBMS e suas extensões(público e topologia).

O objetivo é verificar as tabelas dos 6 esquemas de dados com o usuário isogeo_demo pertencente ao grupo isogeo_editor.

PGAdmin 3 - Estrutura do GeoFLA

1. Configuração do ponto de entrada

Siga as instruções fornecidas aqui para obter algo semelhante a isso:

APP - Ponto de entrada do PostGIS

2. Observe que nada é exibido

Se executarmos a varredura, veremos que a única tabela retornada é public.raster_columns, que é uma tabela de sistema com a extensão PostGIS. Ela está com erro porque não contém características geográficas.

APP - 1ª varredura do ponto de entrada

3. Verifique se o usuário está acessando as tabelas

Primeiro, é necessário verificar o que o usuário "vê", usando o console psql (ou uma interface gráfica, como o pgAdmin):

GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion TO isogeo_editor;
GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion TO isogeo_demo;
GRANT SELECT ON ALL TABLES IN SCHEMA guadeloupe, guyane, lareunion to isogeo_demo;

Usando o QGIS, podemos ver que o usuário isogeo_demo tem acesso às tabelas dos esquemas de Guadalupe, Guyane e Lareunion. Observe que nem todos os softwares se conectam a um banco de dados PostgreSQL da mesma forma. Por exemplo, o QGIS não exige que o search_path seja configurado. O FME exige.

QGIS - Ponto de entrada do PostGIS

4. Alterar o caminho do usuário

Para alterar o search_path, execute :

ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guadeloupe;

Se você executar a varredura novamente, verá que as tabelas no esquema de Guadalupe, e somente o esquema de Guadalupe, serão varridas:

APP - 2ª varredura do ponto de entrada

5. Consequências e ilustrações

Levar em conta a precisão da configuração do banco de dados nos permite refinar o processo de catalogação, escolhendo a granularidade correta para os pontos de entrada no momento da digitalização.<br > Também podemos ver que variações no search_path no mesmo ponto de entrada não alteram nada na "memória" da varredura do FME:

Somente o esquema da Guiana:

ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guyane;

APP - 3ª varredura do ponto de entrada

Somente o esquema de lareunião:

ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, lareunion;

APP - 4ª varredura do ponto de entrada

Os 3 esquemas:

ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guadeloupe, guyane, lareunion;

APP - 5ª varredura do ponto de entrada

Resumo dos pedidos

Se quiséssemos verificar todos os 6 esquemas nos quais os dados estão armazenados, teríamos feito :

/* Granting access to role and rolegroup to wanted schemas*/
GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion, martinique, mayotte, metropole TO isogeo_editor;
GRANT USAGE ON SCHEMA guadeloupe, guyane, lareunion, martinique, mayotte, metropole TO isogeo_demo;
GRANT SELECT ON ALL TABLES IN SCHEMA guadeloupe, guyane, lareunion, martinique, mayotte, metropole to isogeo_demo;

/* Setting the search_path with the wanted schemas */
ALTER ROLE isogeo_demo IN DATABASE geofla SET search_path TO $user, public, guadeloupe, guyane, lareunion, martinique, mayotte, metropole;

Mais detalhes

  • o caminho do usuário deve conter public, caso contrário, o FME não conseguirá encontrá-lo;
  • o $user corresponde à tabela do usuário. Opcional ;
  • é possível redefinir o search_path de um usuário para a configuração padrão do DBMS:

    ALTER USER isogeo_demo RESET search_path;
    
  • para visualizar o search_path de um usuário, conecte-se a um banco de dados com esse usuário e execute :

    show search_path;
    

Recursos