PostgreSQL用户默认在unix套接字上进行同等身份validation,其中unix用户必须与PostgreSQL用户相同。 所以人们经常用su
或sudo
来成为postgres
超级用户。
我经常看到人们使用结构如:
sudo su - postgres
而不是
sudo -u postgres -i
我想知道为什么。 同样,我已经看到:
sudo su - postgres -c psql
代替
sudo -u postgres psql
如果没有sudo
那么su
版本就会变得有意义。 但是为什么在一个比prehisoric的UNIX或者Linux更less的情况下,你会使用sudo su
?
使用sudo su
没有任何好处,从人们习惯使用sudo su
,这是一个不合时宜的习惯。 当Linux发行版停止设置root密码并使sudo
成为访问root帐户的唯一方式时,人们开始在前面加上sudo
。 他们不是改变习惯,而是使用sudo su
。 (我是其中的一个,直到最近使用sudoers
configuration框迫使我改变我的习惯)。
对于loginshell, sudo -u postgres -i
比sudo su - postgres
更可取。 它不要求用户在/etc/sudoers
拥有root用户权限,他们只需要成为用户postgres
的权限。 它也可以让你执行更好的访问控制。
用于命令执行
sudo -u postgres psql -c "SELECT 1"
优于备选scheme:
sudo su - postgres -c "psql -c \"SELECT 1\""
因为您不必双引号和其他shell元字符以及不需要root的其他安全优势。 你可能会不小心写下:
sudo su - postgres -c psql -c "SELECT 1"
有时,这将无法正常工作。
最后,通过sudo
设置环境variables更容易,例如
sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster
比通过su
。 (这里, PATH
设置是必需的,以便initdb
可以find正确的postgres
可执行文件)。
所以。 忘记su
命令存在。 你不再需要它了。 要打破这个习惯,将其别名打印到一个会打印错误的地方。 (一些初始化和包安装脚本仍然使用su
所以你不能删除它)。
也可以看看: