2009-04-15 7 views
4

Ich habe eine PostgreSQL-Datenbank auf einem Remote-VPS-Server (CentOS 5) und möchte eine Verbindung herstellen, damit eine Rails-Anwendung von meinem lokalen Mac-Laptop aus eine Verbindung herstellt. Auf meinem Laptop habe ich den ActiveRecord PostgreSQL-Adapter installiert - postgres (0.7.9.2008.01.28).Kann ActiveRecord remote eine Verbindung zu PostgreSQL herstellen und das DB-Passwort schützen?

Ich lese in den PostgreSQL docs:

Die kennwortbasierte Authentifizierungsmethoden sind md5, Krypta und Passwort. Diese Methoden funktionieren ähnlich, außer dass das Passwort über die Verbindung gesendet wird: MD5-Hash, Krypt-verschlüsselt und Klartext.

[...]

Wenn Sie überhaupt besorgt über Passwort „Schnüffeln“ Angriffe sind dann md5 bevorzugt ... Plain Passwort sollte vermieden werden, vor allem für Verbindungen über das offene Internet (es sei denn, Sie verwenden SSL, SSH oder einen anderen Kommunikationssicherungswrapper um die Verbindung herum.

in einer Standard-Rails database.yml so etwas wie dies für eine lokale Host-Verbindung haben würde ...

development: 
    adapter: postgresql 
    database: journalapp_development 
    username: xxx 
    password: yyy 
    host: localhost 

Aber es gibt nichts über die Authentifizierungsmethode in dort in der Dokumentation PostgreSQL diskutiert. Gibt es als Option etwas wie "auth_method: md5"?

+0

Um zu klären, haben Sie Verbindungsprobleme? –

+0

Nein, ich untersuche nur, wie ich sicher über das allgemeine Internet eine Verbindung herstellen könnte. – Ethan

Antwort

8

Unabhängig davon, ob Postgres diese Funktionalität zulässt, können Sie mithilfe von SSH-Tunneling eine sichere Verbindung zu einer entfernten Datenbank aktivieren. Hier sind die unentgeltlichen Stack-Überlauf pasten in den Web-Dokumenten:

zunächst sicherstellen, dass ein SSH-Server ist richtig auf der gleichen Maschine als PostgreSQL-Server ausgeführt wird, und dass Sie anmelden können ssh, wie einige mit Benutzer. Dann können Sie einen sicheren Tunnel mit einem Befehl wie dies aus dem Client-Rechner herstellen:

ssh -L 3333: foo.com: 5432 [email protected] Die erste Zahl in dem -L Argumente, 3333, ist die Portnummer Ihres Endes des Tunnels; es kann frei gewählt werden. Die zweite Nummer, 5432, ist das entfernte Ende des Tunnels: der Port Nummer, die Ihr Server verwendet. Der Name oder die IP-Adresse zwischen den Portnummern ist der Host mit dem Datenbankserver , zu dem Sie eine Verbindung herstellen möchten.Um zum Datenbankserver mit diesem Tunnel zu verbinden, verbinden Sie mit Port 3333 auf der lokalen Maschine:

psql -h localhost -p 3333 Postgres der Datenbankserver wird dann , als ob Sie schaut sind wirklich Benutzer [email protected] und es wird verwendet, was auch immer Authentifizierungsprozedur war konfiguriert für Verbindungen von diesem Benutzer und Host. Beachten Sie, dass der Server nicht denkt, dass die Verbindung SSL-verschlüsselt ist, da es in der Tat nicht zwischen dem SSH-Server und dem PostgreSQL-Server verschlüsselt ist. Dies sollte kein zusätzliches Sicherheitsrisiko darstellen solange wie sie auf der gleichen Maschine sind.

Wenn Sie mehr wollen, können Sie es online finden, indem Sie nach "SSL Tunnel" oder "Postgres SSL Tunnel" suchen. Hier ist der Postgres-Website, wo ich die oben bekam:

http://www.postgresql.org/docs/current/static/ssh-tunnels.html

für Rails Um es zusammenzufassen, würden Sie dann wie folgt vor:

1) in einem Terminalfenster den ersten Befehl ssh oben zu etablieren Der Tunnel.

2) Stellen Sie Ihre Datenbank Requisiten wie so:

development: 
    adapter: postgresql 
    database: journalapp_development 
    username: xxx 
    password: yyy 
    host: localhost 
    port: 3333 
+0

Ich glaube, Sie wollten in Ihrem ersten Satz "SSH-Tunneling" schreiben. –

+0

Dies funktioniert nur, wenn der sshd auf dem Server Verbindungen auf seiner foo.com-Schnittstelle akzeptiert. Es ist einfacher, das erste foo.com für localhost zu ersetzen. – nasmorn

+0

@runako Würden Sie PostgreSQL auf beiden Systemen installieren müssen, damit dies funktioniert? Ansonsten, wie würden Sie 'psql ...' auf dem Client-Rechner ausführen? – Noz

1

Ich schaute online und es scheint keine Option für das, was Sie suchen, und in der Tat die Client-Bibliothek, libpq erwähnt dies auch nicht.

Meine Vermutung ist, dass dies in Ihrem Namen in libpq ausgehandelt wird. In jedem Fall ist MD5 wahrscheinlich die Standardauthentifizierungsmethode.

0

Wenn Sie zu einem PostgreSQL-Server über unsicheren Kanal verbinden Sie Notwendigkeit Ihre Kommunikation mit SSL oder (wie RUNAKO hat erklärt) SSH Tunneling zu verschlüsseln.