2017-05-15 8 views
2

Also, ich versuche, ein Installationsskript für meine Anwendung (Ubuntu 16) zu erstellen. Er muss einen postgresql-Benutzer erstellen, diesem Benutzer die Berechtigung erteilen, sich über ein Kennwort zu authentifizieren, und diesem Benutzer die Berechtigung erteilen, sich lokal zu authentifizieren. Ich möchte nur die Erlaubnis geben, das auf einer Datenbank, der Anwendungsdatenbank, zu tun. Also muss ich die Zeile local databasename username md5 über die Zeilen einfügen, die unbekannte Verbindungen ablehnen, zB im Abschnitt "Setze deine aktuelle Konfiguration hier" von pg_hba.conf. (pg_hba.conf benutzt Position in der Datei um Priorität zu bestimmen: erste gefundene Regel, die der Verbindung entspricht . Endergebnisses)Korrekter Weg zum Bearbeiten von pg_hba.conf

diese Zeile hinzuzufügen, mein Skript ausgeführt wird:

sudo awk ' 
/# Put your actual configuration here/ { 
    print "local databasename username md5" 
} 
{ print } 
' /etc/postgresql/9.5/main/pg_hba.conf 

# other setup 

service postgresql restart 

Aber das ist weniger als optimal. Erstens wird sich die Versionsnummer in der Zukunft ändern, so dass das Verzeichnis schlecht codiert werden kann. Zweitens, das macht einen Kommentar im Projekt von jemand anderem zu einem tatsächlichen strukturellen Teil der Konfigurationsdatei, was eine schreckliche Idee von allen möglichen Standpunkten in allen möglichen Universen ist.

Also meine Frage ist twopart. Erstens, gibt es eine gute, korrekte und akzeptierte Methode zum Bearbeiten von pg_hba.conf, die ich in einem Installationsskript statt Kitbashing mit Text-Editoren verwenden kann?

Zweitens, wenn es keine gute Antwort auf den ersten Teil gibt: gibt es eine programmatische Möglichkeit, postgresql fragen, wo es pg_hba auszieht?

+0

nicht sicher, ob Sie wollen den debian/ubuntu Weg oder nicht. –

Antwort

3

Gibt es eine programmatische Möglichkeit, postgresql zu fragen, wo es pg_hba abzieht?

show hba_file; 
-- or 
select current_setting('hba_file'); 
+0

Vielleicht nicht die beste Idee für ein Skript, eine pg_hba-Datei kann von vielen Datenbanken verwendet werden. Mit dieser Methode müssen Sie wissen, mit welchen Datenbanken eine Verbindung hergestellt werden soll und welche Ports/Hosts verwendet werden sollen. –

+0

@EvanCarroll - Ein Benutzer weiß normalerweise, welche Datenbank er verwendet oder installieren wird. Oder sollte es zumindest sein. – klin

2

Debian Werkzeugkette

So ist meine Frage zweiteiligen. Erstens: Gibt es eine gute, korrekte und akzeptierte Methode zum Bearbeiten von pg_hba.conf, die ich in einem Installationsskript verwenden kann, anstatt mit Textverarbeitungsprogrammen zu arbeiten?

Ja, aber Sie werden es wahrscheinlich unbefriedigend finden.

Upstream, PostgreSQL unterstützt nicht mehrere Versionen und installiert mit ihren Build-Tools. Debian tut es. Debian hat also ein Konzept von cluster erfunden, das im Wesentlichen ein Name und eine Versionsnummer ist.

Erstellen Sie ein Tool auf Ubuntu oder Debian, sollten Sie wahrscheinlich auch einen Namen und eine Versionsnummer verwenden.

Zweitens, wenn es keine gute Antwort auf den ersten Teil gibt: Gibt es eine programmatische Möglichkeit, postgresql zu fragen, wo es pg_hba abzieht?

Ja, es gibt ein Tool namens pg_conftool. Der Name des Standardclusters lautet main. Wenn Sie den 9.5/Hauptcluster wollen. Sie können dies tun ..

pg_conftool -s 9.5 main show hba_file 
/etc/postgresql/9.5/main/pg_hba.conf 

Sie sehen conftool Verwendung einer Version und den Namen machen können, aber streng kann es nicht ein fordern.

/usr/bin/pg_conftool [options] [<version> <cluster name>] [<configfile>] <command> 

Wenn Sie mehr über einen Cluster wissen in diesem Zusammenhang überprüfen sehen Sie alle Binärdateien mit pg_* beginnen, aber in erster Linie pg_ctl und pg_ctlcluster (der debian-Wrapper)

+0

Eine Klärung des ersten Teils Ihrer Antwort anfordern. "Debian-Cluster" ist eine Phrase, die schlecht googelt (und StackOverflow schlecht), weil "Cluster" häufiger auf massiv-parallele Berechnungen verweist und "man cluster" auf einen bestimmten Postgre-Befehl verweist. – sgfit

+1

@sgfit Überprüfen Sie alle Binärdateien mit 'pg_ *', aber in erster Linie 'pg_ctl' und' pg_ctlcluster' (der Debian-Wrapper) –

Verwandte Themen