Skip to content

ACLs

Privileges on database objects, grouped by the kind of object they are on. Written under grants: or revocations: on the role, user, or group they apply to, so a role file is the whole story of what that role can do. ALL stands for every privilege the object type has. Append WITH GRANT OPTION to a privilege to let the grantee grant it onward. A key names its object as schema.name (schema.table.column for a column), with each name as it is, not quoted: My Schema.My Table. The first period ends the schema name, so a schema name in such a key cannot contain a period. In a column key, the last period starts the column name, so a column name cannot contain a period.

Properties

Property Type Required Description
columns map — Privileges on individual columns, keyed by schema.table.column. The table name can contain a period; the schema name and the column name cannot. Each value is an array of (SELECT | INSERT | UPDATE | REFERENCES | ALL).
databases map — Privileges on databases, keyed by database name. Each value is an array of (CREATE | CONNECT | TEMP | TEMPORARY | ALL).
domains map — Privileges on domains, keyed by schema.domain. Each value is an array of (USAGE | ALL).
foreign_data_wrappers map — Privileges on foreign data wrappers, keyed by wrapper name. Each value is an array of (USAGE | ALL).
foreign_servers map — Privileges on foreign servers, keyed by server name. Each value is an array of (USAGE | ALL).
functions map — Privileges on functions and procedures, keyed by schema.function(argument types): the signature, since the name alone is ambiguous across overloads. Each value is an array of (EXECUTE | ALL).
groups array of (string | object) — Memberships in other roles. Each entry is the role name on its own when the membership behaves the way GRANT <role> TO <member> grants it, or a mapping when it does not. admin: true writes WITH ADMIN OPTION. inherit and set write the per-membership WITH INHERIT / WITH SET options, which need PostgreSQL 16 or later; omit inherit to defer to the member role's own inherit option, which is what PostgreSQL does. The grantor (GRANTED BY) is not carried: it records who granted the membership in one cluster, not what the schema is. Entries must be unique.
languages map — Privileges on procedural languages, keyed by language name. Each value is an array of (USAGE | ALL).
large_objects map — Privileges on large objects, keyed by OID. Each value is an array of (SELECT | UPDATE | ALL).
roles array of (string | object) — Memberships in other roles. Each entry is the role name on its own when the membership behaves the way GRANT <role> TO <member> grants it, or a mapping when it does not. admin: true writes WITH ADMIN OPTION. inherit and set write the per-membership WITH INHERIT / WITH SET options, which need PostgreSQL 16 or later; omit inherit to defer to the member role's own inherit option, which is what PostgreSQL does. The grantor (GRANTED BY) is not carried: it records who granted the membership in one cluster, not what the schema is. Entries must be unique.
schemata map — Privileges on schemas, keyed by schema name. Each value is an array of (CREATE | USAGE | ALL).
sequences map — Privileges on sequences, keyed by schema.sequence. Each value is an array of (SELECT | UPDATE | USAGE | ALL).
tables map — Privileges on tables, keyed by schema.table. Privileges on a view may be written here or under views: PostgreSQL grants on a view with TABLE syntax, so both emit GRANT ... ON TABLE. Each value is an array of (SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN | ALL).
tablespaces map — Privileges on tablespaces, keyed by tablespace name. Each value is an array of (CREATE | USAGE | ALL).
types map — Privileges on types, keyed by schema.type. Each value is an array of (USAGE | ALL).
views map — Privileges on views, keyed by schema.view. Emitted as GRANT ... ON TABLE, as PostgreSQL requires. Each value is an array of (SELECT | ALL).

No other properties are accepted.


Source: schemata/acls.yml · Resolved JSON Schema: acls.json