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

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

Στη διαχείριση μιας βάσης δεδομένων 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;
Πώς ελέγχουμε τα δικαιώματα, Grants και Default Privileges σε PostgreSQL

Έλεγχος 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;
Πώς ελέγχουμε τα δικαιώματα, Grants και Default Privileges σε PostgreSQL

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

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση