首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Ruby和PostgreSQL createuser

使用Ruby和PostgreSQL createuser
EN

Stack Overflow用户
提问于 2009-11-12 18:28:06
回答 2查看 561关注 0票数 2

我试图编写一个非常简单的rake任务(并将其合并为一个相当大的rake任务),该任务将调用以下命令并传入一个随机生成的密码。现在,让我们伪造随机生成的密码,并给它一个“测试”的密码:

代码语言:javascript
复制
createuser -SDPRE test

我的任务代码如下:

代码语言:javascript
复制
desc "Create a test user with test password"
task "test" do
  puts('Creating User')
  IO.popen "createuser -SDRPE test", 'w+' do |io|
    io.write "test\ntest\n"
    io.close_write
  end

  raise 'createuser failed' unless $?.success?
end

io.write似乎无法工作,因为我仍然必须输入密码。它也没有被击倒。在运行任务并手动输入密码之后,我可以使用该密码登录psql

我尝试过很多不同的版本,比如io.close,以'w'甚至'r''r+'的形式打开文件,因为我看到了其他使用它的例子。

我有点困惑如何使这件事起作用。如有任何意见/评论/答案,将不胜感激!

编辑1:这是在Debian系统上,以防有任何不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-12 20:07:13

createuser正在打开/dev/tty来读取密码

读取密码的程序通常在密码方面牺牲Unix工具范例。这样做是合理的,因为它允许其他功能尊重标准输入和输出,并在打开/dev/tty以获取交互式密码时将其全部暂停。

在任何情况下,strace(1)都会显示createuser实际上是在打开/dev/tty

不是所有的东西都丢失了,createuser只是一个指向/usr/share/postgresql-common/pg_wrapper的链接,这是一个Perl程序。我确信,为了密码脚本兼容性,它可以被黑客攻击。

票数 4
EN

Stack Overflow用户

发布于 2009-11-12 19:19:13

我知道这不是您问题的答案,但是您考虑过使用SQL而不是调用shell命令来创建PG用户吗?

http://www.postgresql.org/docs/8.0/interactive/sql-createuser.html

它看起来更安全更可靠。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1724351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档