Você está visualizando a documentação da versão de desenvolvimento, ela pode estar incompleta.
Junte-se ao nosso projeto de tradução e ajude a traduzir a documentação do Zabbix em sua língua nativa.

2 Protegendo o PostgreSQL/TimescaleDB

Visão geral

Esta seção contém as melhores práticas para proteger um banco de dados PostgreSQL.

Para uma configuração básica, consulte as instruções padrão de criação do banco de dados PostgreSQL, que incluem a criação do usuário 'zabbix' com privilégios totais no banco de dados Zabbix. Este usuário é o proprietário do banco de dados e também possui os privilégios necessários para modificar a estrutura do banco de dados ao atualizar o Zabbix.

Para melhorar a segurança, recomenda-se configurar um padrão de uso de schema seguro, bem como criar funções e usuários de banco de dados adicionais com privilégios mínimos. Essas funções e usuários devem ser configurados com base no princípio do menor privilégio, ou seja, eles devem ter apenas os privilégios essenciais para executar as funções pretendidas.

Configuração do banco de dados

Crie o usuário que será o proprietário do banco de dados e crie o banco de dados Zabbix; o proprietário do banco de dados é o usuário especificado na criação do banco de dados:

createuser -U postgres -h localhost --pwprompt usr_owner
       createdb -U postgres -h localhost -O usr_owner -E Unicode -T template0 zabbix

Uma instalação limpa ou atualização do banco de dados deve ser realizada pelo proprietário do banco de dados. Isso ocorre porque o direito de remover um objeto do banco de dados ou alterar sua definição é um privilégio inerente ao proprietário do banco de dados e não pode ser concedido ou revogado.

Os comandos a seguir nesta página devem ser executados enquanto a conexão com o PostgreSQL for feita especificamente para o banco de dados zabbix.

Crie o schema zabbix e defina o proprietário do banco de dados (usr_owner) como o proprietário deste schema:

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

Configure um padrão de uso de schema seguro:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
       REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
       -- Nota: search_path deve apontar para o schema "zabbix":
       ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";

Após configurar o banco de dados, prossiga para a criação de funções de usuário.

Criando funções de usuário

Crie as seguintes funções com os privilégios correspondentes:

  • zbx_srv - função para executar o Zabbix server e proxy:
CREATE ROLE zbx_srv;
       GRANT CONNECT ON DATABASE zabbix TO zbx_srv;
       GRANT USAGE ON SCHEMA zabbix TO zbx_srv;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT DELETE, INSERT, SELECT, UPDATE ON TABLES TO zbx_srv;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_srv;
  • zbx_web - função para executar o Zabbix frontend e API:
CREATE ROLE zbx_web;
       GRANT CONNECT ON DATABASE zabbix TO zbx_web;
       GRANT USAGE ON SCHEMA zabbix TO zbx_web;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT DELETE, INSERT, SELECT, UPDATE ON TABLES TO zbx_web;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_web;
  • zbx_bckp - função para backup de tabelas:
CREATE ROLE zbx_bckp;
       GRANT CONNECT ON DATABASE zabbix TO zbx_bckp;
       GRANT USAGE ON SCHEMA zabbix TO zbx_bckp;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT ON TABLES TO zbx_bckp;
       ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_bckp;

A restauração de tabelas só é possível pelo proprietário do banco de dados.

Após criar as funções, elas podem ser atribuídas aos usuários.

Atribuindo funções de usuário

Para atribuir as funções de usuário criadas, crie usuários e atribua as funções relevantes a eles. Substitua <user>, <role> e <password> conforme necessário.

CREATE USER <user> WITH ENCRYPTED password '<password>';
       GRANT <role> TO <user>;

Por exemplo, para criar e atribuir a função para executar o Zabbix server e proxy:

CREATE USER usr_srv WITH ENCRYPTED password 'password';
       GRANT zbx_srv TO usr_srv;

Particionamento de banco de dados com TimescaleDB

O particionamento de banco de dados é facilitado pelo TimescaleDB. Para utilizar o TimescaleDB, o Zabbix server requer privilégios de proprietário do banco de dados.

Se o schema zabbix do PostgreSQL já foi criado no banco de dados zabbix, você pode habilitar o TimescaleDB com o seguinte comando:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA zabbix CASCADE;" | sudo -u postgres psql zabbix