4.2. PostgreSQL ユーザーの作成
PostgreSQL ユーザーは以下のタイプのものです。
-
postgres
UNIX システムユーザー: PostgreSQL サーバーおよびクライアントアプリケーション (pg_dump
など) を実行する場合にのみ使用してください。データベース作成およびユーザー管理などの、PostgreSQL 管理上の対話的な作業には、postgres
システムユーザーを使用しないでください。 -
データベースのスーパーユーザー: デフォルトの
postgres
PostgreSQL スーパーユーザーは、postgres
システムユーザーとは関係ありません。pg_hba.conf
ファイルのpostgres
のスーパーユーザーのアクセスを制限することができます。制限しない場合には、その他のパーミッションの制限はありません。他のデータベースのスーパーユーザーを作成することもできます。 特定のデータベースアクセスパーミッションを持つロール:
- データベースユーザー: デフォルトでログインするパーミッションがある。
- ユーザーのグループ: グループ全体のパーミッションを管理できるようにします。
ロールはデータベースオブジェクト (テーブルや関数など) を所有することができ、SQL コマンドを使用してオブジェクト権限を他のロールに割り当てることができます。
標準のデータベース管理権限には SELECT
、INSERT
、UPDATE
、DELETE
、TRUNCATE
、REFERENCES
、TRIGGER
、CREATE
、CONNECT
、TEMPORARY
、EXECUTE
、および USAGE
が含まれます。
ロール属性は、LOGIN
、SUPERUSER
、CREATEDB
、および CREATEROLE
などの特別な権限です。
Red Hat は、スーパーユーザーではないロールとしてほとんどのタスクを実行することを推奨します。一般的な方法として、CREATEDB
および CREATEROLE
の権限を持つロールを作成し、このロールをデータベースおよびロールのすべてのルーチン管理に使用します。
前提条件
- PostgreSQL サーバーがインストールされている
- データベースクラスターが初期化されている
手順
ユーザーを作成するには、ユーザーのパスワードを設定し、ユーザーに
CREATEROLE
およびCREATEDB
の権限を割り当てます。postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;
mydbuser をユーザー名に、mypasswd をユーザーのパスワードに置き換えます。
例4.1 PostgreSQL データベースの初期化、作成、接続
この例では、PostgreSQL データベースを初期化方法、日常的なデータベース管理権限を持つデータベースユーザーの作成方法、および管理権限を持つデータベースユーザーを介して任意のシステムアカウントからアクセスできるデータベースの作成方法を示します。
PosgreSQL サーバーをインストールします。
# dnf install postgresql-server
データベースクラスターを初期化します。
# postgresql-setup --initdb * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
パスワードハッシュアルゴリズムを
scram-sha-256
に設定します。/var/lib/pgsql/data/postgresql.conf
ファイルで、次の行を変更します。#password_encryption = md5 # md5 or scram-sha-256
更新後は次のようになります。
password_encryption = scram-sha-256
/var/lib/pgsql/data/pg_hba.conf
ファイルで、IPv4 ローカル接続用に次の行を変更します。host all all 127.0.0.1/32 ident
更新後は次のようになります。
host all all 127.0.0.1/32 scram-sha-256
postgresql サービスを起動します。
# systemctl start postgresql.service
postgres
という名前のシステムユーザーとしてログインします。# su - postgres
PostgreSQL インタラクティブターミナルを起動します。
$ psql psql (13.7) Type "help" for help. postgres=#
オプション: 現在のデータベース接続に関する情報を取得します。
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
mydbuser
という名前のユーザーを作成し、mydbuser
のパスワードを設定して、CREATEROLE
およびCREATEDB
の権限をmydbuser
に割り当てます。postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLE
これで、
mydbuser
ユーザーは、日常的なデータベース管理操作 (データベースの作成とユーザーインデックスの管理) を実行できるようになりました。\q
メタコマンドを使用して、インタラクティブターミナルからログアウトします。postgres=# \q
postgres
ユーザーセッションからログアウトします。$ logout
mydbuser
として PostgreSQL ターミナルにログインし、ホスト名を指定して、初期化中に作成されたデフォルトのpostgres
データベースに接続します。# psql -U mydbuser -h 127.0.0.1 -d postgres Password for user mydbuser: Type the password. psql (13.7) Type "help" for help. postgres=>
mydatabase
という名前のデータベースを作成します。postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>
セッションからログアウトします。
postgres=# \q
mydbuser
として mydatabase に接続します。# psql -U mydbuser -h 127.0.0.1 -d mydatabase Password for user mydbuser: psql (13.7) Type "help" for help. mydatabase=>
オプション: 現在のデータベース接続に関する情報を取得します。
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".