pg_authid
pg_authidカタログはデータベース認証識別子(ロール)の情報を保持します。
ロールは「ユーザ」と「グループ」の概念を包括しています。
ユーザは本質的にrolcanloginフラグセットを持ったロールです。
どのようなロール(rolcanloginを持っている、持っていないに関わらず)も他のロールをメンバとして持っていても構いません。
pg_auth_membersを参照してください。
  
このカタログはパスワードを含んでいるため、第三者が内容を読むことができないようにしなければいけません。
pg_rolesは、pg_authidのビューで、パスワードのフィールドは空白となっていますので内容を読み取ることができます。
  
第21章でユーザと権限管理に関するより詳細について説明します。
ユーザの本人確認はクラスタ全体にわたる情報ですので、pg_authidはクラスタのすべてのデータベースで共有されます。
データベース毎ではなく、クラスタ毎にたった1つだけpg_authidが存在します。
  
表52.8 pg_authidの列
| 名前 | 型 | 説明 | 
|---|---|---|
| oid | oid | 行識別子(隠し属性です。明示的に選択しなければなりません) | 
| rolname | name | ロール名 | 
| rolsuper | bool | ロールはスーパーユーザの権限を持っています | 
| rolinherit | bool | ロールは自動的にメンバとして属するロールの権限を継承します | 
| rolcreaterole | bool | ロールはロールを作成することができます | 
| rolcreatedb | bool | ロールはデータベースを作成することができます | 
| rolcanlogin | bool | ロールはログインすることができます。つまりロールはセッションを始める認証の識別子となることができます | 
| rolreplication | bool | ロールはレプリケーション用のロールです。 レプリケーションロールは、レプリケーション接続を開始すること、およびレプリケーションスロットを作成および削除することができます。 | 
| rolbypassrls | bool | すべての行単位セキュリティポリシーを無視するロール。詳しくは5.7を参照してください。 | 
| rolconnlimit | int4 | ログイン可能なロールでは、これはロールが確立できる同時実行接続数を設定します。 -1は制限無しを意味します。 | 
| rolpassword | text | (おそらく暗号化された)パスワード。無い場合はNULLです。 書式は使用される暗号化の形式に依存します。 | 
| rolvaliduntil | timestamptz | パスワード有効期限(パスワード認証でのみ使用)。 NULLの場合には満了時間はありません。 | 
MD5で暗号化されたパスワードでは、rolpassword列は文字列md5で始まり、それに32文字の16進MD5ハッシュ値が続きます。
MD5ハッシュは、ユーザのパスワードとユーザ名を繋げたものに対して生成されます。
例えばjoeのパスワードがxyzzyなら、PostgreSQLはxyzzyjoeのMD5ハッシュを格納します。
  
パスワードがSCRAM-SHA-256で暗号化される場合、次の書式になります。
SCRAM-SHA-256$<iteration count>:<salt>$<StoredKey>:<ServerKey>
ここで、salt、StoredKey、ServerKeyはBase64の符号化書式に従います。
この書式はRFC 5803で指定されているものと同じです。
  
これらのいずれの書式にも従っていないパスワードは、暗号化されていないものとみなされます。