PostgreSQLユーザーはデフォルトでUNIXソケットでピア認証を行います。UNIXユーザーはPostgreSQLユーザーと同じである必要があります。したがって、人々は頻繁にsu
またはSudo
を使用してpostgres
スーパーユーザーになります。
私はしばしば人々が次のような構成を使用しているのを見ます:
Sudo su - postgres
のではなく
Sudo -u postgres -i
そして私はなぜだろうと思います。同様に、私は見ました:
Sudo su - postgres -c psql
の代わりに
Sudo -u postgres psql
先頭のSudo
がなければ、su
のない古いプラットフォームを使用している場合、Sudo
バージョンは意味があります。しかし、なぜプレホリシックではないUNIXまたはLinuxでSudo su
を使用するのですか?
Sudo su
Sudo su
を使用するメリットはありません。これは、人々がsu
を使用していた時代からの時代遅れの習慣です。 Linuxディストリビューションがrootパスワードの設定をやめ、Sudo
をrootアカウントにアクセスする唯一の方法にしたとき、人々はSudo
を前に付け始めました。彼らは習慣を変えるのではなく、Sudo su
を使用しました。 (私は比較的最近まで、sudoers
構成のボックスを使用して自分の習慣を変えるように強いられたときの1人でした)。
Sudo -u
を使用ログインシェルの場合、Sudo -u postgres -i
よりもSudo su - postgres
の方が適しています。ユーザーが/etc/sudoers
でrootアクセス権を持っている必要はありません。ユーザーはpostgres
になる権限だけが必要です。また、アクセス制御を強化することもできます。
コマンド実行用
Sudo -u postgres psql -c "SELECT 1"
代替より優れています:
Sudo su - postgres -c "psql -c \"SELECT 1\""
引用符やその他のシェルメタ文字を二重にエスケープする必要がなく、ルートを必要としないという他のセキュリティ上の利点もあります。おそらく誤って書き込みます。
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およびパッケージセットアップスクリプトはsu
を使用しているため、削除できません)。
以下も参照してください。