在 macOS 上将用户切换到“postgres”用户会导致“su:抱歉”错误

Bas*_*que 4 postgresql permissions users

EnterpriseDB.com 向社区提供的Postgres 安装程序通常会在macOSpostgres上创建一个用户帐户。

\n\n

在Terminal.app的控制台会话中,我需要切换到该用户。我的目标是使用该 user\xe2\x80\x99s 权限运行文本编辑器,以便我可以编辑pg_hba.conf控制 Postgres 用户身份验证规则的文件。

\n\n

当我尝试时:

\n\n
su - postgres\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 系统提示我输入用户密码,我输入成功,但收到错误消息:

\n\n
\n

苏:对不起

\n
\n\n

我确信密码是正确的。我可以做什么来访问该postgres用户?

\n

Dan*_*ité 7

EBD 安装程序在安装过程中要求输入密码,但这适用于数据库用户,而不是postgres没有密码的 Unix 用户。

EDB 站点上的Postgres、密码和安装程序中提到了这一点。引用:

在 Linux 和 Mac OS X 等类 Unix 操作系统上,帐户的设置无需密码,用户通常无需再担心。

对您来说,无法工作的最合理的解释su - postgres是您将数据库密码与操作系统密码混淆了。

为了使其su - postgres可用,需要首先设置操作系统密码,可以通过以下方式完成:

$ sudo passwd postgres
Run Code Online (Sandbox Code Playgroud)

对于 Linux 发行版中打包的 PostgreSQL 来说也是如此。事实上,Linux 的 PostgreSQL 软件包甚至更进一步,不询问数据库超级用户的密码,这允许完全自动化的安装。就像如果始终使用操作系统密码则不需要一样,如果用户仅使用sudo默认身份验证方法则不需要数据库密码。peerpostgres


Bas*_*que 6

sudo su postgres

\n\n

在 Stack Overflow 上找到这个已关闭的问题及其重复项后,我将在这里发布在那里找到解决方案。

\n\n

\xe2\x9e\xa5 必须将sudo命令与命令结合su使用。

\n\n
sudo su postgres\n
Run Code Online (Sandbox Code Playgroud)\n\n

出现提示时,输入macOS 管理员用户密码,而不是postgresuser\xe2\x80\x99s 密码。此时,您的 Mac 管理员用户是执行该sudo命令的用户,而不是postgres用户。

\n\n

虽然我不明白为什么我们必须将 与 结合起来sudosu但它确实在macOS Mojave中对我有用。我在各种与 BSD 和 Linux 相关的搜索工作中没有找到这个提示,所以这也许是 Mac 专用的 Apple 的东西,也许是一个额外的安全措施。或者也许在 Unix 风格的操作系统中,该su命令必须由用户运行root,并且在 macOS 中,root出于安全目的,默认情况下禁用该帐户 \xe2\x80\x93\xc2\xa0our Mac 管理员用户帐户的功能不如root,并且可能默认没有授权运行su?不知道,不在乎,解决方法有效。

\n\n

现代替代方案:sudo -u

\n\n

根据Craig RingerErwin Brandstetter 的说法,更现代的形式是:

\n\n
sudo -u postgres -i\n
Run Code Online (Sandbox Code Playgroud)\n\n

根据此页面

\n\n
    \n
  • -u表示 \xe2\x80\x9c 作为指定用户 \xe2\x80\x9d 运行指定命令。
  • \n
  • postgres指定我们要运行命令的用户名。
  • \n
  • -i模拟初始登录,这意味着将运行该 user\xe2\x80\x99s 启动脚本来初始化 shell。
  • \n
  • 未提供任何命令,因此执行交互式 shell。
  • \n
\n\n

有关旧方法和新方法的更多讨论,请参阅姊妹网站上的问题,sudo su - postgres 和 sudo -u postgres 之间有什么区别?。克雷格·林格(Craig Ringer)的答案建议:(a)忘记sudo su,(b)改用sudo -u

\n\n

postgres以用户身份运行应用程序

\n\n

psql以用户身份运行会话postgres

\n\n
sudo -u postgres psql\n
Run Code Online (Sandbox Code Playgroud)\n\n

要以用户身份运行文本编辑器应用程序:nano postgres

\n\n
sudo -u postgres nano\n
Run Code Online (Sandbox Code Playgroud)\n