HAS_TABLE_PRIVILEGE
ユーザーが、指定されたテーブルに対して指定された権限を持っている場合、true
を返し、それ以外の場合は false
を返します。
構文
注記
これはリーダーノード関数です。この関数は、ユーザー作成テーブル、STL または STV システムテーブル、SVV または SVL システムビューを参照する場合、エラーを返します。権限の詳細については、「GRANT」を参照してください。
has_table_privilege( [ user, ] table, privilege)
引数
- user
-
テーブルに対する権限を検査するユーザーの名前。デフォルトでは、現在のユーザーが検査されます。
- table
-
権限に関連付けられているテーブル。
- privilege
-
検査する権限。有効な値は以下のとおりです。
-
SELECT
-
INSERT
-
UPDATE
-
DELETE
-
DROP
-
REFERENCES
-
戻り型
BOOLEAN
例
次のクエリでは、GUEST ユーザーが LISTING テーブルに対して SELECT 権限を持っていないことを検出します。
select has_table_privilege('guest', 'listing', 'select');
has_table_privilege --------------------- false
次のクエリは、pg_tables と pg_user カタログテーブルからの出力を使用して、選択、挿入、更新、削除などのテーブル権限を一覧表示します。これはサンプルのみです。データベースからスキーマ名とテーブル名を指定する必要がある場合があります。詳細については、「カタログテーブルへのクエリの実行」を参照してください。
SELECT tablename ,usename ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del FROM (SELECT * from pg_tables WHERE schemaname = 'public' and tablename in ('event','listing')) as tables ,(SELECT * FROM pg_user) AS users;
tablename | usename | sel | ins | upd | del ----------+-----------+--------+-------+-------+------- event | john | true | true | true | true event | sally | false | false | false | false event | elsa | false | false | false | false listing | john | true | true | true | true listing | sally | false | false | false | false listing | elsa | false | false | false | false
前のクエリにはクロス結合も含まれています。詳細については、「JOIN 句の例」を参照してください。public
スキーマにないテーブルをクエリするには、WHERE 句から schemaname
条件を削除し、クエリの前に次の例を使用します。
SET SEARCH_PATH to '
schema_name
';