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:
analytics
para acesso de leitura a quaisquer schemas ou tabelas usados para análise.- Opcional
analytics_actions
para acesso de escrita a tabelas usadas para ações do Analytics. - Opcional
analytics_model_persistence
para acesso de escrita ao schema usado para persistência de modelo do Analytics.
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 paraanalytics_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 papelanalytics
. - 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
eDELETE
às tabelas usadas com ações do Analytics. - Adicione o papel
analytics_actions
ao usuárioanalytics
.
-- 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
eDELETE
ao schema usado para persistência de modelo. - Adicione o papel
analytics_model_persistence
ao usuárioanalytics
.
-- 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
eDELETE
no schema onde deseja armazenar os uploads. - Adicione o papel
analytics_uploads
ao usuárioanalytics
.
-- 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
eanalytics_lemon
. - Crie um papel
customer_facing_analytics
com o privilégioCONNECT
. - 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.