¿Cómo puedo consultar todas las SUBVENCIONES otorgadas a un objeto en postgres?
Por ejemplo, tengo la tabla "mytable":
GRANT SELECT, INSERT ON mytable TO user1
GRANT UPDATE ON mytable TO user2
Necesito algo que me dé:
user1: SELECT, INSERT
user2: UPDATE
sql
postgresql
grant
Markus
fuente
fuente
\z
, son para psql. Y psql es la interfaz de línea de comandos para PostgreSQL.Si realmente desea una línea por usuario, puede agrupar por beneficiario (se requiere PG9 + para string_agg)
Esto debería generar algo como:
fuente
GRANT
salidas exactas como pg_dump?La consulta a continuación le dará una lista de todos los usuarios y sus permisos en la tabla en un esquema.
has_table_privilages
Puede encontrar más detalles aquí .fuente
has_table_privilege(usename, contact(schemaname, '.', tablename), ...)
que evite la ambigüedad.Esta consulta enumerará todas las tablas en todas las bases de datos y esquemas (descomente las líneas en la
WHERE
cláusula para filtrar por bases de datos, esquemas o tablas específicas), con los privilegios mostrados en orden para que sea fácil ver si se otorga o no un privilegio específico:Salida de muestra:
fuente
Agregando a la respuesta de @ shruti
Para consultar concesiones para todas las tablas en un esquema para un usuario determinado
fuente
FROM pg_tables AS a CROSS JOIN pg_user AS b
lugar de la forma SQL 92 de hacerlo con una comafrom pg_tables a, pg_user b
Aquí hay un script que genera consultas de concesión para una tabla en particular. Omite los privilegios del propietario.
fuente