Answers:
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
这些特权和语言特权在手册中几乎没有被操纵过(如果您确实使用了那些特权,您将不会在这里寻求建议)。与用户定义的类型,域等相同-在meta命令后使用“ +”将向您显示特权(如果适用)。
检查特权的一种极端方法是让用户参与事务处理,例如:
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中)时,带有特权列表的警告被折叠,但是您仍然可以在日志中找到它的完整信息...
当您发出\du
命令时,Undercovers psql将使用以下查询。
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
是完美的确保你已经成功地获准进入的人,避免看起来像一个白痴当你说“还好它现在的工作吗?不??? ”