技术开发 频道

PostgreSQL数据库管理入门之连接篇

  【IT168 技术】上一篇文章我们介绍了《PostgreSQL数据库管理入门之psql工具篇》,本文将带读者一起了解如何连接PostgreSQL数据库,以及远程访问数据库的方法。

  一、连接PostgreSQL

  对于初次接触PostgreSQL的人来说,通常第一件要做的事情恐怕就是连接数据库了。现在我们将介绍如何连接数据库,以及常见问题的处理方法。我们知道,建立连接的时候,一件重要的事情就是安全,因为我们必须以一种安全的方式来访问数据。

  在向数据库发号施令之前,我们必须先连接数据库服务器,以得到一个会话。会话是长使用的,所以只需连接一次,即可执行许多请求的操作,然后断开数据库。当建立连接的时候,需要一定的开销。如果我们频繁的连接和断开数据库,那么所带来的开销就相当可观了,这时应当考虑使用连接池。连接池允许我们在重新连接数据库的时候使用事先连接好的会话,这样的话,用起来既方便又快捷。

  现在说说连接前的准备工作。首先,找到数据库,如果数据库在哪里的都不知道话,那么就别想访问它了。此外,如果有多个数据库的话,那就得弄清楚到底访问哪个数据库,并且还得具有相应的权限。

  接下来,我们讲讲具体操作方法。当我们连接PostgreSQL的时候,需要指定如下所示的五个参数:

    主机或主机地址
    端口
    数据库名
    用户
    口令或者其他认证方式?

  要想连接上数据库,前提是指定的主机上必须运行了PostgreSQL服务器,并且正在侦听上面给定的端口。此外,在这个服务器上还必须存在指定名称的数据库,以及指定名称的一个用户。该主机还必须允许从我们的客户端发起连接,同时,我们还需通过服务器规定的认证。例如,如果口令错误的话,如果该会要求通过其它方式进行认证。

  如果我们不指定这些参数的话,系统会通过环境变量来查找相应的值,如下所示:

    PGHOST或者 PGHOSTADDR
    PGPORT(如果没设置的话,可以将其设为5432)
    PGDATABASE
    PGUSER
    PGPASSWORD

  如果您规定了前四个参数,但是没有给出口令的话,系统将会自动查找口令文件。

  上面介绍了具体操作,下面讲讲有关的机制。PostgreSQL服务器是一种客户-服务器架构的数据库,它统运行在一个主机上。我们可以通过网络远程访问PostgreSQL服务器,但是我们必须通过hostname或者hostaddr(IP地址)来指定该主机。如果希望在本机上建立一个TCP/IP连接的话,我们可以将主机规定为localhost。在使用Unix套按字连接的时候,主机将以/开头,然后跟着一个目录名,缺省为/tmp。

  无论哪种系统,都可以有多个数据库服务器。每个数据库服务器都会侦听一个网络端口,但是同一系统上的不同服务器不能共享同一个端口。PostgreSQL缺省的端口号为5432,IANA组织已经将该端口唯一地分配给了PostgreSQL。如果系统中存在多个数据库服务器的话,我们可以通过端口号来区分它们。

  数据库服务器有时被称为数据库群集,因为PostgreSQL服务器允许我们在每个服务器上定义一个或多个数据库。每个连接请求必须通过数据库名来精确区分数据库。在连接数据库的时候,我们只能看到在指定数据库中创建的数据库对象。

  数据库用户也可以用来标识连接。默认时,不会限制用户的连接数目,但是我们也可以这样做。对于较新的PostgreSQL版本,用户被作为登录角色看待,所谓登录角色就是一个已经分配了CONNECT权限的角色。

  每个连接都需要通过某种形式的认证。认证方式由服务器定义。

  一旦连接,就可以向数据库发出操作指令了。

  服务器通常都定义了可以接受的连接数目,所以当服务器的连接数量达到这个限制的时候,我们的连接请求就会被拒绝。下面我们看看连接有关的信息。

  如果想知道是否以正确的方式连接到了正确的数据库,我们可以执行下面给出的命令加以验证:

  SELECT inet_server_port(); 该命令显示服务器所侦听的端口号。

  SELECT current_database(); 显示当前的数据库。

  SELECT current_user; 该命令显示当前的userid。

  SELECT inet_server_addr(); 显示接受连接的服务器的IP地址。

  很明显,用户的口令是无法以普通SQL进行访问的。

  二、远程访问数据库

  为安全起见,PostgreSQL的许多版本 默认时禁用了其远程访问功能。那么,如何启用该功能呢?

  为了启用网络或者远程访问功能,我们需要在postgresql.conf文件中添加或者编辑下列内容:

  listen_addresses = '*'

  在pg_hba.conf的第一行添加如下内容,以便允许所有用户通过加密口令来访问所有数据库:

  # TYPE DATABASE USER CIDR-ADDRESS METHOD

  host all all 0.0.0.0/0 md5

  下面我们对上面的内容做简单说明。参数listen_addresses指定了要侦听的IP地址。这样的话,即使每个系统上有多个网卡也没关系了。在大多数情况下,我们会接受所有网卡上的连接,所以可以使用“*”,它表示所有IP地址。

  pg_hba.conf中存放有一组基于主机的认证规则。每条规则会被逐条应用,直到找到一条符合的,就能通过认证;或者访问被reject方法显式拒绝。上面的示例中给出的规则表示,所有远程连接,无论用户为谁,无论访问那个数据库,也无论来自哪个IP地址,都要求通过md5加密的口令进行认证。

  Type = host表示远程连接。Database = all 表示所有数据库。其他名字要求严格匹配,除非带有前缀+,这个前缀表示组角色,而非某个用户。我们还可以规定一个由逗号分隔的用户表,或者使用@ symbol 来包含一个存放用户表的文件。我们还可以使用sameuser,这样的话只有当用户名和数据库名称一致时才匹配。

  User = all 表示所有用户。其他名字要求严格匹配,除非带有前缀+,这个前缀表示组角色,而非某个用户。我们还可以规定一个由逗号分隔的用户表,或者使用@ symbol来包含一个存放用户表的文件。

  CIDR-ADDRESS 由两部分组成,即IP地址/子网掩码。子网掩码规定了IP地址中前面哪些位表示网络编号。这里/0表示IP地址中没有表示网络编号的位,这样的话全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。我们还可以使用samenet或者samehost。

  这里一定要注意,千万不要使用password设置,这样会允许明文形式的口令。

  Method = trust 实际上表示无需认证。其他的认证方法包括GSSAPI、SSPI、LDAP、RADIUS和PAM。此外,我们还可以使用SSL连接PostgreSQL,这时用客户端的SSL证书进行认证。

  对于PostgreSQL的早期版本,在启动服务器时可以通过命令开关- i来启用网络访问功能。该命令开关依然有效,不过得像下面一样:

  listen_addresses = '*'

  三、小结

  本文将带读者一起了解如何连接PostgreSQL数据库,以及远程访问数据库的方法。这里,我们不仅给出了具体的操作,还对这些操作给出了具体的说明,希望本文对读者的学习能够有所帮助。

0
相关文章