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

jhs*_*701 11 database passwords ruby-on-rails

如您所知,您必须在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宝石涵盖了这个?如果没有,我正在考虑创建一个.

小智 18

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

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

export POSTGRES_USERNAME='username'
export POSTGRES_PASSWORD='password'
Run Code Online (Sandbox Code Playgroud)

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

username: <%= ENV['POSTGRES_USERNAME'] %>
password: <%= ENV['POSTGRES_PASSWORD'] %>
Run Code Online (Sandbox Code Playgroud)


小智 5

这就是我让它工作的方式:

在终端/cmd上:

heroku config:set YOUR_DATABASE_PASSWORD=passywordy
Run Code Online (Sandbox Code Playgroud)

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

production:
<<: *default
password: <%= ENV['YOUR_DATABASE_PASSWORD'] %>
Run Code Online (Sandbox Code Playgroud)

(这个密码区是我用 rails new my_app -d postgresql 时自动生成的)