Postgresql

sudo su - postgres 和 sudo -u postgres 有什麼區別?

  • October 27, 2018

預設情況下,PostgreSQL 使用者在 unix 套接字上進行對等身份驗證,其中 unix 使用者必須與 PostgreSQL 使用者相同。所以人們經常使用susudo成為postgres超級使用者。

我經常看到人們使用如下結構:

sudo su - postgres

而不是

sudo -u postgres -i

我想知道為什麼。同樣,我見過:

sudo su - postgres -c psql

代替

sudo -u postgres psql

如果您sudo在沒有. 但是,為什麼要在比史前時代還少的 UNIX 或 Linux 上使用呢?su``sudo``sudo su

忘記sudo su

使用沒有任何好處sudo su,這是人們習慣使用時的不合時宜的習慣susudo當 Linux 發行版停止設置 root 密碼並成為sudo訪問 root 帳戶的唯一方法時,人們開始走在前面。他們沒有改變習慣,而是使用sudo su. (直到最近,當使用帶有配置的盒子sudoers迫使我改變習慣時,我才成為其中之一)。

採用sudo -u

對於登錄 shell,sudo -u postgres -i最好使用sudo su - postgres. 它不需要使用者具有root訪問權限/etc/sudoers,他們只需要成為使用者的權限postgres。它還可以讓您實施更好的訪問控制。

用於命令執行

sudo -u postgres psql -c "SELECT 1"

優於替代方案:

sudo su - postgres -c "psql -c \"SELECT 1\""

因為您不必雙重轉義引號和其他 shell 元字元以及不需要 root 的其他安全優勢。你可能會不小心寫到:

sudo su - postgres -c psql -c "SELECT 1"

有時,這將無法正常工作。

最後,通過設置環境變數更容易sudo,例如

sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster

比通過su. (這裡,PATH需要設置initdb才能找到正確的postgres執行檔)。

所以。忘記su命令存在。你不再需要它了。要打破這種習慣,請將其別名為會列印錯誤的內容。(一些 init 和 package setup 腳本仍在使用su,因此您無法刪除它)。

也可以看看:

引用自:https://serverfault.com/questions/601140