ActiveRecord可以远程连接到PostgreSQL并保护数据库密码吗?

我在远程VPS服务器(CentOS 5)上有一个PostgreSQL数据库,我想连接到我的本地Mac笔记本电脑连接到它的Rails应用程序。 在我的笔记本电脑上,我安装了ActiveRecord PostgreSQL适配器 – postgres (0.7.9.2008.01.28)

我在PostgreSQL文档中读到:

基于密码的身份validation方法是md5,crypt和密码。 除了通过连接发送密码的方式外,这些方法的操作类似:MD5散列,加密加密和明文。

[…]

如果您一直担心密码“嗅探”攻击,那么首选md5 …应该避免使用普通密码,特别是对于通过开放Internet进行的连接(除非您在连接周围使用SSL,SSH或其他通信安全包装)。

在标准的Rails database.yml ,对于localhost连接会有这样的东西……

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

但是PostgreSQL文档中讨论的身份validation方法没有任何内容。 有没有像“ auth_method: md5 ”这样的选项吗?

无论Postgres是否允许此function,您都可以使用SSH隧道启用与远程数据库的安全连接。 这是来自Web文档的免费Stack Overflow粘贴:

首先确保SSH服务器在与PostgreSQL服务器相同的机器上正常运行,并且您可以使用ssh作为某个用户登录。 然后,您可以从客户端计算机使用以下命令建立安全隧道:

ssh -L 3333:foo.com:5432 joe@foo.com -L参数中的第一个数字3333是隧道末端的端口号; 它可以自由选择。 第二个数字5432是隧道的远程端:服务器正在使用的端口号。 端口号之间的名称或IP地址是您要连接到的数据库服务器的主机。 要使用此隧道连接到数据库服务器,请连接到本地计算机上的端口3333:

psql -h localhost -p 3333 postgres到数据库服务器,它看起来好像你真的是用户joe@foo.com,它将使用为此用户和主机的连接配置的任何身份validation过程。 请注意,服务器不会认为连接是SSL加密的,因为事实上它在SSH服务器和PostgreSQL服务器之间没有加密。 只要它们位于同一台机器上,就不会造成任何额外的安全风险。

如果您需要更多,可以通过搜索“SSL隧道”或“postgres SSL隧道”在线找到它。 这是Postgres网站,我得到了上述内容:

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

要总结Rails,您将执行以下操作:

1)在终端窗口中,运行上面的第一个ssh命令建立隧道。

2)像这样设置数据库道具:

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

我在网上看了一下,似乎没有你正在寻找的选项,事实上客户端库, libpq也没有提到这一点。

我的猜测是这是在libpq中代表你协商的。 在任何情况下,md5都可能是默认的身份validation方法。

如果您通过不安全的通道连接到PostgreSQL服务器,则需要使用SSL加密通信或(如runako所解释的) SSH隧道 。