在Ubuntu上安装PostgreSQL并设置远程访问的步骤如下:

由于在启动PostgreSQL服务器方面遇到了一些问题,我在这里做个备忘录。

操作系统:Ubuntu14.04 LTS

安装

一开始要安装PostgreSQL。
只需要使用apt-get命令就可以安装,没有什么特别需要注意的事项。

$ sudo apt-get update
$ sudo apt-get install -y postgresql-9.3

如果成功安装,应该会在/etc/init.d/目录下生成启动脚本。
可以使用start命令启动服务器,但这样还无法连接上。

$ /etc/init.d/postgresql start
 * Starting PostgreSQL 9.3 database server                 [ OK ]
$ /etc/init.d/postgresql status
9.3/main (port 5432): online
$ psql
psql: FATAL:  role "root" does not exist

因为在这里我们使用超级用户root连接到数据库,所以收到了”角色root不存在”的错误提示。

设置卷的设定

PostgreSQL使用角色(role)来管理权限。
角色类似于UNIX中的组(group),可以设置对每个数据库的访问或覆写权限。

制作这个角色有两种方式。

有一种方式是使用用户名为postgres登录到PostgreSQL,然后更改角色的设置。

还有一种方法是使用Shell命令createuser。
这个命令是在安装PostgreSQL的同时设置的,只需输入createuser name,就会创建一个名为name的角色。

我只想解释其中一种方法。

一旦成功安装后,将会创建名为”postgres”的用户和对应的角色。
默认情况下,”postgres”角色是PostgreSQL的超级用户,并具有修改角色设置的权限。

切换到postgres账户,并登录到PostgreSQL服务器上。

$ su - postgres
$ psql
psql (9.3.5)
Type "help" for help.
postgres=#

如果直接使用psql命令而不提供用户名和数据库名,将使用与操作系统用户同名的用户和数据库。因此,上面的psql命令与psql –username=postgres –dbname=postgres具有相同的意义。与root不同,这次确实可以登录,因为存在名为postgres的角色。

可以使用以下命令来查看现在登录状态下的现有角色:SELECT rolname FROM pg_roles;或\du命令。默认情况下,没有其他角色,唯一的角色是超级用户postgres。

postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication | {}

在中文中,只需要一種選擇:

不建立其他角色,直接使用超級用戶postgres來創建和運營數據庫是完全可行的,但是由於安全原因,直接使用超級用戶登錄並不理想,所以建立除超級用戶以外的角色仍然更加方便。

创建新的角色可以使用”CREATE ROLE name;”或者”CREATE USER name;”命令来进行创建。尽管在创建后也可以更改角色的属性,但可以使用以下关键字在创建时添加属性。

    • LOGIN

 

    • SUPERUSER

 

    • CREATEDB

 

    • CREATEROLE

 

    • REPLICATION

 

    PASSWORD

这里有关于属性的详细说明:
https://www.postgresql.jp/document/9.3/html/role-attributes.html

首先,创建一个名为hellopsql的角色,并添加LOGIN CREATEDB PASSWORD属性。

postgres=# CREATE ROLE hellopsql LOGIN CREATEDB PASSWORD 'hello';
CREATE ROLE
postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 hellopsql | Create DB                                      | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

使用此指令已创建了账户名为hellopsql、密码为hello的角色。

我希望立即使用hellopsql的角色登录,但由于还没有创建可以访问的数据库,所以下一步我想开始创建数据库。

创建数据库

在创建数据库的过程中,有两种方法可供选择。

一种方法是使用PostgreSQL的Shell来使用CREATE DATABASE命令创建数据库。

另一个选项是使用与安装同时设置的shell命令”createdb”来创建数据库。

另外,如果您想要确认已创建的数据库,您可以使用PostgreSQL的Shell命令SELECT datname FROM pg_database;或者使用\l命令来进行确认。

postgres=# CREATE DATABASE hellopsql OWNER hellopsql;
CREATE DATABASE
postgres=# \l
                              List of databases
   Name    |   Owner   | Encoding  | Collate | Ctype |   Access privileges   
-----------+-----------+-----------+---------+-------+-----------------------
 hellopsql | hellopsql | SQL_ASCII | C       | C     | 
 postgres  | postgres  | SQL_ASCII | C       | C     | 
 template0 | postgres  | SQL_ASCII | C       | C     | =c/postgres          +
           |           |           |         |       | postgres=CTc/postgres
 template1 | postgres  | SQL_ASCII | C       | C     | =c/postgres          +
           |           |           |         |       | postgres=CTc/postgres
(4 rows)

用这个,就已经准备好了角色和数据库了。
稍后只需输入psql –username=hellopsql –password –dbname=hellopsql的命令,应该就可以连接上了。

如果出现类似以下Peer错误,请进一步修改客户端验证设置。

$ psql --username=hellopsql --password --dbname=hellopsql             
Password for user hellopsql: 
psql: FATAL:  Peer authentication failed for user "hellopsql"

设置客户端认证

这是类似于iptables的东西。可以进行各种设置,如允许来自哪个IP、哪个用户的连接,使用什么身份验证方式等。

在默认设置中,从本地进行的连接方式是通过ident进行的,因此用于登录的用户名必须与当前客户端操作系统中的用户名相同。换句话说,如果想要使用hellopsql进行连接,就必须在操作系统中创建一个名为hellopsql的用户,并使用该用户进行连接。

因为默认设置很不方便,所以我想要修改一次/etc/postgresql/9.3/main/ph_hba.conf的设置。

不提供详细说明,但如果您想了解更多,请参考以下网站:
https://www.postgresql.jp/document/9.3/html/auth-pg-hba-conf.html
http://qa.atmarkit.co.jp/q/2604

$ vi /etc/postgresql/9.3/main/pg_hba.conf

顺便提一下,我的配置文件大致如下。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# ローカルから且つスーパーユーザの接続はpeer認証を使います
local   all             postgres                                peer
# ローカルから且つスーパーユーザ以外の接続を無条件で通す
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# リモートから且つスーパーユーザの接続を拒否します
host    all             postgres        0.0.0.0/0               reject
# TCP connections by md5
host    all             all             0.0.0.0/0               md5

修改设置后,使用 “/etc/init.d/postgresql restart” 重新启动服务器。

$ /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.3 database server                             [ OK ]

远程连接

如果想要远程操作,需要修改/etc/postgresql/9.3/main/postgresql.conf配置文件,因为默认配置不允许远程连接。

$ vi /etc/postgresql/9.3/main/postgresql.conf

请找到listen_addresses字段,并将其更改如下。

listen_addresses='*'

如果更改了设置,将通过 /etc/init.d/postgresql restart 命令进行重新启动。

$ /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.3 database server                             [ OK ]
广告
将在 10 秒后关闭
bannerAds