我正在尝试使用PostgreSQL作为数据库在Heroku上部署Mantis BT,作为概念和学习练习的证明(或者更准确地说,作为“爬上陡峭的学习曲线”,因为我是一个这三种技术的新手总数。)
将PHP应用程序部署到Heroku很好,访问应用程序的URL会显示其admin/install.php
页面。配置PostgreSQL数据库很顺利,并给了我一个数据库URL(混淆)看起来像这样:
postgres://useruseruser:passwordpasswordpassword@ec2-107-21-219-201.compute-1.amazonaws.com:5432/dbnamedbname
我可以使用这些凭据通过psql
访问数据库,并且用户(可预测)没有'usecreatedb'权限。我无法理解PostgreSQL \z
命令的输出,这似乎表明我对我创建的表有 no 特权:
dbnamedbname=> \z foo;
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+------+-------+-------------------+--------------------------
public | foo | table | |
(1 row)
但是我把这种印象归结为还没有真正了解PostgreSQL的习语。
根据经验,我已经能够确定我具有CREATE(对于表和索引),SELECT,INSERT,UPDATE,DELETE,ALTER和DROP的特权,它们似乎是what Mantis BT requires的“高权限数据库帐户。“
所以,似乎我拥有填写Mantis BT admin/install.php
形式所需的一切:
这里有两点说明:
然而,当我使用上面的值填写表单并单击“安装/升级数据库”按钮时,我收到一个失败,指示应用程序无法使用提供的凭据连接到数据库(确切相同的凭据,BTW,我曾经使用psql
连接到数据库):
(上面的截图中有一个可疑的东西 - 我还没有在代码中自己去寻找:表单提交返回的页面中隐藏的管理员密码只显示六个子弹,而我粘贴的实际密码长度为30个字符。)
所以,向任何了解Mantis BT数据库设置如何工作的人提出问题。
答案 0 :(得分:2)
“数据库连接失败”是由初始连接尝试产生的,其中未指定数据库名称。
尝试从psql
以这种方式访问服务器会导致以下错误:
$ psql -h ec2-107-21-219-102.compute-1.amazonaws.com -U useruseruser
Password for user useruseruser:
psql: FATAL: database "useruseruser" does not exist
将数据库名称作为附加参数添加到该Connect()
调用会导致连接尝试成功,此后所有表创建步骤和检查都会成功。
我不清楚问题是PostgreSQL 9.4.5本身,还是Heroku特别配置PostgreSQL服务器的问题。
提交的问题:https://www.mantisbt.org/bugs/view.php?id=20589
因此,修补代码后,我问的问题的答案是:
作为奖励答案,在Heroku配置的PostgreSQL数据库中显然是not possible to create a lower-privileged user - 你会被他们给你的一个用户所困扰。哪种方式很糟糕。