回答:
postgres=> \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
のドキュメントでGRANT
は、出力の解釈方法について説明しています。現在のデータベースのテーブルに対する特定の特権については、を使用します\z myTable
。
おそらく、データベースのユーザーとその特権をリストすることを意味します-私は質問からはまったくわかりません:
postgres=> \du
List of roles
Role name | Attributes | Member of
-----------------+--------------+------------------------------------------------
dba | Create role | {util_user,helpdesk_user,helpdesk_admin}
helpdesk_admin | Cannot login | {helpdesk_user}
helpdesk_user | Cannot login | {helpdesk_reader}
jack | | {helpdesk_admin}
postgres | Superuser | {}
: Create role
: Create DB
次の方法でこれを実行できます。
SELECT grantee, privilege_type
FROM information_schema.role_table_grants
WHERE table_name='mytable'
これにより、次のような出力が得られます。
mail=# select grantee, privilege_type from information_schema.role_table_grants where table_name='aliases';
grantee | privilege_type
--------------+-----------------
mailreader | INSERT
mailreader | SELECT
mailreader | UPDATE
mailreader | DELETE
mailreader | TRUNCATE
mailreader | REFERENCES
mailreader | TRIGGER
(7 rows)
mail=#
psql
メタコマンドの使用:
https://www.postgresql.org/docs/current/static/app-psql.html
Ctrl + Fでページを移動すると、次の結果が得られます。
\ddp [ pattern ]
デフォルトのアクセス権限設定をリストします。
\dp [ pattern ]
テーブル、ビュー、およびシーケンスを、それらに関連付けられたアクセス特権とともにリストします。
\l[+] [ pattern ]
サーバー内のデータベースをリストし、... ...アクセス権限を表示します。
上記にも記載されていますが、マニュアルページに「privileges」という単語がありません。
\du+
ログイン\dg+
があるロールとないロールの場合- "Member of"
ロールに付与されたロールを見つける場所があります。
私はここでは意図的に機能と言語の特権をスキップしますが、psql
マニュアルではほとんど操作されていません(これらの特権を使用する場合は、アドバイスを求めてここに来ることはありません)。ユーザー定義タイプ、ドメインなどについても同じです-メタコマンドの後に「+」を使用すると、必要に応じて特権が表示されます。
権限を確認する少し極端な方法は、トランザクションでユーザーを削除することです。例:
s=# begin; drop user x;
BEGIN
Time: 0.124 ms
ERROR: role "x" cannot be dropped because some objects depend on it
DETAIL: privileges for type "SO dT"
privileges for sequence so
privileges for schema bin
privileges for table xx
privileges for table "csTest"
privileges for table tmp_x
privileges for table s1
privileges for table test
Time: 0.211 ms
s=# rollback;
ROLLBACK
Time: 0.150 ms
リストがNよりも長い場合(少なくとも9.3では)、特権のリストを含む警告は折りたたまれますが、ログで完全なリストを見つけることができます...
Undercovers psqlは、\du
コマンドを発行するときに以下のクエリを使用します。
SELECT r.rolname, r.rolsuper, r.rolinherit,
r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,
r.rolconnlimit, r.rolvaliduntil,
ARRAY(SELECT b.rolname
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
WHERE m.member = r.oid) as memberof
, r.rolreplication
, r.rolbypassrls
FROM pg_catalog.pg_roles r
WHERE r.rolname !~ '^pg_'
ORDER BY 1;
(おそらく明らかな)追加のステップがpostgresユーザーになります。そうしないと、存在しないロールに関するエラーが発生する可能性があります。
sudo su - postgres
psql -l
または
psql
postgres=> \l
-- file: src/sql/pgsql/list-table-priviledges.sql
-- usage:
-- alias psql="PGPASSWORD=${postgres_db_useradmin_pw:-} psql -v -q -t -X -w -U ${postgres_db_useradmin:-}"
-- psql -d dev_qto < src/sql/pgsql/list-table-priviledges.sql | less
SELECT grantee, table_name , privilege_type
FROM information_schema.role_table_grants
WHERE 1=1
AND grantee = 'usrqtoapp'
AND table_name='readme_doc'
;
-- purpose:
-- list the priveledges per user or for user in a database
-- eof file: src/sql/pgsql/list-table-priviledges.sql
出力
usrqtoapp | readme_doc | INSERT
usrqtoapp | readme_doc | SELECT
usrqtoapp | readme_doc | UPDATE
usrqtoapp | readme_doc | DELETE
\z myTable
あなたが言うとき、あなたは成功した誰かへのアクセスを許可していることを確実にすることと、馬鹿のように見える避けるために完全である、「大丈夫、それが今で動作しないことは?んではない???」