第一次如何配置postgresql?
Posted
技术标签:
【中文标题】第一次如何配置postgresql?【英文标题】:How to configure postgresql for the first time? 【发布时间】:2010-12-01 02:10:20 【问题描述】:我刚刚安装了 postgresql,并在安装过程中指定了密码 x。
当我尝试执行 createdb
并指定任何密码时,我会收到以下消息:
createdb: 无法连接到数据库 postgres: FATAL: 用户密码验证失败
createuser
也一样。
我应该如何开始? 我可以将自己作为用户添加到数据库吗?
【问题讨论】:
How do I login and authenticate to Postgresql after a fresh install?的可能重复 这与一年后提出的这个问题非常相似。但是,我相信这个有一个dangerous的主要答案。您应该不设置postgres
用户。它是 PostgreSQL 的 SU
,它为您打开了针对它的登录攻击的大门。 Create another super-user,并为具有 root 权限的 UNIX 管理员保留锁定的 postgres
。
【参考方案1】:
在 MacOS 中,我按照以下步骤使其工作。
第一次安装后,获取系统的用户名。
$ cd ~
$ pwd
/Users/someuser
$ psql -d postgres -U someuser
现在您已经登录系统,可以创建数据库了。
postgres=# create database mydb;
CREATE DATABASE
postgres=# create user myuser with encrypted password 'pass123';
CREATE ROLE
postgres=# grant all privileges on database mydb to myuser;
GRANT
【讨论】:
【参考方案2】:其他答案对我来说并不完全令人满意。以下是在 Xubuntu 12.04.1 LTS 上适用于 postgresql-9.1 的方法。
使用用户 postgres 连接到默认数据库:
sudo -u postgres psql 模板1
设置用户postgres的密码,然后退出psql(Ctrl-D):
使用加密密码“xxxxxxx”更改用户 postgres;
编辑pg_hba.conf
文件:
sudo vim /etc/postgresql/9.1/main/pg_hba.conf
在 postgres 的行中将“peer”改为“md5”:
本地 所有 postgres
peermd5
要知道您正在运行的 postgresql 版本,请在 /etc/postgresql
下查找版本文件夹。此外,您可以使用 Nano 或其他编辑器代替 VIM。
重启数据库:
sudo /etc/init.d/postgresql 重启
(在这里您可以检查它是否适用于psql -U postgres
)。
创建一个和你同名的用户(要找到它,你可以输入whoami
):
sudo createuser -U postgres -d -e -E -l -P -r -s
<my_name>
这些选项告诉 postgresql 创建一个可以登录的用户,创建数据库,创建新角色,是一个超级用户,并且有一个加密的密码。真正重要的是 -P -E,以便您输入将被加密的密码,以及 -d 以便您可以输入createdb
。
注意密码:它会首先询问您两次新密码(针对新用户),重复一次,然后再询问一次 postgres 密码(在步骤 2 中指定的密码)。
再次,编辑pg_hba.conf
文件(参见上面的步骤3),将“所有”其他用户所在行的“peer”更改为“md5”:
本地 所有 所有
peermd5
重新启动(如第 4 步),并检查您是否可以在没有 -U postgres 的情况下登录:
psql 模板1
请注意,如果您只执行psql
,它将失败,因为它会尝试将您连接到与您同名的默认数据库(即whoami
)。 template1 是从一开始就存在的管理数据库。
现在createdb <dbname>
应该可以工作了。
【讨论】:
这个过程在 Ubuntu 13.10 上也很有效。创建用户时只需记住第 5 步中的 sudo 即可。 在 Ubuntu 14.04 LTS 上也表现出色 作为注释,pg_hba.conf
中的行必须是第一行,否则可能会因为其他规则而被忽略(F21 上的 pgsql 9.3.5)。我花了一些时间才弄清楚这一点,为 postgresql 用户取消注释和更改已经注释掉的行不会简单。
这实际上是个坏建议。你在和 postgres 用户打交道。 ***.com/a/41604969/124486
请将答案更新到 2017 年! PostgreSQL 9.6 和 UBUNTU 16 LTS...没有简单的方法??【参考方案3】:
编辑:警告:请阅读Evan Carroll 发布的答案。看来这个解决方案不安全,不推荐。
这在标准 Ubuntu 14.04 64 位安装中对我有用。
我按照我在http://suite.opengeo.org/4.1/dataadmin/pgGettingStarted/firstconnect.html 中找到的说明进行了少量修改
-
安装 postgreSQL(如果您的计算机中尚未安装):
sudo apt-get install postgresql
-
使用 postgres 用户运行 psql
sudo –u postgres psql postgres
-
为 postgres 用户设置新密码:
\password postgres
-
退出 psql
\q
-
编辑 /etc/postgresql/9.3/main/pg_hba.conf 并更改:
#Database administrative login by Unix domain socket
local all postgres peer
收件人:
#Database administrative login by Unix domain socket
local all postgres md5
-
重启 postgreSQL:
sudo service postgresql restart
-
创建一个新数据库
sudo –u postgres createdb mytestdb
-
再次使用 postgres 用户运行 psql:
psql –U postgres –W
-
列出现有数据库(您的新数据库现在应该在那里):
\l
【讨论】:
我投了反对票,因为我认为激活postgres
用户是个坏主意。 ***.com/a/41604969/124486【参考方案4】:
Note: textdb is the database which you are going to explore with 'alex' user
root@kalilinux:~# sudo su - postgres
postgres=# psql
postgres=# create database testdb;
postgres=# create user alex with password 'alex';
postgres=# GRANT ALL PRIVILEGES ON DATABASE testdb TO alex;`enter code here`
【讨论】:
【参考方案5】:您可以使用两种方法。两者都需要创建用户和数据库。
使用 createuser 和 createdb,
$ sudo -u postgres createuser --superuser $USER
$ createdb mydatabase
$ psql -d mydatabase
使用 SQL 管理命令,并通过 TCP 使用密码连接
$ sudo -u postgres psql postgres
然后,在 psql shell 中
CREATE ROLE myuser LOGIN PASSWORD 'mypass';
CREATE DATABASE mydatabase WITH OWNER = myuser;
然后就可以登录了,
$ psql -h localhost -d mydatabase -U myuser -p <port>
如果您不知道端口,您始终可以通过运行以下命令来获取它,作为postgres
用户,
SHOW port;
或者,
$ grep "port =" /etc/postgresql/*/main/postgresql.conf
旁注:postgres
用户
我建议不要修改postgres
用户。
-
它通常被操作系统锁定。没有人应该以
postgres
的身份“登录”到操作系统。您应该拥有 root 权限才能以 postgres
身份进行身份验证。
它通常不受密码保护并委托给主机操作系统。这是好事。这通常意味着为了以postgres
(相当于SQL Server 的SA
)的PostgreSQL 身份登录,您必须对底层数据文件具有写访问权限。而且,这意味着无论如何你通常都会造成严重破坏。
通过禁用此功能,您可以消除通过指定超级用户进行暴力攻击的风险。隐藏和掩盖超级用户的名字是有好处的。
【讨论】:
使用第一种方法,用户最终没有权限。我最终使用了这个而不是第一个命令:sudo -u postgres createuser -U postgres -d -e -E -l -P -r -s $(whoami)
@FabienSnauwaert -s
使用户成为超级用户。【参考方案6】:
如果你像我一样运行 macOS,你可能没有 postgres 用户。
在尝试运行 sudo -u postgres psql
时,我收到了错误 sudo: unknown user: postgres
幸运的是,postgres 提供了一些可执行文件。
createuser -D /var/postgres/var-10-local --superuser --username=nick
createdb --owner=nick
然后我可以毫无问题地访问psql
。
psql
psql (10.2)
Type "help" for help.
nick=#
如果您要从头开始创建新的 postgres 实例,以下是我采取的步骤。我使用了一个非默认端口,所以我可以运行两个实例。
mkdir /var/postgres/var-10-local
pg_ctl init -D /var/postgres/var-10-local
然后我用我的首选端口 5433 编辑了/var/postgres/var-10-local/postgresql.conf
。
/Applications/Postgres.app/Contents/Versions/10/bin/postgres -D /Users/nick/Library/Application\ Support/Postgres/var-10-local -p 5433
createuser -D /var/postgres/var-10-local --superuser --username=nick --port=5433
createdb --owner=nick --port=5433
完成!
【讨论】:
【参考方案7】:只需浏览到您的安装目录并执行此文件“pg_env.bat”,然后转到 bin 文件夹并执行 pgAdmin.exe。毫无疑问,这一定有效!
【讨论】:
【参考方案8】:在 Linux 下,PostgresQL 通常配置为允许 root 用户以 postgres 超级用户 postgres
从 shell(控制台或 ssh)登录。
$ psql -U postgres
然后你就像往常一样创建一个新数据库:
CREATE ROLE myuser LOGIN password 'secret';
CREATE DATABASE mydatabase ENCODING 'UTF8' OWNER myuser;
这应该可以在不接触pg_hba.conf
的情况下工作。如果您希望能够通过网络使用一些 GUI 工具来执行此操作 - 那么您需要使用 pg_hba.conf
。
【讨论】:
我正在为我的目录运行 initdb 并存在配置文件的 Windows 上工作。现在 createdb 可以工作,但是当我执行 psql 测试时,我收到消息警告:控制台代码页 (437) 与 Windows 代码页 (1252) 不同 8 位字符可能无法正常工作。有关详细信息,请参阅 psql 参考页“Windows 用户注意事项”。并且所有命令都不起作用。psql: FATAL: Peer authentication failed for user "postgres"
即使使用 sudo。
完美答案,我不想触及配置文件,这在 Ubuntu 上的 PostgreSQL 10.10 上完美运行。之后您应该能够与psql -d mydatatabase -U myuser
联系。【参考方案9】:
这是我的解决方案:
su root
su postgres
psql
【讨论】:
这在许多情况下都有效,因为许多站点将使用 pg_hba.conf 针对 postgres 系统帐户(对等方法)对 postgres db 用户进行身份验证。然而,成功登录最终将取决于任何特定站点的 pg_hba.conf 的内容。 为我工作。我用sudo bash
替换了第一行。
我不明白这有什么帮助,.. 据我了解,这会登录 root 和 postgres,然后运行 psql。到底发生了什么?谢谢!【参考方案10】:
您可能需要更新您的pg_hba.conf
文件。此文件控制哪些用户可以从哪些 IP 地址登录。我认为 postgres 用户默认情况下是相当锁定的。
【讨论】:
对于 RHEL6.4 和 postgres 8.4,该文件位于/var/lib/pgsql/data/pg_hba.conf
。将ident
更改为trust
用于host
(如果您使用的是ssh,则将local
)。以上是关于第一次如何配置postgresql?的主要内容,如果未能解决你的问题,请参考以下文章
postgresql_exporter 不工作。如何配置它?
如何在 jmeter 中通过隧道配置 PostgreSQL 数据库
如何配置从 Vanilla Postgresql 9.6 DB 到 AWS RDS Postgresql 的流复制