Partilhar via


Criar uma conta PostgreSQL de privilégios mínimos para a descoberta e avaliação do Azure Migrate (visualização)

Este artigo explica como criar uma conta PostgreSQL personalizada com as permissões mínimas necessárias para Descoberta e Avaliação no Azure Migrate.

Antes de iniciar a descoberta, configure o dispositivo Azure Migrate com contas PostgreSQL para se conectar às suas instâncias do PostgreSQL. Para evitar o uso de contas de superusuário, você pode criar uma conta personalizada com apenas as permissões necessárias para coletar metadados para descoberta e avaliação. Adicione esta conta personalizada na configuração do Appliance para PostgreSQL Discovery and Assessment. Você pode usar o utilitário de provisionamento de conta menos privilegiado fornecido nesta documentação para simplificar a configuração.

Pré-requisitos

  • Um servidor PostgreSQL em execução e acessível.
  • Acesso de superusuário à instância do PostgreSQL.
  • Projeto Azure Migrate configurado.

Privilégios mínimos exigidos

Para garantir a segurança e a conformidade no Azure Migrate, crie um usuário do PostgreSQL com apenas as permissões necessárias, minimizando os riscos de acesso não autorizado ou alterações não intencionais.

Com base nos requisitos de migração do Azure, os privilégios mínimos necessários são:

Permissões no nível do banco de dados

  • CONNECT: Acesso às bases de dados
  • pg_read_all_settings: Leia os parâmetros de configuração do servidor
  • pg_read_all_stats: Acesso às estatísticas da base de dados
  • pg_monitor: Monitorar métricas de desempenho do banco de dados

Implementação de script SQL

Salve o seguinte conteúdo como CreateUser.sql:

-- PostgreSQL Script to Create a Least-Privilege User for Azure Migrate
-- Usage: Replace :username and :password with actual values when executing.
-- Parameters:
--   :username - The username for the new user
--   :password - The password for the new user

-- Check if the user already exists
SELECT CASE
    WHEN EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username')
        THEN 'User ' || :'username' || ' already exists, skipping creation'
    ELSE
        'User ' || :'username' || ' does not exist, proceeding with creation'
END AS user_check;

-- Only proceed if user doesn't exist
SELECT NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'username') AS should_create \gset
\if :should_create

BEGIN;

-- Create the user with minimal privileges
CREATE USER :"username" WITH PASSWORD :'password' LOGIN
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION NOBYPASSRLS;

-- Grant CONNECT privilege on all non-template databases
SELECT 'GRANT CONNECT ON DATABASE ' || quote_ident(datname) || ' TO ' || :'username' || ';'
FROM pg_database WHERE datistemplate = false; \gexec

-- Grant required monitoring and read permissions
GRANT pg_read_all_settings TO :"username";
GRANT pg_read_all_stats TO :"username";
GRANT pg_monitor TO :"username";

-- Log the user creation
SELECT 'Azure Migrate user ' || :'username' || ' created successfully with least privileges.' AS result;

COMMIT;

\endif

-- Usage instructions:
--   Replace :username and :password with actual values using psql variables:
--   psql -v username=myuser -v password=mypassword -f CreateUser.sql

Observação

Este utilizador tem apenas os privilégios mínimos necessários para a deteção e avaliação do Azure Migrate.

  • O usuário não pode criar bancos de dados, funções ou replicar.
  • Utilize sempre palavras-passe fortes e siga as políticas de segurança da sua organização.

Instruções de utilização

Siga estas etapas para usar o script SQL fornecido:

  1. Salve o script como CreateUser.sql.
  2. Substitua os espaços reservados para nome de usuário e senha pelos valores desejados usando psql variáveis.

Executar o script

Execute o script usando a ferramenta de linha de comando PostgreSQL (psql) com privilégios de superusuário. Substitua os espaços reservados pelos seus valores reais:

psql -h <hostname> -p <port> -d <database> -U <superuser> \
    -v username=<<Az Migrate username>> \
    -v password='your_secure_password' \
    -f CreateUser.sql

Verificar a criação do usuário

Para confirmar que o usuário foi criado e recebeu os privilégios corretos, execute as seguintes consultas:

-- Check if the user exists and review key attributes
SELECT usename, usecreatedb, usesuper, userepl
FROM pg_catalog.pg_user
WHERE usename = '<<Az Migrate username>>';

O resultado deve ser mostrado false para usecreatedb, usesuper, e userepl.

Verificar os privilégios baseados em função concedidos

Verifique se o usuário tem as funções de monitoramento necessárias executando as seguintes consultas. Isso garante que a conta tenha apenas as permissões necessárias para as operações de migração do Azure.

-- Verify the user exists
SELECT rolname
FROM pg_roles
WHERE rolname = '<<Az Migrate username>>';
-- Check membership in monitoring roles
SELECT r.rolname AS granted_role
FROM pg_auth_members m
JOIN pg_roles r ON m.roleid = r.oid
WHERE m.member = (SELECT oid FROM pg_roles WHERE rolname = '<<Az Migrate username>>');

Depois de executar essas consultas, você verá que o usuário existe e tem apenas as permissões necessárias para a descoberta e a avaliação do Azure Migrate.

Considerações

Use uma conta PostgreSQL de privilégios mínimos exclusivamente para o Azure Migrate, revise regularmente permissões, gire credenciais, monitore a atividade e desabilite a conta quando não for mais necessário.

  • Substitua <<Az Migrate username>> e <PASSWORD> por seu nome de usuário escolhido e uma senha forte para o usuário com privilégios mínimos.
  • Execute o script com privilégios de superusuário, pois a criação de usuários e a atribuição de funções exigem acesso elevado.
  • Confirme se sua instância do PostgreSQL está em execução e acessível antes de executar o script.
  • Teste o script em um ambiente de desenvolvimento ou preparo antes do uso em produção.
  • Siga as práticas recomendadas de segurança da sua organização para complexidade e gerenciamento de senhas.
  • Após a execução do script, revise as permissões concedidas para garantir que elas atendam aos seus requisitos de segurança.
  • Se você encontrar problemas, consulte a documentação do PostgreSQL ou entre em contato com o administrador do banco de dados para obter suporte.