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.
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:
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.
Crie as seguintes funções com os privilégios correspondentes:
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;
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;
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.
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.
Por exemplo, para criar e atribuir a função para executar o Zabbix server e proxy:
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: