PostgreSQLサーバの立ち上げに少しハマりましたので、メモしておきます。

OS: 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でDBに接続していますので、ロールrootは存在しませんと怒られました。

ロールの設定

PostgreSQLは権限の管理にロール(role)が使われています。
ロールはUNIXのgroupに似ていて、個々のDBに対するアクセスまたは上書きの権限が設定されています。

そのロールを作成するには二通りのやり方があります。

ひとつはユーザpostgresでPostgreSQLにログインして、ロールを設定を変えます。

もう一つはシェルでcreateuserのコマンドを使います。
このコマンドはPostgreSQLのインストールと同時に設定されたもので、createuser nameを入力しただけで名前がnameのロールが作成されます。

ここでは一つ目の方法だけを説明したいと思います。

最初のインストールが出来たら、postgresというユーザかつ同名のロールが作られます。
デフォルトでは、postgresのロールはPostgreSQLにとってのスーパユーザであり、ロール設定を変える権限を持ちます。

では、postgresアカウントに切り替えて、PostgreSQLサーバにログインします。

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

  

ユーザ名とDB名を与えずにそのままpsqlコマンドを使えば、オペレーティングシステムのユーザと同名のユーザとDBが使われます。ですので上の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でDBを作り、運用することは十分可能ですが、ただスーパーユーザでログインすることはセキュリティ的にあまり好ましくないので、やはりスーパーユーザ以外のロールを作ったほうが何かと便利です。

新しくロールを作るには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のロールでログインしたいのですが、まだこのロールでアクセスできるDBが作られていませんので、次はDBの作成に入りたいと思います。

DBの作成

DBの作成にも二通りのやりかたがあります。

ひとつはPostgreSQLのシェルでCREATE DATABASEのコマンドを使えば作成できます。

もう一つはインストールと同時に設定されたシェルコマンドのcreatedbを使ってDBを作成します。

また、作成したDBを確認したい場合はPostgreSQLのシェルで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)

  

これでロールとDBの準備が整えました。
あとで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/ph_hba.conf

  

ちなみに私の設定ファイルはこんな感じです。

/etc/postgresql/9.3/main/ph_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の欄を探して、それを下のように変えましょう。

/etc/postgresql/9.3/main/postgresql.conf
listen_addresses='*'

設定を変更したら/etc/init.d/postgresql restartで再起動します。

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

  

UbuntuでPostgreSQLをインストールからリモートアクセスまでの手順的更多相关文章

  1. Ubuntu PostgreSQL安装和配置

    一.安装 1.安装 使用如下命令,会自动安装最新版,这里为9.5 sudo apt-get install postgresql 安装完成后,默认会: (1)创建名为"postgres&qu ...

  2. Ubuntu PostgreSql主从切换

    主机:192.168.100.70 从机:192.168.100.71 通用配置(即主从都要配置) 修改/etc/postgresql/10/main/pg_hba.conf host all all ...

  3. 英語版Windows Server 2012 R2を日本語化する手順

    [スタート]ボタンを押し.[Control Panel]を起動 [Clock, Language and Region]の下の[Add a Language]をクリック [Add a Language ...

  4. MyEclipseアンロックの手順

    ↓ ↓ ↓ ↓ ↓ ↓

  5. WIN7+Ubuntu双系统,win7启动不了

    在网上搜索了下,大多说的是因为重装引起的坏道, 我经过半天的搜索才找到了问题所在,首先看看下面连接的二楼大神给出的解决方案: https://forum.ubuntu.org.cn/viewtopic ...

  6. pgAdmin III 是 postgresql 的管理工具

    ubuntu postgresql 的管理工具

  7. 【Linux】-Ubuntu常用命令吐血整理

    前言 刚刚接触Linux操作系统,真的是各种艰难啊,用个什么东西都得从头开始配置,这个时候才明白从头再来是什么滋味了.自己装了数个数十几次的Centos版本的Linux系统,好不容易争气了一次,跑了起 ...

  8. 常用linux命令和配置

      find只查看文件和只查看目录 find -type f -name clexec find -type d -name clexec   解压rpm [root@sj_x861 2]# ls e ...

  9. CentOS使用ufw的方法

    ufwはファイアウォールの管理ツールで.Ubuntuで標準的に使われています.ufw allow 80/tcp のような簡単なコマンドでポートを開け閉めできます. CentOS用のパッケージは用意され ...

随机推荐

  1. phpstudy 80端口被占用,修改端口

    搭建mantis,总会出现80端口被占用的情况.看到别的步骤是:1.cmd 运行netstat -ano查看80端口被什么占用,然后在任务管理器找到对应的结束进程.通常情况下是被System占用,右击 ...

  2. asp.net mvc ajax FileUpload

    //后台代码 [HttpPost] public ActionResult CreateCategory(HttpPostedFileBase file) { string url = Upload( ...

  3. 采用cocos2d-x lua 的listview 实现pageview的翻页效果之上下翻页效果

    --翻页滚动效果local function fnScrollViewScrolling( sender,eventType)    -- body    if eventType == 10 the ...

  4. C#设计模式之原型模式

    原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象. 分析: 孙悟空:根据自己的形状复制(克隆)出多个身外身 软件开发:通过复制一个原型对象得到多个与原型对象一模一样的新对 ...

  5. 顺序查找SequentialSearch

    #include <stdio.h>int SequentialSearch(int *a,int n,int x);int main(void){ //num代表查找的数 int num ...

  6. 关于python数据序列化的那些坑

    -----世界上本来没那么多坑,python更新到3以后坑就多了 无论哪一门语言开发,都离不了数据储存与解析,除了跨平台性极好的xml和json之外,python要提到的还有自身最常用pickle模块 ...

  7. C# 小知识

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.C ...

  8. Java 8 新特性之泛型的类型推导

    1. 泛型究竟是什么? 在讨论类型推导(type inference)之前,必须回顾一下什么是泛型(Generic).泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据 ...

  9. Python 学习拾遗

    该博文主要适应于python2.7,并没有对py3进行测试. 主要记录学习python过程中容易出现的一些小问题.小错误,相信能给你启发. 1.剔除一个字符串中的所有空格(假设该字符串是s) &quo ...

  10. JAVA语言搭建白盒静态代码、黑盒网站插件式自动化安全审计平台

    近期打算做一个插件化的白盒静态代码安全审计自动化平台和黑盒网站安全审计自动化平台.现在开源或半开源做黑盒网站安全扫描的平台,大多是基于python脚本,安全人员贡献python脚本插件增强平台功能.对 ...