Skip to main content

Usuários, papéis e privilégios do banco de dados

Usuários, papéis e privilégios do banco de dados

Recomendamos criar um usuário de banco de dados chamado analytics com os seguintes papéis de banco de dados:

Agrupar seus privilégios em papéis baseados em casos de uso facilita a gestão futura dos privilégios (especialmente em situações multi-inquilino). Por exemplo, você pode:

  • Usar o mesmo papel analytics para outras ferramentas de BI em sua stack de dados que precisam de acesso somente leitura às tabelas analíticas do seu banco de dados.
  • Revogar o acesso de escrita para analytics_model_persistence sem afetar o acesso de escrita para analytics_actions.

Privilégios mínimos do banco de dados

Para visualizar e consultar suas tabelas no Analytics, você precisará conceder ao usuário do banco de dados do Analytics:

  • CONNECT ao seu banco de dados.
  • Privilégios SELECT a quaisquer schemas ou tabelas que você quiser usar no Analytics.

Para organizar esses privilégios (e facilitar a manutenção futuramente):

  • Crie um papel de banco de dados chamado analytics.
  • Crie um usuário de banco de dados chamado analytics.
  • Adicione o usuário analytics ao papel analytics.
  • Adicione privilégios ao papel analytics.

Por exemplo, se você estiver usando um banco Postgres, conecte-se como administrador e execute as instruções SQL:

-- Cria um papel chamado "analytics".
CREATE ROLE analytics WITH LOGIN;

-- Adiciona o privilégio CONNECT ao papel.
GRANT CONNECT ON DATABASE "your_database" TO analytics;

-- Cria um usuário de banco de dados chamado "analytics".
CREATE USER analytics WITH PASSWORD "your_password";

-- Concede o papel para o usuário analytics.
GRANT analytics TO analytics;

-- Adiciona privilégios de consulta ao papel (opções 1-4):

-- Opção 1: Descomente a linha abaixo para permitir que usuários com o papel analytics consultem TODOS OS DADOS (No Postgres 14 ou superior. Veja [Predefined Roles](https://www.postgresql.org/docs/current/predefined-roles.html#PREDEFINED-ROLES)).
-- GRANT pg_read_all_data TO analytics;

-- Opção 2: Descomente a linha abaixo para permitir que usuários com o papel analytics consultem qualquer coisa no DATABASE.
-- GRANT USAGE ON DATABASE "your_schema" TO analytics;
-- GRANT SELECT ON DATABASE "your_schema" TO analytics;

-- Opção 3: Descomente a linha abaixo para permitir que usuários com o papel analytics consultem qualquer coisa em um SCHEMA específico.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON ALL TABLES IN SCHEMA "your_schema" TO analytics;

-- Opção 4: Descomente a linha abaixo para permitir que usuários com o papel analytics consultem dados em uma TABELA específica.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON "your_table" IN SCHEMA "your_schema" TO analytics;

Dependendo do uso no Analytics, você pode também conceder:

  • Privilégios TEMPORARY para criação de tabelas temporárias.
  • Privilégios EXECUTE para usar procedures ou funções definidas pelo usuário.

Lembre-se de que quando você concede privilégios a um papel, todos os usuários com esse papel receberão esses privilégios.

Conceder todos os privilégios do banco de dados

Se você não quiser estruturar os privilégios do seu banco de dados ainda:

  • Crie um usuário de banco de dados chamado analytics.
  • Conceda todos os privilégios ao usuário analytics no banco de dados.
-- Cria um usuário de banco de dados chamado "analytics".
CREATE USER analytics WITH PASSWORD "your_password";

-- Concede ao usuário privilégios completos de leitura e escrita no banco de dados.
GRANT ALL PRIVILEGES ON "database" TO analytics;

Essa é uma boa opção se você estiver conectando a um banco local para desenvolvimento ou testes.

Privilégios para habilitar ações

Ações permitem que o Analytics escreva em tabelas específicas no seu banco de dados.

Além dos privilégios mínimos do banco de dados, você precisará conceder acesso de escrita a quaisquer tabelas usadas com ações:

  • Crie um novo papel chamado analytics_actions.
  • Conceda ao papel os privilégios INSERT, UPDATE e DELETE às tabelas usadas com ações do Analytics.
  • Adicione o papel analytics_actions ao usuário analytics.
-- Cria um papel para agrupar privilégios de banco para ações do Analytics.
CREATE ROLE analytics_actions WITH LOGIN;

-- Concede privilégios de escrita na TABELA usada com ações do Analytics.
GRANT INSERT, UPDATE, DELETE ON "your_table" IN SCHEMA "your_schema" TO analytics_actions;

-- Concede o papel ao usuário analytics.
GRANT analytics_actions TO analytics;

Privilégios para habilitar persistência de modelo

Persistência de modelo permite que o Analytics salve os resultados de consultas em um schema específico do banco. O usuário do banco do Analytics precisará do privilégio CREATE para configurar o schema dedicado ao cache de modelo, além do acesso de escrita (INSERT, UPDATE, DELETE) nesse schema.

Além dos privilégios mínimos do banco de dados:

  • Crie um novo papel chamado analytics_model_persistence.
  • Conceda ao papel acesso CREATE ao banco de dados.
  • Conceda ao papel os privilégios INSERT, UPDATE e DELETE ao schema usado para persistência de modelo.
  • Adicione o papel analytics_model_persistence ao usuário analytics.
-- Cria um papel para agrupar privilégios de banco para persistência de modelo do Analytics.
CREATE ROLE analytics_model_persistence WITH LOGIN;

-- Se não quiser dar acesso CREATE ao banco, crie o schema manualmente antes de habilitar a persistência de modelo.
GRANT CREATE ON "database" TO analytics_model_persistence;

-- Concede privilégios de escrita no SCHEMA usado para persistência de modelo.
GRANT USAGE ON "your_schema" TO analytics_model_persistence;
GRANT INSERT, UPDATE, DELETE ON "your_model's_table" IN SCHEMA "your_schema" TO analytics_model_persistence;

-- Concede o papel ao usuário analytics.
GRANT analytics_model_persistence TO analytics;

Privilégios para habilitar uploads

Você pode fazer upload de CSVs para bancos suportados. O usuário do banco do Analytics deve ter acesso de escrita (INSERT, UPDATE, DELETE) ao schema onde deseja armazenar os uploads.

Primeiro, crie um schema para armazenar uploads (ou use um existente) e informe ao Analytics que deseja usar esse schema para armazenar os dados.

Além dos privilégios mínimos do banco de dados:

  • Crie um novo papel chamado analytics_uploads.
  • Conceda ao papel os privilégios INSERT, UPDATE e DELETE no schema onde deseja armazenar os uploads.
  • Adicione o papel analytics_uploads ao usuário analytics.
-- Cria um papel para agrupar privilégios de banco para uploads.
CREATE ROLE analytics_uploads WITH LOGIN;

-- Concede privilégios de escrita no SCHEMA usado para uploads.
GRANT USAGE ON "your_schema" TO analytics_uploads;
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "your_schema" TO analytics_uploads;

-- Concede o papel ao usuário analytics.
GRANT analytics_uploads TO analytics;

Permissões multi-inquilino

Se você estiver configurando permissões multi-inquilino para clientes que precisam de acesso SQL, pode criar uma conexão de banco por cliente. Isso significa que cada cliente se conecta ao banco usando seu próprio usuário de banco de dados.

Suponha que você tenha clientes chamados Tangerine e Lemon:

  • Crie novos usuários de banco de dados analytics_tangerine e analytics_lemon.
  • Crie um papel customer_facing_analytics com o privilégio CONNECT.
  • Crie papéis para agrupar privilégios específicos para cada caso de uso de cliente. Por exemplo:
    • tangerine_queries para agrupar privilégios de leitura para pessoas consultarem e criarem stored procedures no schema Tangerine.
    • lemon_queries para agrupar privilégios de leitura para pessoas consultarem tabelas no schema Lemon.
    • lemon_actions para agrupar privilégios de escrita necessários para criar ações na tabela Lemonade no schema Lemon.
  • Adicione cada usuário aos seus respectivos papéis.
-- Cria um usuário de banco para cada cliente.
CREATE USER analytics_tangerine WITH PASSWORD "orange";
CREATE USER analytics_lemon WITH PASSWORD "yellow";

-- Cria um papel para agrupar privilégios para todos os clientes.
CREATE ROLE customer_facing_analytics;
GRANT CONNECT ON DATABASE "citrus" TO customer_facing_analytics;
GRANT customer_facing_analytics TO analytics_tangerine, analytics_lemon;

-- Cria um papel para agrupar acesso de leitura analytics para o cliente Tangerine.
CREATE ROLE tangerine_queries;
GRANT USAGE ON SCHEMA "tangerine" TO tangerine_queries;
GRANT SELECT, EXECUTE ON ALL TABLES IN SCHEMA "tangerine" TO tangerine_queries;
GRANT tangerine_queries TO analytics_tangerine;

-- Cria um papel para agrupar acesso de leitura analytics para o cliente Lemon.
CREATE ROLE lemon_queries;
GRANT USAGE ON SCHEMA "lemon" TO lemon_queries;
GRANT SELECT ON ALL TABLES IN SCHEMA "lemon" TO lemon_queries;
GRANT lemon_queries TO analytics_lemon;

-- Cria um papel para agrupar privilégios para ações do Analytics para o cliente Lemon.
CREATE ROLE lemon_actions;
GRANT INSERT, UPDATE, DELETE ON TABLE "lemonade" IN SCHEMA "lemon" TO lemon_actions;
GRANT lemon_actions TO analytics_lemon;

Recomendamos agrupar privilégios em papéis baseados nos casos de uso por cliente. Assim, você pode reutilizar privilégios comuns entre clientes, enquanto ainda consegue conceder ou revogar privilégios granulares por cliente. Por exemplo:

  • Se o cliente Tangerine precisar consultar o schema Tangerine em outra ferramenta analítica, você pode usar o papel tangerine_queries ao configurar essa ferramenta.
  • Se o cliente Lemon decidir não usar mais as ações do Analytics (mas ainda quiser fazer perguntas), basta revogar ou remover o papel lemon_actions.

Leituras adicionais

Leia a documentação para outras versões do Analytics.