Postgresql
sudo su - postgres 和 sudo -u postgres 有什麼區別?
預設情況下,PostgreSQL 使用者在 unix 套接字上進行對等身份驗證,其中 unix 使用者必須與 PostgreSQL 使用者相同。所以人們經常使用
su
或sudo
成為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
,這是人們習慣使用時的不合時宜的習慣su
。sudo
當 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
,因此您無法刪除它)。也可以看看: