3.3. PostgreSQL ユーザーの作成
特定の権限を持つ PostgreSQL ユーザーを作成して、データベースへのアクセスを管理し、ユーザーの特権を制御することで、セキュアなデータベース管理を実現できます。
PostgreSQL ユーザーは以下のタイプのものです。
-
postgresLinux システムユーザー: PostgreSQL サーバーおよびクライアントアプリケーション (pg_dumpなど) を実行するためにのみ使用します。データベース作成およびユーザー管理などの、PostgreSQL 管理上の対話的な作業にはpostgresシステムユーザーを使用しないでください。 -
データベースのスーパーユーザー: デフォルトの
postgresPostgreSQL スーパーユーザーは、postgresシステムユーザーとは関係ありません。/var/lib/pgsql/data/pg_hba.confファイルでpostgresスーパーユーザーのアクセスを制限できます。それ以外の場合、他のパーミッションの制限はありません。他のデータベースのスーパーユーザーを作成することもできます。 特定のデータベースアクセスパーミッションを持つロール:
- データベースユーザー: デフォルトでログインするパーミッションがあります。
- ユーザーのグループ: グループ全体のパーミッションを管理できるようにします。
ロールはデータベースオブジェクト (テーブルや関数など) を所有でき、SQL コマンドを使用して他のロールにオブジェクト特権を割り当てることができます。
標準のデータベース管理権限には SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY、EXECUTE、および USAGE が含まれます。
ロール属性は、LOGIN、SUPERUSER、CREATEDB、および CREATEROLE などの特別な権限です。
ほとんどのタスクをスーパーユーザー以外のロールとして実行します。一般的な方法として、CREATEDB および CREATEROLE の権限を持つロールを作成し、このロールをデータベースおよびロールのすべてのルーチン管理に使用します。
前提条件
- PostgreSQL サーバーがインストールされている。
- データベースクラスターが初期化されている。
-
/var/lib/pgsql/data/postgresql.confファイルのpassword_encryptionパラメーターがscram-sha-256に設定されている。 -
/var/lib/pgsql/data/pg_hba.confファイル内のエントリーが、認証方法としてscram-sha-256ハッシュアルゴリズムを使用している。
手順
postgresシステムユーザーとしてログインするか、このユーザーに切り替えます。# su - postgresPostgreSQL インタラクティブターミナルを起動します。
$ psql psql (16.4) 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という名前のユーザーを作成し、パスワードを設定して、そのユーザーにCREATEROLEおよびCREATEDBパーミッションを割り当てます。postgres=# CREATE USER mydbuser WITH PASSWORD '<password>' CREATEROLE CREATEDB; CREATE ROLEこれで、
mydbuserユーザーは、日常的なデータベース管理操作 (データベースの作成とユーザーインデックスの管理) を実行できるようになりました。\qメタコマンドを使用して、インタラクティブターミナルからログアウトします。postgres=# \q
検証
mydbuserとして PostgreSQL ターミナルにログインし、ホスト名を指定して、初期化中に作成されたデフォルトのpostgresデータベースに接続します。# psql -U mydbuser -h 127.0.0.1 -d postgres Password for user mydbuser: Type the password. psql (16.4) Type "help" for help. postgres=>データベースを作成します。
postgres=> CREATE DATABASE <db_name>;セッションからログアウトします。
postgres=# \qmydbuserとして新しいデータベースに接続します。# psql -U mydbuser -h 127.0.0.1 -d <db_name> Password for user mydbuser: psql (16.4) Type "help" for help. mydatabase=>