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

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

基于密码的身份验证方法是md5,crypt和password。 这些方法的操作方式相似,只有发送密码的方式不同:分别为MD5哈希,crypt加密和明文。

[...]

如果您对密码“嗅探”攻击有任何担忧,则推荐使用md5…应避免使用纯文本密码,特别是在通过开放互联网连接时(除非您在连接周围使用SSL,SSH或另一种通信安全包装器)。

在标准的Rails database.yml中,本地主机连接的设置如下...
development:
  adapter: postgresql
  database: journalapp_development
  username: xxx
  password: yyy
  host: localhost

但是这里没有关于PostgreSQL文档中讨论的认证方法的内容。是否有像"auth_method: md5"这样的选项?


请澄清一下,您是否遇到了连接问题? - Dana the Sane
不,我只是在调查如何在普通互联网上安全地连接。 - Ethan
3个回答

8
无论Postgres是否允许此功能,您可以通过使用SSH隧道连接来启用与远程数据库的安全连接。以下是从Web文档中复制的Stack Overflow内容:
首先确保在与PostgreSQL服务器相同的机器上正确运行SSH服务器,并且您可以使用某个用户的ssh登录。然后,您可以从客户端机器使用以下命令建立安全隧道:
ssh -L 3333:foo.com:5432 joe@foo.com
-L参数中的第一个数字3333是隧道的您端口号;它可以自由选择。第二个数字5432是隧道的远程端:您的服务器正在使用的端口号。端口号之间的名称或IP地址是具有数据库服务器的主机,您将要连接到该主机。为了使用此隧道连接到数据库服务器,您需要在本地机器上连接到端口3333: psql -h localhost -p 3333 postgres
对于数据库服务器来说,它看起来好像您真的是joe@foo.com用户,并且它将使用为此用户和主机配置的任何身份验证过程。请注意,服务器不会认为连接已经进行了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

我相信你在第一句话中想要写的是“SSH隧道”。 - Milen A. Radev
只有当服务器上的sshd接受其foo.com接口的连接时,此方法才有效。将第一个foo.com替换为localhost会更容易些。 - nasmorn
@runako,这样做需要在两个系统上都安装PostgreSQL吗?否则,在客户端机器上如何运行“psql…”? - Noz

1

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

我的猜测是,在libpq中代表你进行协商。无论如何,md5很可能是默认的身份验证方法。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接