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;
postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuser をユーザー名に、mypasswd をユーザーのパスワードに置き換えます。
例4.1 PostgreSQL データベースの初期化、作成、接続
この例では、PostgreSQL データベースを初期化方法、日常的なデータベース管理権限を持つデータベースユーザーの作成方法、および管理権限を持つデータベースユーザーを介して任意のシステムアカウントからアクセスできるデータベースの作成方法を示します。
PosgreSQL サーバーをインストールします。
dnf install postgresql-server
# dnf install postgresql-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow データベースクラスターを初期化します。
postgresql-setup --initdb
# postgresql-setup --initdb * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow パスワードハッシュアルゴリズムを
scram-sha-256に設定します。/var/lib/pgsql/data/postgresql.confファイルで、次の行を変更します。#password_encryption = md5 # md5 or scram-sha-256
#password_encryption = md5 # md5 or scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新後は次のようになります。
password_encryption = scram-sha-256
password_encryption = scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow /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 identCopy to Clipboard Copied! Toggle word wrap Toggle overflow 更新後は次のようになります。
host all all 127.0.0.1/32 scram-sha-256
host all all 127.0.0.1/32 scram-sha-256Copy to Clipboard Copied! Toggle word wrap Toggle overflow
postgresql サービスを起動します。
systemctl start postgresql.service
# systemctl start postgresql.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgresという名前のシステムユーザーとしてログインします。su - postgres
# su - postgresCopy to Clipboard Copied! Toggle word wrap Toggle overflow PostgreSQL インタラクティブターミナルを起動します。
psql
$ psql psql (13.7) Type "help" for help. postgres=#Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 現在のデータベース接続に関する情報を取得します。
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".
postgres=# \conninfo You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuserという名前のユーザーを作成し、mydbuserのパスワードを設定して、CREATEROLEおよびCREATEDBの権限をmydbuserに割り当てます。postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLE
postgres=# CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB; CREATE ROLECopy to Clipboard Copied! Toggle word wrap Toggle overflow これで、
mydbuserユーザーは、日常的なデータベース管理操作 (データベースの作成とユーザーインデックスの管理) を実行できるようになりました。\qメタコマンドを使用して、インタラクティブターミナルからログアウトします。postgres=# \q
postgres=# \qCopy to Clipboard Copied! Toggle word wrap Toggle overflow postgresユーザーセッションからログアウトします。logout
$ logoutCopy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuserとして PostgreSQL ターミナルにログインし、ホスト名を指定して、初期化中に作成されたデフォルトのpostgresデータベースに接続します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow mydatabaseという名前のデータベースを作成します。postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>
postgres=> CREATE DATABASE mydatabase; CREATE DATABASE postgres=>Copy to Clipboard Copied! Toggle word wrap Toggle overflow セッションからログアウトします。
postgres=# \q
postgres=# \qCopy to Clipboard Copied! Toggle word wrap Toggle overflow mydbuserとして mydatabase に接続します。psql -U mydbuser -h 127.0.0.1 -d mydatabase
# psql -U mydbuser -h 127.0.0.1 -d mydatabase Password for user mydbuser: psql (13.7) Type "help" for help. mydatabase=>Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: 現在のデータベース接続に関する情報を取得します。
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".
mydatabase=> \conninfo You are connected to database "mydatabase" as user "mydbuser" on host "127.0.0.1" at port "5432".Copy to Clipboard Copied! Toggle word wrap Toggle overflow