Πώς ελέγχουμε τα δικαιώματα, Grants και Default Privileges σε PostgreSQL

- Πώς ελέγχουμε τα δικαιώματα, Grants και Default Privileges σε PostgreSQL - 31 Αύγουστος 2026
- Πώς κάνουμε Backup και Restore στη PostgreSQL με τη χρήση του εργαλείου pgBackrest - 28 Αύγουστος 2026
- Πώς κάνουμε Point in Time Restore βάση δεδομένων PostgreSQL χωρίς την χρήση 3rd party tools - 24 Αύγουστος 2026
Στη διαχείριση μιας βάσης δεδομένων PostgreSQL, ο έλεγχος της πρόσβασης είναι από τα πιο κρίσιμα κομμάτια. Σε αντίθεση με άλλες RDBMS που έχουν ενιαία system views για όλα τα δικαιώματα, η PostgreSQL βασίζεται στα System Catalogs και σε ειδικά functions.
Αν αναρωτιέσαι ποιος έχει πρόσβαση σε ποιον πίνακα ή τι αυτόματα δικαιώματα θα πάρουν οι μελλοντικοί πίνακες, τα παρακάτω δύο έτοιμα SQL queries θα απαντήσουν αυτό το ερώτημα.
Έλεγχος τρεχόντων δικαιωμάτων σε πίνακες, views και sequences
Το παρακάτω query σάς δείχνει ποιοι χρήστες (που μπορούν να κάνουν login) έχουν ενεργά δικαιώματα (SELECT, INSERT, UPDATE, DELETE) σε υφιστάμενα αντικείμενα:
SELECT
r.rolname AS grantee,
n.nspname AS schema_name,
c.relname AS object_name,
CASE c.relkind
WHEN 'r' THEN 'table'
WHEN 'v' THEN 'view'
WHEN 'S' THEN 'sequence'
ELSE c.relkind::text
END AS object_type,
pg_catalog.has_table_privilege(r.rolname, c.oid, 'SELECT') AS has_select,
pg_catalog.has_table_privilege(r.rolname, c.oid, 'INSERT') AS has_insert,
pg_catalog.has_table_privilege(r.rolname, c.oid, 'UPDATE') AS has_update,
pg_catalog.has_table_privilege(r.rolname, c.oid, 'DELETE') AS has_delete
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
CROSS JOIN pg_roles r
WHERE c.relkind IN ('r', 'v', 'S')
AND n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
AND r.rolcanlogin = true
AND (
pg_catalog.has_table_privilege(r.rolname, c.oid, 'SELECT') OR
pg_catalog.has_table_privilege(r.rolname, c.oid, 'INSERT') OR
pg_catalog.has_table_privilege(r.rolname, c.oid, 'UPDATE') OR
pg_catalog.has_table_privilege(r.rolname, c.oid, 'DELETE')
)
ORDER BY schema_name, object_name, grantee;

Έλεγχος Default Privileges (Για τους μελλοντικούς πίνακες)
Ένα συνηθισμένο πρόβλημα στην Postgres είναι ότι αν δώσετε δικαιώματα σε έναν χρήστη σήμερα, οι νέοι πίνακες που θα δημιουργηθούν αύριο από κάποιον άλλο χρήστη π.χ. τον postgres δεν θα κληρονομήσουν αυτόματα αυτά τα δικαιώματα, εκτός αν έχετε ορίσει ALTER DEFAULT PRIVILEGES.
Για να δείτε ποιοι κανόνες Default Privileges είναι ενεργοποιημένοι στη βάση δεδομένων σας, τρέξτε:
SELECT
defaclrole::regrole AS owner_role,
defaclnamespace::regnamespace AS schema_name,
CASE defaclobjtype
WHEN 'r' THEN 'table'
WHEN 'S' THEN 'sequence'
WHEN 'f' THEN 'function'
WHEN 'T' THEN 'type'
ELSE defaclobjtype::text
END AS object_type,
defaclacl AS granted_privileges
FROM pg_default_acl;

Μας δείχνει ποιος owner_role έχει ρυθμίσει αυτόματους κανόνες παραχώρησης δικαιωμάτων για μελλοντικά αντικείμενα ανά schema ή συνολικά στη βάση δεδομένων.

