首页 文章

我忘记了在postgres安装过程中输入的密码

提问于
浏览
158

我忘了或错误输入(在安装过程中)密码给Postgres的默认用户 . 我似乎无法运行它,我收到以下错误:

psql: FATAL:  password authentication failed for user "hisham"
hisham-agil: hisham$ psql

是否有重置密码或如何创建具有超级用户权限的新用户?

我是Postgres的新手,刚刚第一次安装它 . 我正在尝试使用它与Rails,我正在运行Mac OS X Lion .

11 回答

  • 56
    • 找到文件 pg_hba.conf - 它可能位于,例如 /etc/postgresql-9.1/pg_hba.conf .

    cd /etc/postgresql-9.1/

    • 备份

    cp pg_hba.conf pg_hba.conf-backup

    • 放置以下行(作为第一个未注释的行,或作为唯一的行):

    对于所有下面的(本地和主机),exepct复制部分,如果你没有,它必须如下更改,不应该存在MD5或Peer autehication .

    `local  all   all   trust`
    
    • 重新启动PostgreSQL服务器(例如,在Linux上:)

    sudo /etc/init.d/postgresql restart

    如果服务(守护程序)未在日志文件中开始报告:

    此版本不支持本地连接

    你应该改变

    local all all trust

    host all all 127.0.0.1/32 trust

    • 您现在可以像任何用户一样进行连接 . 以超级用户身份连接 postgres (注意,超级用户名在您的安装中可能有所不同 . 例如,在某些系统中,它被称为 pgsql . )

    psql -U postgres

    要么

    psql -h 127.0.0.1 -U postgres

    (请注意,使用第一个命令,您不会始终与本地主机连接)

    • 重置密码('因为您正在重置 postgres 用户,将my_user_name替换为 postgres

    ALTER USER my_user_name with password 'my_secure_password';

    • 恢复旧的 pg_hba.conf ,因为它是 very dangerous 保持不变

    cp pg_hba.conf-backup pg_hba.conf

    • 重启服务器,以便与安全 pg_hba.conf 一起运行

    sudo /etc/init.d/postgresql restart

    进一步阅读pg_hba文件:http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

  • 304

    从命令行连接到postgres时,不要忘记添加 -h localhost 作为命令行参数 . 如果没有,postgres将尝试使用PEER身份验证模式进行连接 .

    下面显示了密码的重置,使用PEER身份验证的登录失败以及使用TCP连接成功登录 .

    # sudo -u postgres psql
    could not change directory to "/root"
    psql (9.1.11)
    Type "help" for help.
    
    postgres=# \password
    Enter new password:
    Enter it again:
    postgres=# \q
    

    失败:

    # psql -U postgres -W
    Password for user postgres:
    psql: FATAL:  Peer authentication failed for user "postgres"
    

    使用 -h localhost

    # psql -U postgres -W  -h localhost
    Password for user postgres:
    psql (9.1.11)
    SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
    Type "help" for help.
    
    postgres=#
    
  • 75

    自从给出这些答案后, pg_hba.confC:\Program Files\PostgreSQL\9.3\data )文件已更改 . 在Windows中,对我来说有用的是打开文件并将 METHODmd5 更改为 trust

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust
    # IPv6 local connections:
    host    all             all             ::1/128                 trust
    

    然后,使用pgAdmin III,我使用无密码登录并通过转到 File -> Change Password 更改了用户 postgres' 密码

  • 0

    只需注意,在Linux上你可以简单地运行 sudo su - postgres 成为postgres用户,并从那里改变使用psql所需的内容 .

  • 1

    如果你在窗户,你可以跑

    net user postgres postgres
    

    并使用postgres / postgres作为用户/密码登录postgres

  • 1

    对于Windows安装,将创建Windows用户 . 并且“psql”使用此用户连接到端口 . 如果更改PostgreSQL用户的密码,它将不会更改Windows密码 . 只有在您可以访问命令行时,下面的命令行juste才有效 .

    相反,您可以使用Windows GUI应用程序“c:\ Windows \ system32 \ lusrmgr.exe” . 此应用管理由Windows创建的用户 . 所以你现在可以修改密码了 .

  • 1
    • 编辑文件 /etc/postgresql/<version>/main/pg_hba.conf 并找到以下行:
    local   all             postgres                                md5
    
    • 编辑该行并将 md5 更改为 trust 并保存文件

    • 重新加载 postgresql 服务

    $ sudo service postgresql reload
    
    • 这将加载配置文件 . 现在,您可以通过登录 psql shell来修改 postgres 用户
    $ psql -U postgres
    
    • 更新 postgres 用户的密码
    alter user postgres with password 'secure-passwd-here';
    
    • 编辑文件 /etc/postgresql/<version>/main/pg_hba.conf 并将 trust 更改回 md5 并保存文件

    • 重新加载 postgresql 服务

    $ sudo service postgresql reload
    
    • 验证密码更改是否正常
    $ psql -U postgres -W
    
  • 7

    我为解决同样的问题所做的是:

    使用终端的gedit编辑器打开pg_hba.conf文件:

    sudo gedit /etc/postgresql/9.5/main/pg_hba.conf
    

    它会要求输入密码 . 输入您的管理员登录密码 . 这将打开文件gedit . 粘贴以下行:

    host  all   all  127.0.0.1/32  trust
    

    略低于 -

    # Database administrative login by Unix domain socket
    

    保存并关闭它 . 关闭终端并再次打开它并运行以下命令:

    psql -U postgres
    

    您现在将进入psql控制台 . 现在输入以下命令更改密码:

    ALTER USER [your prefered user name] with password '[desired password]';
    

    如果它说用户不存在则代替 ALTER 使用 CREATE .

    最后,删除您在pg_hba中粘贴的某一行并保存 .

  • 1

    为最新的postgres添加Windows用户的答案版本(> 10),

    转到你的postgres安装位置,搜索 pg_hba.conf ,你会在 ..\postgres\data\pg_hba.conf 找到它

    用记事本打开该文件,找到这一行,

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # IPv4 local connections: 
    host    all             all             127.0.0.1/32            md5
    # IPv6 local connections:
    host    all             all             ::1/128                 md5
    #..
    

    将方法从md5更改为trust,

    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # IPv4 local connections: 
    host    all             all             127.0.0.1/32            trust
    # IPv6 local connections:
    host    all             all             ::1/128                 trust
    # ...
    

    现在转到SQL Shell(PSQL)并将所有内容留空,

    Server [localhost]:
    Database [postgres]:
    Port [8000]:
    Username [postgres]:
    

    这次不会要求密码,您将登录,

    现在运行这一行, ALTER USER yourusername WITH SUPERUSER

    现在你可以用\ q留下shell

    再次转到文件pg_hba.conf并再次将METHOD从trust更改为md5,然后保存 .

    现在使用您的新用户和密码登录,您可以检查\ du的属性 .

  • -1

    用户主目录中的文件.pgpass或PGPASSFILE引用的文件可以包含在连接需要密码时使用的密码(否则未指定密码) . 在Microsoft Windows上,该文件名为%APPDATA%\ postgresql \ pgpass.conf(其中%APPDATA%指的是用户配置文件中的Application Data子目录) .

    此文件应包含以下格式的行:

    主机名:端口:数据库:用户名:密码

    (您可以通过复制上面的行并在其前面添加#来为文件添加提醒注释 . )前四个字段中的每一个都可以是字面值,或*,它匹配任何内容 . 将使用第一行中与当前连接参数匹配的密码字段 . (因此,在使用通配符时首先输入更具体的条目 . )如果条目需要包含:或\,请使用转义此字符 . localhost的主机名与来自本地计算机的TCP(主机名localhost)和Unix域套接字(pghost empty或默认套接字目录)连接相匹配 . 在备用服务器中,复制的数据库名称与对主服务器 Build 的流复制连接相匹配 . 数据库字段的用途有限,因为用户对同一群集中的所有数据库具有相同的密码 .

    在Unix系统上,.pgpass上的权限必须禁止对世界或组的任何访问;通过命令chmod 0600~ / .pgpass实现此目的 . 如果权限不如此严格,则将忽略该文件 . 在Microsoft Windows上,假定该文件存储在安全的目录中,因此不会进行特殊权限检查 .

  • 1

    这对我在Windows上有用:

    编辑pg_hba.conf文件位于C:\ Program Files \ PostgreSQL \ 9.3 \ data .

    # IPv4 local connections: host all all 127.0.0.1/32 trust

    将方法从trust更改为md5并在Windows上重新启动postgres服务 .

    之后,您可以使用pgadmin使用没有密码的postgres用户登录 . 您可以使用文件 - >更改密码更改密码 .

    如果postgres用户没有超级用户权限,则无法更改密码 . 在这种情况下,使用具有超级用户访问权限的其他用户(pgsql)登录,并通过右键单击用户并选择属性 - >角色权限为其他用户提供权限 .

相关问题