与操作系统用户同名的PostgreSQL用户如何工作?
How do PostgreSQL users with same name as operating system users work?
我偶然发现了 PostgreSQL 安装,其中有一个与操作系统 (Linux) 用户同名的 PostgreSQL 用户。如果您作为这样的用户登录操作系统,您通常可以登录 psql
而无需指定用户名和密码作为该用户。
这是如何运作的?这是纯粹的约定,还是 PostgreSQL 中有针对这种行为的特殊机制?
在某些情况下,操作系统用户不存在相应的 PostgreSQL 用户。在这种情况下,我如何创建一个,一旦我作为该用户登录到操作系统后无需指定用户名和密码就可以登录?
https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-PASSFILE
创建 pgpass 文件:vim ~/.pgpass
填写您的凭据:hostname:port:database:username:password
退出文件。并更改 ~/.pgpass
文件访问权限:
https://www.postgresql.org/docs/current/libpq-pgpass.html
chmod 0600 ~/.pgpass
如果您的 linux 用户与 pgpassfile 用户之一相同,则只需键入 psql
即可连接到数据库。
有几种机制。不过,我不知道是什么让机制变得特别。
客户端总是向服务器发送用户名。如果您没有指定要使用的操作系统,那么 libpq-based 客户端会查找操作系统名称并使用它。一些非 libpq-based 客户可能会采用相同的约定。
为了不需要密码,可能在 pg_hba.conf 中将本地连接设置为 'trust',在这种情况下,同一台机器上的任何其他人也可以像您一样登录 PostgreSQL,只需指定您要使用的用户名,例如 -U martinw
。或者可能需要密码,但它是通过 .pgpass 文件或通过 PGPASSWORD 环境变量自动提供的,但如果你设置了它,你可能会记得这样做。或者您可能在 pg_hba 中将本地连接设置为 peer
,在这种情况下,数据库服务器会询问 OS“谁在这个套接字的另一端?”并验证答案是否与请求的用户名匹配(这是常见的默认设置,例如 Ubuntu Linux)或者如果正在使用 pg_ident 映射,则它会验证响应系统用户名允许以指定的数据库用户名登录。
我偶然发现了 PostgreSQL 安装,其中有一个与操作系统 (Linux) 用户同名的 PostgreSQL 用户。如果您作为这样的用户登录操作系统,您通常可以登录 psql
而无需指定用户名和密码作为该用户。
这是如何运作的?这是纯粹的约定,还是 PostgreSQL 中有针对这种行为的特殊机制?
在某些情况下,操作系统用户不存在相应的 PostgreSQL 用户。在这种情况下,我如何创建一个,一旦我作为该用户登录到操作系统后无需指定用户名和密码就可以登录?
https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-PASSFILE
创建 pgpass 文件:vim ~/.pgpass
填写您的凭据:hostname:port:database:username:password
退出文件。并更改 ~/.pgpass
文件访问权限:
https://www.postgresql.org/docs/current/libpq-pgpass.html
chmod 0600 ~/.pgpass
如果您的 linux 用户与 pgpassfile 用户之一相同,则只需键入 psql
即可连接到数据库。
有几种机制。不过,我不知道是什么让机制变得特别。
客户端总是向服务器发送用户名。如果您没有指定要使用的操作系统,那么 libpq-based 客户端会查找操作系统名称并使用它。一些非 libpq-based 客户可能会采用相同的约定。
为了不需要密码,可能在 pg_hba.conf 中将本地连接设置为 'trust',在这种情况下,同一台机器上的任何其他人也可以像您一样登录 PostgreSQL,只需指定您要使用的用户名,例如 -U martinw
。或者可能需要密码,但它是通过 .pgpass 文件或通过 PGPASSWORD 环境变量自动提供的,但如果你设置了它,你可能会记得这样做。或者您可能在 pg_hba 中将本地连接设置为 peer
,在这种情况下,数据库服务器会询问 OS“谁在这个套接字的另一端?”并验证答案是否与请求的用户名匹配(这是常见的默认设置,例如 Ubuntu Linux)或者如果正在使用 pg_ident 映射,则它会验证响应系统用户名允许以指定的数据库用户名登录。