打印

PostgreSQL学习文档 8.0 三

16.6. 关闭服务器

有好几种关闭数据库服务器的方法。 通过给服务器进程发送不同的信号,你就可以控制关闭服务器的方法。

SIGTERM

    在收到SIGTERM信号后,服务器不再允许新的联接,但是允许所有活跃的会话正常完成他们的工作, 只有在所有会话都结束任务(通过客户端请求)后才关闭。 这是 智能关闭。
SIGINT

    服务器不再允许新的联接,向所有活跃服务器发送SIGTERM, (这样会让它们立刻退出),然后它等待子进程退出并关闭数据库。 这是快速关闭。
SIGQUIT

    这是 立即关闭, 会令postmaster向所有子进程发送SIGQUIT并且立即退出,而不会妥善地关闭数据库系统。 服务器在收到SIGQUIT之后会立即退出。 这样做会导致下次启动时的恢复(通过重放 WAL 日志)。 我们推荐只在紧急的时候使用这个方法。

pg_ctl 程序提供了一个发送这些信号关闭服务器的便利接口。

另外,你可以用 kill 直接发送这些信号。 可以用 ps 命令找出 postmaster 的 PID,或者也可以从数据目录里的文件 postmaster.pid 里面找到。所以,举例来说,要做一次快速关闭:

$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`

    Important: 尽可能不要用SIGKILL关闭服务器。 这样会阻止服务器清理共享内存和信号灯资源,那样的话你只能在启动服务器之前自己手工做这件事。 另外,SIGKILL 直接把 postmaster 杀掉, 而不会等它把信号中继给它的子进程,因此我们还需要手工杀掉每个独立子进程。

TOP

16.7. 用 SSL 进行安全的 TCP/IP 联接

PostgreSQL 有一个内建的通过 SSL 进行加密的客户端/服务器端的通讯, 这样可以增加安全性。这个特性要求在客户端和服务器端都安装 OpenSSL 并且在制作PostgreSQL的时候打开(参阅 Chapter 14)。

当编译了SSL进去以后,可以通过设置 postgresql.conf 里的参数 ssl 为 on 来打开 PostgreSQL 服务器的SSL支持。 当开始SSL模式后, 服务器将在数据目录里查找 server.key 文件和 server.crt 文件,必须分别包含服务器私钥和证书。 在打开SSL的服务器运行之前必须先正确的设置这些文件。 如果私钥用一个口令保护,那么服务器将提示输入口令,并且在口令成功校验之前不会启动。

服务器将在同一个 TCP 端口上同时监听标准的和SSL的联接, 并且将与任何正在联接的客户端进行协商,协商是否使用SSL。 缺省时,这是根据客户端的选项而定的。 参阅 Section 19.1 获取如何强制服务器端只使用SSL进行某些或者全部联接的信息。

有关创建你的服务器私钥和证书的细节信息,你们可以参考 OpenSSL 的文档。 你可以用一个自认证的证书进行测试, 但是在生产环境中应该使用一个由认证中心(CA) (全球的 CA或者区域的CA都可以)签发的证书, 这样客户端才能够识别服务器的身份。 要创建一份自认证的证书,可以使用下面的OpenSSL命令

openssl req -new -text -out server.req

填充那些openssl向你询问的信息。 确保把本地主机名当做Common Name输入。 该程序将生成一把用口令保护的密钥。小于四字符的口令保护是不被接受的。 要移去密钥(如果你想自动启动服务器就得这样),运行下面的命令

openssl rsa -in privkey.pem -out server.keyrm privkey.pem

输入旧口令把现有密钥解锁。然后

openssl req -x509 -in server.req -text -key server.key -out server.crtchmod og-rwx server.key

把证书变成自签名的证书,然后把秘钥和证书拷贝到服务器寻找它们的地方。

如果需要验证客户端的证书,那么在数据目录的 root.crt 里放置你想校验的 CA 的证书。 如果出现这个证书,那么在 SSL 连接启动的时候就会要求客户端提供客户端的证书, 并且这个证书必须是已经由 root.crt 里面出现的认证之一签发的。

如果没有 root.crt 文件,那么就不需要检查客户端认证。 这个模式下,SSL 提供通讯安全但不保证认证。

文件 server.key,server.crt,和 root.crt 只是在服务器启动的时候检查;如果你修改了他们,那么必须重启服务器才能生效。

TOP

16.8. 用SSH隧道进行安全 TCP/IP 联接

我们可以使用 SSH 对 PostgreSQL 服务器和客户端之间的网络联接进行加密。经过适当处理后,这样做可以获得一个足够安全的网络联接。 即使是没有 SSL 的客户端上也如此。

首先确认 SSH 正在和 PostgreSQL 服务器的同一台机器上正确地运行, 而且你可以通过某个用户用SSH登录。然后你可以用下面这样的命令从客户端的机器上建立一个安全通道:

ssh -L 3333:foo.com:5432 joe@foo.com

-L 参数的第一个数字,3333,是通道你这端的端口号;可以自由选择。 第二个数字,5432,是通道的远端:你的服务器使用的端口号。 在两个端口号之间的名称或者 IP 地址是你准备联接的数据库服务器。 为了使用这个通道与你的数据库服务器联接,你在本机于端口 3333 联接:

psql -h localhost -p 3333 template1

对于数据库服务器而言,她会把你当做真正的用户 joe@foo.com 并且使用为这个用户和主机设置的认证手段进行认证。 请注意,服务器不会认为连接是 SSL 加密的,因为实际上在 SSH 服务器和 PostgreSQL 服务器之间是没有加密的。 只要它们在同一台机器上,这么做并不会导致任何安全漏洞。

为了保证能够成功地建立通道,你必须被允许作为 joe@foo.com 通过ssh建立联接, 就象你使用ssh建立终端会话一样。

    提示: 还有几种不同的产品可以提供安全的通道,所使用的过程类似我们刚刚描述的过程。

TOP

待续。。。

TOP

学习

TOP

在物理层实现连接功能可采用

TOP


感谢一直以来您对我们的支持!
当前时区 GMT+8, 现在时间是 2008-8-22 06:16 京ICP证060528 号

Designed By 17DST