PostgreSQLまたはPostgresは、フォールトトレラントな環境や複雑なアプリケーションを構築できる多くの高度な機能を備えたオープンソースの汎用オブジェクトリレーショナルデータベース管理システムです。
このガイドでは、PostgreSQLデータベースサーバーをUbuntu 20.04にインストールする方法を説明し、PostgreSQLデータベース管理の基本を探ります。
前提条件#
パッケージをインストールするには、rootまたはsudo権限を持つユーザーとしてログインする必要があります。
UbuntuにPostgreSQLをインストールする#
この記事を書いている時点で、公式のUbuntuリポジトリから入手できるPostgreSQLの最新バージョンはPostgreSQLバージョン10.4です。
次のコマンドを実行して、PostgreSQLサーバーをUbuntuにインストールします。
sudo apt update
sudo apt install postgresql postgresql-contrib
また、PostgreSQLデータベースシステムにいくつかの追加機能を提供するPostgreSQLcontribパッケージもインストールしています。
インストールが完了すると、PostgreSQLサービスが自動的に開始されます。 psql
を使用します PostgreSQLデータベースサーバーに接続してそのバージョンを印刷することにより、インストールを確認するためのツール:
sudo -u postgres psql -c "SELECT version();"
PostgreSQL 12.2 (Ubuntu 12.2-4) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-8ubuntu1) 9.3.0, 64-bit
それでおしまい。 PostgreSQLがインストールされており、使用を開始できます。
PostgreSQLの役割と認証方法#
PostgreSQL内のデータベースアクセス許可は、ロールの概念で処理されます。ロールは、データベースユーザーまたはデータベースユーザーのグループを表すことができます。
PostgreSQLは複数の認証方法をサポートしています。最も一般的に使用される方法は次のとおりです。
- 信頼-
pg_hba.conf
で定義されている条件である限り、ロールはパスワードなしで接続できます。 満たされています。 - パスワード-役割はパスワードを提供することで接続できます。パスワードは
scram-sha-256
として保存できます 、md5
、およびpassword
(クリアテキスト)。 - Ident-TCP/IP接続でのみサポートされます。これは、オプションのユーザー名マッピングを使用して、クライアントのオペレーティングシステムのユーザー名を取得することで機能します。
- ピア-Identと同じですが、ローカル接続でのみサポートされます。
PostgreSQLクライアント認証は、pg_hba.conf
という名前の構成ファイルで定義されています。 。デフォルトでは、PostgreSQLはローカル接続にピア認証方式を使用しています。
postgres
PostgreSQLをインストールすると、ユーザーが自動的に作成されます。このユーザーはPostgreSQLインスタンスのスーパーユーザーであり、MySQLルートユーザーと同等です。
postgres
としてPostgreSQLサーバーにログインするには ユーザー、最初にユーザーに切り替えてから、psql
を使用してPostgreSQLプロンプトにアクセスします ユーティリティ:
sudo su - postgres
psql
ここから、PostgreSQLインスタンスを操作できます。 PostgreSQLシェルタイプを終了するには:
\q
ユーザーを切り替えずにPostgreSQLプロンプトにアクセスする別の方法は、sudo
を使用することです。 コマンド:
sudo -u postgres psql
通常、データベースサーバーにはpostgres
としてログインする必要があります ローカルホストからのみ。
PostgreSQLの役割とデータベースの作成#
CREATEROLE
を持つスーパーユーザーとロールのみ 特権は新しい役割を作成できます。
次の例は、john
という名前の新しいロールを作成する方法を示しています。 johndb
という名前のデータベース データベースに対する特権を付与します:
-
新しいPostgreSQLロールを作成します:
sudo su - postgres -c "createuser john"
-
新しいPostgreSQLデータベースを作成します:
sudo su - postgres -c "createdb johndb"
データベース上のユーザーに権限を付与するには、PostgreSQLシェルに接続します。
sudo -u postgres psql
次のクエリを実行します:
GRANT ALL PRIVILEGES ON DATABASE johndb TO john;
PostgreSQLサーバーへのリモートアクセスを有効にする#
デフォルトでは、PostgreSQLサーバーはローカルインターフェース(127.0.0.1
)でのみリッスンします 。
PostgreSQLサーバーへのリモートアクセスを有効にするには、構成ファイルpostgresql.conf
を開きます。 listen_addresses = '*'
を追加します CONNECTIONS AND AUTHENTICATION
セクション。
sudo nano /etc/postgresql/12/main/postgresql.conf
/etc/postgresql/12/main/postgresql.conf #------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
ファイルを保存してPostgreSQLサービスを再起動します:
sudo service postgresql restart
ss
で変更を確認します ユーティリティ:
ss -nlt | grep 5432
出力は、PostgreSQLサーバーがすべてのインターフェース(0.0.0.0
)をリッスンしていることを示しています。 ):
LISTEN 0 244 0.0.0.0:5432 0.0.0.0:*
LISTEN 0 244 [::]:5432 [::]:*
次のステップは、pg_hba.conf
を編集して、リモート接続を受け入れるようにサーバーを構成することです。 ファイル。
以下は、さまざまなユースケースを示すいくつかの例です。
/etc/postgresql/12/main/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD
# The user jane can access all databases from all locations using md5 password
host all jane 0.0.0.0/0 md5
# The user jane can access only the janedb from all locations using md5 password
host janedb jane 0.0.0.0/0 md5
# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host all jane 192.168.1.134 trust
最後のステップは、ポート5432
を開くことです。 ファイアウォールで。
UFW
を使用していると仮定します ファイアウォールを管理し、192.168.1.0/24
からのアクセスを許可したい サブネットの場合、次のコマンドを実行します:
sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5432
信頼できるIP範囲からの接続のみを受け入れるようにファイアウォールが構成されていることを確認してください。