在Rails应用程序中安全地提供数据库密码

时间:2013-06-17 15:32:01

标签: ruby-on-rails database passwords

如您所知,您必须在config / database.yml文件中为数据库提供正确的数据库名称,用户名和密码,否则您的Rails应用程序将拒绝工作。

在默认设置中,您的密码在config / database.yml文件中以纯文本格式显示。如果您的应用程序位于免费的GitHub存储库中,那么您的密码就是公共信息。对于严肃的应用程序,这不是一个可行的选择。 (如果不将此密码用于其他任何内容,则可以进行辅导练习。)

到目前为止,我有一个对我有用的解决方案,但我想知道是否有更好的东西。您可以在https://github.com/jhsu802701/bsf看到我部署的示例。

我所做的是设置config / database.yml文件,以编程方式提供开发环境的用户名和密码。对于开发环境,我将命令添加到config / database.yml脚本以获取开发环境用户名(这是我使用的Debian Linux安装程序的常规用户名)和空白密码。 (我给我的用户名Postgres超级用户权限。)对于生产环境,我在部署脚本中添加一个命令,该命令从我帐户上其他位置的文件中获取用户名和密码,并将此信息写入config / database.yml文件。

有更好的解决方案吗?

是否有一个Ruby宝石涵盖了这个?如果没有,我正在考虑创建一个。

4 个答案:

答案 0 :(得分:17)

heroku的方式,以及绝大多数其他铁路商店使用ENV变量

将两个变量导出到您的环境中,

export POSTGRES_USERNAME='username'
export POSTGRES_PASSWORD='password'

然后在你的database.yml文件中你可以做

username: <%= ENV['POSTGRES_USERNAME'] %>
password: <%= ENV['POSTGRES_PASSWORD'] %>

答案 1 :(得分:4)

这就是我的工作方式:

在终端/ cmd:

heroku config:set YOUR_DATABASE_PASSWORD=passywordy

然后,在/config/database.yml文件中;

production:
<<: *default
password: <%= ENV['YOUR_DATABASE_PASSWORD'] %>

(当我使用rails new my_app -d postgresql时,会自动生成此密码区域)

答案 2 :(得分:1)

除了heroku之外,通过键入bash将变量导出到系统环境(linux)      export KEY=value 然后你可以通过ENV['KEY']

在Rails中调用它

e.g。
在bash中:
export CMS_DATABASE_PASSWORD=MySecurePassword
in secrets.yml:
password: <%= ENV['CMS_DATABASE_PASSWORD'] %>

答案 3 :(得分:0)

如上面现有帖子中所述设置环境变量,只会在当前shell会话期间保留环境变量。

要永久设置环境变量,应将export指令添加到shell配置文件中。 (然后运行source ~/.bashrc将更改应用于当前会话)

TL; DR:如果您正在使用BASH,请将export指令添加到~/.bashrc.

虽然上面应该足够了(如果在大多数流行的Linux发行版上使用BASH),自信地确定要为shell更新哪个配置文件可能会非常棘手。以下文章解释了原因,并提供了有关要编辑的配置文件的指导。

https://unix.stackexchange.com/questions/117467/how-to-permanently-set-environmental-variables