Udostępnij przez


Tworzenie konta postgreSQL o najniższych uprawnieniach na potrzeby odnajdywania i oceny usługi Azure Migrate (wersja zapoznawcza)

W tym artykule wyjaśniono, jak utworzyć niestandardowe konto postgreSQL z minimalnymi uprawnieniami wymaganymi do odnajdywania i oceny w usłudze Azure Migrate.

Przed rozpoczęciem rozpoznawania skonfiguruj aplikację Azure Migrate przy użyciu kont PostgreSQL, aby połączyć się z wystąpieniami PostgreSQL. Aby uniknąć korzystania z kont superużytkowników, możesz utworzyć konto niestandardowe z uprawnieniami wymaganymi do zbierania metadanych na potrzeby odnajdywania i oceny. Dodaj to konto niestandardowe w konfiguracji urządzenia na potrzeby odnajdywania i oceny bazy danych PostgreSQL. Aby uprościć konfigurację, możesz użyć narzędzia aprowizacji kont o najniższych uprawnieniach podanych w tej dokumentacji.

Wymagania wstępne

  • Uruchomiony i dostępny serwer PostgreSQL.
  • Dostęp superużytkownika do wystąpienia bazy danych PostgreSQL.
  • Utworzenie projektu Azure Migrate.

Minimalne wymagane uprawnienia

Aby zapewnić bezpieczeństwo i zgodność w usłudze Azure Migrate, utwórz użytkownika postgreSQL z tylko niezbędnymi uprawnieniami — minimalizując ryzyko nieautoryzowanego dostępu lub niezamierzonych zmian.

Na podstawie wymagań usługi Azure Migrate wymagane są minimalne uprawnienia:

Uprawnienia na poziomie bazy danych

  • CONNECT: Dostęp do baz danych
  • pg_read_all_settings: Odczytywanie parametrów konfiguracji serwera
  • pg_read_all_stats: Dostęp do statystyk bazy danych
  • pg_monitor: Monitorowanie metryk wydajności bazy danych

Implementacja skryptu SQL

Zapisz następującą zawartość jako 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

Uwaga / Notatka

Ten użytkownik ma tylko minimalne uprawnienia wymagane do odnajdywania i oceny usługi Azure Migrate.

  • Użytkownik nie może tworzyć baz danych, ról ani replikować.
  • Zawsze używaj silnych haseł i postępuj zgodnie z zasadami zabezpieczeń organizacji.

Instrukcje użycia

Wykonaj następujące kroki, aby użyć podanego skryptu SQL:

  1. Zapisz skrypt jako CreateUser.sql.
  2. Zastąp symbole zastępcze dla nazwy użytkownika i hasła na żądane wartości, używając zmiennych psql.

Wykonywanie skryptu

Uruchom skrypt przy użyciu narzędzia wiersza polecenia PostgreSQL (psql) z uprawnieniami administratora. Zastąp symbole zastępcze rzeczywistymi wartościami:

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

Zweryfikuj tworzenie użytkownika

Aby potwierdzić, że użytkownik został utworzony i przypisano odpowiednie uprawnienia, uruchom następujące zapytania:

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

Wynik powinien pokazywać false dla usecreatedb, usesuper, i userepl.

Weryfikowanie udzielonych uprawnień opartych na rolach

Sprawdź, czy użytkownik ma niezbędne role monitorowania, uruchamiając następujące zapytania. Dzięki temu konto ma tylko wymagane uprawnienia do operacji usługi Azure Migrate.

-- 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>>');

Po uruchomieniu tych zapytań powinien zostać wyświetlony komunikat, że użytkownik istnieje i ma tylko wymagane uprawnienia do odnajdywania i oceny usługi Azure Migrate.

Rozważania

Używaj konta PostgreSQL z najniższymi uprawnieniami wyłącznie dla usługi Azure Migrate, regularnie przeglądaj uprawnienia, obracaj poświadczenia, monitoruj aktywność i wyłączaj konto, gdy nie jest już potrzebne.

  • Zastąp <<Az Migrate username>> i <PASSWORD> wybraną nazwą użytkownika i silnym hasłem dla użytkownika o minimalnych uprawnieniach.
  • Uruchom skrypt z uprawnieniami administratora, ponieważ tworzenie użytkowników i przypisywanie ról wymaga podwyższonego poziomu dostępu.
  • Przed wykonaniem skryptu upewnij się, że instancja PostgreSQL jest uruchomiona i dostępna.
  • Przetestuj skrypt w środowisku deweloperskim lub przejściowym przed użyciem środowiska produkcyjnego.
  • Postępuj zgodnie z najlepszymi rozwiązaniami w zakresie zabezpieczeń organizacji dotyczącymi złożoności haseł i zarządzania nimi.
  • Po wykonaniu skryptu przejrzyj przyznane uprawnienia, aby upewnić się, że spełniają wymagania dotyczące zabezpieczeń.
  • Jeśli wystąpią problemy, zobacz dokumentację bazy danych PostgreSQL lub skontaktuj się z administratorem bazy danych, aby uzyskać pomoc techniczną.