AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 83164
Accepted
Marcus Junius Brutus
Marcus Junius Brutus
Asked: 2014-11-21 06:40:36 +0800 CST2014-11-21 06:40:36 +0800 CST 2014-11-21 06:40:36 +0800 CST

PostgreSQL:删除用户 postgres 的密码要求

  • 772

我知道,安装后,PostgreSQL 的 db root 用户(postgres)没有密码:

postgres=# select usename, passwd is null from pg_shadow;
 usename  | ?column? 
----------+----------
 postgres | t
(1 row)

...建议将其设置为:

alter role postgres password '<<very-secret>>';

(然后pg_hba.conf相应地更新文件)

我的问题是:当 user 不需要密码时,用于恢复到以前情况的 SQL 是什么postgres。

一般来说,我怎样才能删除任何角色的密码要求?我不是在问如何更改密码,而是在问如何删除密码要求(表中的空passwd列pg_shadow)。

postgresql linux
  • 4 4 个回答
  • 172328 Views

4 个回答

  • Voted
  1. Best Answer
    Craig Ringer
    2014-11-21T18:05:23+08:002014-11-21T18:05:23+08:00

    pg_shadow是否需要密码与是否为用户实际定义了密码无关。是的,我知道,这很奇怪。

    pg_hba.conf控制身份验证方法。如果要请求密码,请使用md5身份验证。如果您想允许任何人无需密码即可登录,请使用trust. 如果您想在操作系统中要求与 PostgreSQL 中相同的用户名,请使用peer(UNIX,仅用于本地连接) 或sspi(Windows)。

    如果设置了密码,但pg_hba.conf没有告诉 PostgreSQL 要求它,则密码将被忽略。

    如果pg_hba.conf告诉 PostgreSQL 要求输入密码但没有设置密码,那么无论提供什么密码,所有登录尝试都将失败。

    • 89
  2. lalligood
    2016-01-14T14:29:26+08:002016-01-14T14:29:26+08:00

    postgres 用户默认没有密码。要删除用户密码(在本例中为 postgres 用户/角色):

    alter role postgres password null;
    

    我们还需要将身份验证设置为trust查看详细pg_hba.conf信息

    • 19
  3. Michael Besteck
    2020-11-23T06:04:34+08:002020-11-23T06:04:34+08:00

    截至 2020 年 11 月 22 日,在 ubuntu 18 上使用 PostgreSQL 13,我偶然发现了@lalligood(和@thouliha - 同时被删除)给出的答案,将自己的用户 postgres 锁定在无密码之外。

    以下假设登录是使用运行 PostgreSQL 服务器的计算机上的 psql (wrapper-) 程序完成的。

    在阅读了 PostgreSQL 13.0 文档第 20 章(客户端身份验证)后,我想知道为什么要将 ...127.0.0.1/32.... 和 ...::1/128... 行更改为信任身份验证。文档说得很清楚: pg_hba.conf 中适合的第一行被采用,所有其他行都被忽略。所以只使用(默认)第一行就足够了

    local   all     postgres    peer
    

    此行与到 PostgreSQL 服务器的(unix-)套接字连接(来自 psql)有关。 未提及的“问题”是 psql 程序默认使用到 localhost 的 TCP 连接(偶数)。

    为了证明这一点,只需注释掉 pg_hba.conf 中的 ...127.0.0.1/32.... 和 ...::1/128... 行,并使 PostgreSQL 服务器重新读取修改后的行。

    怎么做,来自文档:

    如果您在活动系统上编辑文件,则需要向 postmaster 发送信号(使用 pg_ctl reload、调用 SQL 函数 pg_reload_conf() 或使用 kill -HUP)以使其重新读取文件。

    你也可能“粗暴地”发出

     systemctl restart postgresql 
    

    如果 db-restart 无关紧要。

    然后,尝试使用 psql 程序连接会出现一条错误消息,指示 psql 尝试通过 TCP 连接。

    一旦使用 psql 通过 unix-socket 连接,pg_hba.conf 中的第一行就可以工作,并且(超级)用户 postgres 可以将他的密码设置为 null 或任何字符串,并且仍然可以连接而无需询问密码。

    通过套接字连接:

    psql -h /var/run/postgresql -p 5432
    

    或者

    export PGPORT=5432; psql -h /var/run/postgresql
    

    并在控制台会话中进一步使用

    psql -h /var/run/postgresql
    

    看:

    man psql
    

    特别是对于“-h”和“-p”选项。

    来自我的控制台的引用,不需要也不需要密码(sys lang 是德语):

    postgres@hostname:/tmp$ psql -h /var/run/postgresql -p 5432

    psql (13.1 (Ubuntu 13.1-1.pgdg18.04+1))

    Geben Sie »help« für Hilfe ein.

    postgres=# 更改角色 postgres 密码 null;

    改变角色

    postgres=#\q

    postgres@hostname:/tmp$ psql -h /var/run/postgresql -p 5432

    psql (13.1 (Ubuntu 13.1-1.pgdg18.04+1))

    Geben Sie »help« für Hilfe ein.

    postgres=# 更改角色 postgres 密码 'secret';

    改变角色

    postgres=#\q

    postgres@hostname:/tmp$ psql -h /var/run/postgresql -p 5432

    psql (13.1 (Ubuntu 13.1-1.pgdg18.04+1))

    Geben Sie »help« für Hilfe ein.

    附录:

    @a_horse_with_no_name 发表了一条引用 man psql 的评论:

    如果省略主机名,psql 将通过 Unix 域套接字连接到本地主机上的服务器,或通过 TCP/IP 连接到没有 Unix 域套接字的机器上的 localhost。

    谢谢你的提示,这是正确的,但后面直接是相关的

    默认端口号在编译时确定。由于数据库服务器使用相同的默认值,因此在大多数情况下您不必指定端口。

    这将导致在标准端口 5432 以外的其他端口上运行 db-server 时需要指定主机或套接字目录(-h 参数)。

    我必须承认我在上面的“来自我的控制台的引用”中作弊,因为“主机名”不是我计算机的真实主机名,并且 5432 不是我的 PostgreSQL 13 服务的端口。这样做是出于隐私和简单的原因。事实上,我有一个 PostgreSQL 9.6 在端口 5432 上运行,而 13 版本同时在另一个端口上运行。

    对于测试,我在 9.6 和 13 的 pg_hba.conf 中禁用了 ...127.0.0.1/32.... 和 ...::1/128... 行,以便只能进行 sockect 连接。

    无论如何,在@a_horse_with_no_name 的评论之后,一个简单的

    psql
    

    应该通过套接字连接到我的 PostgreSQL 9.6 服务器。但事实并非如此!当我发布时它甚至没有

    psql -p 5432
    

    如果服务器版本 13 被禁用,则结果相同,因此标准端口 5432 上只有一个 db-server (9.6) 正在运行。

    当我尝试时也没有

    psql -p [port of my version 13 db-server]
    

    运行服务器 13 版本。

    在所有这些情况下,psql 都尝试不通过套接字连接,而是通过 TCP 连接。我监督了什么?至少我的解决方案,指定套接字目录,应该可以工作。

    在提供 unix-sockets 的 Ubuntu 18.04 上,似乎需要 -h 参数及其参数,指定端口或套接字目录。

    顺便说一句,PGHOST 和 PGPORT 环境变量都没有设置,而是未定义。

    如果有人知道更好,请发表评论。

    • 2
  4. Computer Savvy
    2021-01-10T19:21:25+08:002021-01-10T19:21:25+08:00

    如果您在连接时不告诉 PSQL 使用什么用户名或数据库,它会使用系统$USER来识别登录用户并使用该名称附加到数据库。它需要用户和数据库才能正确建立连接。这超出了 PostgreSQL 文档的第 1.4 节。

    如果您不提供数据库名称,那么它将默认为您的用户帐户名称。

    如果没有具有该名称的数据库可以连接到它,AFAIK 将会失败(当我以这种方式测试它时它会失败)。如果存在名称匹配的数据库,$USER那么它将使用“psql”连接到该数据库,并且没有指定数据库(我再次测试以确定)。

    • 0

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve