PostgreSQL — pg_hba.conf jako tabela
TL;TR W tym artykule znajdziesz informacje jak zarządzać plikiem pg_hba.conf jako tabela w PostgreSQL.
Witaj, skoro tu trafiłeś, wierzę, że masz już podstawową wiedzę z PostgreSQL. Często jako administratorzy baz danych szukamy pomysły jak zarządzać konfiguracją, dodawać i kasować reguły oraz dbać o spójność pomiędzy różnymi maszynami.
Dziś chciałbym pokazać Ci, jak możesz zarządzać plikiem konfiguracyjnym pg_hba.conf. Stworzymy tabele, w której będziemy zapisywali reguły. Dlaczego warto wykorzystać takie rozwiązanie?
- Mamy dostęp bezpośrednio z psql
- W przypadku replikacji możemy łatwiej zadbać o spójność pomiędzy master i slave
- Łatwiesza automatyzacja,można dodać nową regułę przez INSERT
Przypomnę tylko, że w pliku pg_hba.conf znajdują się reguły, które pozwalają na dostęp do danej instancji PostgreSQL, podajemy tam adresy IP, nazwę bazy, username oraz metodę uwierzytelniania.
Zaczynamy!
Sprawdźmy, gdzie jest nasz plik pg_hba.conf
postgres=# select setting from pg_settings where name like '%hba%';
setting
--------------------------------------
/var/lib/postgresql/data/pg_hba.conf
(1 row)
Stwórzmy tabele, w której będziemy zapisywać reguły, które obecnie są w pliku pg_hba.conf
postgres=# create table hba ( lines text );
CREATE TABLE
Skopiujmy całą zawartość pliku pg_hba.conf do tabeli.
postgres=# copy hba from '/var/lib/postgresql/data/pg_hba.conf';
COPY 99
Zobaczmy jak to wygląda, pomijając wszystkie zahaszowane linie
postgres=# select * from hba where lines !~ '^#' and lines !~ '^$';
lines
-----------------------------------------------------------------------
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host all all all md5
(7 rows)
Dodajmy nową regułę i ponownie wyświetlmy zawartość tabeli.
postgres=# insert into hba (lines) values ('host all mydb ::1/128 trust');
INSERT 0 1
postgres=# select * from hba where lines !~ '^#' and lines !~ '^$';
lines
-----------------------------------------------------------------------
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
host all all all md5
host all mydb ::1/128 trust
(8 rows)
Jest, reguła dla mydb została dodana. Potrzebujemy jeszcze dodatkowego kroku, który skopiuje zawartość tabeli do pliku pg_hba.conf na dysku.
postgres=# copy hba to '/var/lib/postgresql/data/pg_hba.conf';
COPY 100
Jeżeli chcecie wyświetlić cała zawartość pliku, to możemy użyć polecenia
postgres=# select pg_read_file('pg_hba.conf');
Oczywiście musimy jeszcze, przeładować i zaczytać nową konfigurację, wywołujemy komendę
postgres=# select pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
Kasowanie danej reguły:
postgres=# select * from hba where lines like '# IPv4 local connections:';
lines
---------------------------
# IPv4 local connections:
(1 row)postgres=# delete from hba where lines like '# IPv4 local connections:';
DELETE 1postgres=# select * from hba where lines like '# IPv4 local connections:';
lines
-------
(0 rows)
Już, takie proste :)
Tomasz Gintowt jest Architektem/DevOps/DBA/Trenerem, głównie skupiony na dostarczaniu rozwiązań składowania i przetwarzania danych. Nie są mu obce wszelkiej maści bazy danych, systemy real-time data i streamingu. Obecnie pracuje z Apache Kafka, RabbitMQ, Elastic Stack i PostgreSQL. Organizator spotkań DataOps Poland.
https://www.linkedin.com/in/tomasz-gintowt/
https://dataops-academy.pl — kursy i szkolenia.