4.3. PostgreSQL ユーザーの作成
PostgreSQL ユーザーは以下のタイプのものです。
-
postgresUNIX システムユーザー: PostgreSQL サーバーおよびクライアントアプリケーション (pg_dumpなど) を実行する場合にのみ使用してください。データベース作成およびユーザー管理などの、PostgreSQL 管理上の対話的な作業には、postgresシステムユーザーを使用しないでください。 -
データベースのスーパーユーザー: デフォルトの
postgresPostgreSQL スーパーユーザーは、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.servicepostgresという名前のシステムユーザーとしてログインします。# su - postgresPostgreSQL インタラクティブターミナルを起動します。
$ 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=# \qpostgresユーザーセッションからログアウトします。$ logoutmydbuserとして 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=# \qmydbuserとして 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".