我正在进行数据库服务器迁移的过程中,但是我无法弄清楚如何使用
我使用的是Ubuntu 11.04操作系统,PostgreSQL版本为8.2.x。
psql
命令行工具列出PostgreSQL上的数据库权限(或者服务器上的所有权限),尽管我已经在Google和这里搜索过了。我使用的是Ubuntu 11.04操作系统,PostgreSQL版本为8.2.x。
psql
命令行工具列出PostgreSQL上的数据库权限(或者服务器上的所有权限),尽管我已经在Google和这里搜索过了。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
特权文档解释了如何解读输出结果。要查看当前数据库表的具体权限,请使用\z myTable
命令。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=#
\dp
命令可以告诉您特定用户对表的访问权限,但此查询不会选择相关的授权)。 - Jānis Elmerispostgres=> \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
\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;
\l
的查询是什么? - milahupsql
元命令:
https://www.postgresql.org/docs/current/static/app-psql.html
使用Ctrl+F在页面上查找:
\ddp [ 模式 ]
列出默认访问权限设置。
\dp [ 模式 ]
列出表、视图和序列及其关联的访问权限。
\l[+] [ 模式 ]
列出服务器中的数据库并显示...访问权限。
如上所述,但在手册页面中未找到包含单词“权限”的内容:
\du+
用于具有登录的角色,\dg+
用于没有登录的角色-将在“成员”字段中列出授予该角色的角色。
我故意忽略了函数和语言权限,在 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
\du+
和\dg+
似乎返回相同的结果。我有两个带有NOLOGIN
选项的角色,这两个命令都列出了这两个角色。通过使用\?
进行检查,它为这两个命令提供了相同的描述,所以我猜登录角色与用户之间的区别可能不再可用。 - EAmezSELECT grantor, grantee, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'myuser'
将产生以下结果:
grantor | grantee | table_schema | table_name | privilege_type
----------+----------+--------------+------------+----------------
postgres | myuser | myapp | employees | INSERT
postgres | myuser | myapp | employees | SELECT
postgres | myuser | myapp | employees | UPDATE
postgres | myuser | myapp | employees | DELETE
适用于PG 10
An error occurred:
marked(): input parameter is undefined or null Please report this to https://github.com/markedjs/marked.- undefined
An error occurred:
marked(): input parameter is undefined or null Please report this to https://github.com/markedjs/marked.- undefined
SELECT grantee AS user, CONCAT(table_schema, '.', table_name) AS table,
CASE
WHEN COUNT(privilege_type) = 7 THEN 'ALL'
ELSE ARRAY_TO_STRING(ARRAY_AGG(privilege_type), ', ')
END AS grants
FROM information_schema.role_table_grants
GROUP BY table_name, table_schema, grantee;
+------+--------------+----------------+
| user | table | grants |
+------+--------------+----------------+
| foo | schema.table | ALL |
| bar | schema.table | SELECT, INSERT |
+------+--------------+----------------+
sudo su - postgres
psql -l
或者
psql
postgres=> \l
SELECT * FROM pg_roles;
你将会得到
rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid
SELECT * FROM pg_roles WHERE rolname='your role name';
\du
你将看到你创建的所有角色,而不是默认角色
列出数据库所有者
select d.datname, r.rolname
from pg_catalog.pg_database d, pg_catalog.pg_roles r
where d.datdba = r.oid;
文档:pg_database 和 pg_roles
相关:测试特定权限:
select has_database_privilege('dbname', 'CREATE');
\z myTable
非常适合确保您已成功授予某人访问权限,并避免在说“好了,现在可以工作了吗?它不行???”时显得像个白痴。 - ijoseph