PostgreSQL είναι ένα DBMS ανοιχτού κώδικα το οποίο με τη σειρά του χρησιμοποιεί SQL. Είναι ένα πολύ ισχυρό εργαλείο που χρησιμοποιείται για τη διαχείριση εφαρμογών και τη φιλοξενία δεδομένων ιστού σε VPS. Σε αυτόν τον οδηγό, θα μάθετε πώς να διαχειρίζεστε τα δικαιώματα στο PostgreSQL. Θα σας βοηθήσει να παρέχετε στους ρόλους της εφαρμογής σας τα απαιτούμενα δικαιώματα. Θα εκτελέσουμε αυτόν τον οδηγό χρησιμοποιώντας το PostgreSQL σε έναν Ubuntu 18.04 διακομιστή cloud στο CloudSigma.
Εγκατάσταση του PostgreSQL
Για να κάνετε λήψη και να εγκαταστήσετε το PostgreSQL, εκτελέστε τις ακόλουθες εντολές:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
Το πρόγραμμα εγκατάστασης θα δημιουργήσει έναν προεπιλεγμένο χρήστη – “Postgres” για να λειτουργεί υπό αυτόν. Θα χρησιμοποιήσουμε αυτόν τον χρήστη για το μεγαλύτερο μέρος αυτού του οδηγού. Μπορείτε να συνδεθείτε στον χρήστη με αυτήν την εντολή:
|
1 |
sudo su - postgres |
Tώρα που το PostgreSQL έχει εγκατασταθεί, θα μάθετε πώς χειρίζεται τα δικαιώματα. Μπορείτε επίσης να ακολουθήσετε τον οδηγό μας για τη ρύθμιση του PostgreSQL σε Ubuntu για έναν λεπτομερή οδηγό βήμα προς βήμα της διαδικασίας εγκατάστασης.
Έννοιες δικαιωμάτων PostgreSQL
Το Postgres διαχειρίζεται τα δικαιώματα μέσω της έννοιας των “ρόλων”. Με τους ρόλους, δεν υπάρχει διάκριση μεταξύ χρηστών και ομάδων. Οι ρόλοι είναι πιο ευέλικτοι από το παραδοσιακό σύστημα χρηστών και ομάδων του Unix. Για παράδειγμα, ένας ρόλος μπορεί να λειτουργήσει ως μέλος ενός άλλου ρόλου, κληρονομώντας τα δικαιώματά του.
Προβολή ρόλων στο PostgreSQL
Για να δείτε τους ρόλους στο PostgreSQL, πρέπει πρώτα να συνδεθείτε στη γραμμή εντολών χρησιμοποιώντας την ακόλουθη εντολή:
|
1 |
psql |
Στη συνέχεια, εκτελέστε τα ακόλουθα για να δείτε τους ρόλους:
|
1 |
\du |

Προς το παρόν, υπάρχει μόνο ένας προεπιλεγμένος ρόλος με όλα τα προνόμια.
Πώς να δημιουργήσετε ρόλους στο PostgreSQL
Μπορείτε να δημιουργήσετε ρόλους για το Postgres είτε από τη γραμμή εντολών είτε μέσα από το κέλυφος του Postgres. Μπορείτε να δοκιμάσετε τις ακόλουθες δύο προσεγγίσεις, μετά τις οποίες θα δείτε πώς να διαχειρίζεστε τα δικαιώματα και τις προσβάσεις στο PostgreSQL.
Πώς να δημιουργήσετε ρόλους μέσα από το PostgreSQL
Ο ευκολότερος τρόπος για να δημιουργήσετε ρόλους είναι μέσα από τη γραμμή εντολών του Postgres. Μπορείτε να το κάνετε με την ακόλουθη εντολή:
|
1 |
CREATE ROLE demo_role; |
Για να ελέγξετε αν έχει δημιουργηθεί, εκτελέστε την εντολή:
|
1 |
\du |

Καθορίζει ότι ο νέος ρόλος δεν έχει δικαιώματα σύνδεσης. Θα μάθετε πώς να το αλλάξετε αυτό αργότερα στον οδηγό.
Πώς να δημιουργήσετε ρόλους από τη γραμμή εντολών
Η εναλλακτική λύση στην παραπάνω μέθοδο είναι η δημιουργία του χρήστη από τη γραμμή εντολών. Για να βγείτε από τη γραμμή εντολών του PostgreSQL, πληκτρολογήστε τα ακόλουθα:
|
1 |
\q |
Μπορείτε να δημιουργήσετε έναν ρόλο με το όνομα “test” με την ακόλουθη εντολή:
|
1 |
createuser test |
Αφού εκτελέσετε την παραπάνω εντολή, συνδεθείτε στο psql και εμφανίστε τη λίστα με τους ρόλους χρησιμοποιώντας τις ακόλουθες εντολές:
|
1 2 |
psql \du |

Μπορείτε να παρατηρήσετε ότι ο χρήστης που δημιουργήθηκε με αυτόν τον τρόπο δεν έχει τα ίδια χαρακτηριστικά.
Πώς να διαγράψετε ρόλους στο PostgreSQL
Μπορείτε εύκολα να διαγράψετε ρόλους στο PostgreSQL χρησιμοποιώντας την ακόλουθη σύνταξη:
|
1 |
DROP ROLE role_name; |
Μπορείτε να διαγράψετε τον δοκιμαστικό ρόλο που δημιουργήσαμε νωρίτερα χρησιμοποιώντας την εντολή:
|
1 |
DROP ROLE demo_role; |

Αν προσπαθήσουμε να διαγράψουμε έναν ρόλο που δεν υπάρχει, θα εμφανιστεί απλώς ένα σφάλμα. Για να το δείτε αυτό, μπορείτε να προσπαθήσετε να διαγράψετε ξανά τον ίδιο ρόλο:
|
1 |
DROP ROLE demo_role; |

Αν θέλετε η εντολή να μην εμφανίζει σφάλμα όταν ο ρόλος δεν υπάρχει, μπορείτε να προσθέσετε το ‘IF EXISTS’ στην εντολή:
|
1 |
DROP ROLE IF EXISTS role_name; |
Μπορείτε να δοκιμάσετε ξανά να διαγράψετε τον ρόλο με αυτήν την εντολή:
|
1 |
DROP ROLE IF EXISTS demo_role; |
Πώς να ορίσετε προνόμια κατά τη δημιουργία ρόλου
Μέχρι τώρα, έχετε δημιουργήσει και διαγράψει ρόλους. Σε αυτήν την ενότητα, θα δημιουργήσετε ρόλους με τροποποιημένα δικαιώματα. Μπορείτε να το κάνετε αυτό καθορίζοντας τα δικαιώματα για τον ρόλο με την εντολή create:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Για να δείτε τις επιλογές για αυτό, μπορείτε να ανοίξετε τη βοήθεια χρησιμοποιώντας αυτήν την εντολή:
|
1 |
\h CREATE ROLE |

Αν θέλετε να δημιουργήσετε έναν ρόλο με δικαιώματα σύνδεσης, μπορείτε να διαμορφώσετε την εντολή ως εξής:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Όπως είδαμε νωρίτερα, αν θέλετε να δημιουργήσετε ρόλους με δικαίωμα σύνδεσης, μπορείτε επίσης να χρησιμοποιήσετε την ακόλουθη εντολή:
|
1 |
CREATE USER role_name; |
Η μόνη διαφορά μεταξύ των δύο εντολών είναι ότι η ‘CREATE USER’ δίνει δικαίωμα σύνδεσης στον ρόλο από προεπιλογή.
Πώς να αλλάξετε τα προνόμια των ρόλων στην PostgreSQL
Μέχρι τώρα, δοκιμάσατε πώς να δίνετε δικαιώματα κατά τη δημιουργία του χρήστη. Σε αυτήν την ενότητα, θα τροποποιήσετε τα δικαιώματα των ήδη δημιουργημένων χρηστών. Η σύνταξη για την εντολή alter είναι:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Για παράδειγμα, αν θέλετε, μπορείτε να αλλάξετε τα δικαιώματα σύνδεσης του demo_role σε ‘log in’ με αυτήν την εντολή:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Για να επιτρέψετε στον χρήστη να συνδεθεί ξανά, μπορείτε να τροποποιήσετε τα δικαιώματα με την ακόλουθη εντολή:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
Πώς να συνδεθείτε ως διαφορετικός χρήστης στην PostgreSQL
Η PostgreSQL σάς επιτρέπει να συνδέεστε μόνο τοπικά από προεπιλογή, εάν το όνομα χρήστη σας ταιριάζει με το όνομα χρήστη του συστήματος. Για να το παρακάμψετε αυτό, μπορείτε είτε να αλλάξετε τον τύπο σύνδεσης είτε να ρυθμίσετε την PostgreSQL να χρησιμοποιεί τη διεπαφή δικτύου loopback. Αυτή η διεπαφή θα άλλαζε τον τύπο σύνδεσης σε απομακρυσμένο, ακόμη και αν η σύνδεση είναι τοπική.
Σε αυτήν την ενότητα, θα δοκιμάσετε τη δεύτερη μέθοδο. Για αρχή, μπορείτε να ορίσετε τον κωδικό πρόσβασης του χρήστη, ώστε να είναι δυνατή η ταυτοποίηση.
Ορίστε τον κωδικό πρόσβασης του ‘demo_user’ με την ακόλουθη εντολή:
|
1 |
\password test |
Όταν σας ζητηθεί, εισαγάγετε και επιβεβαιώστε τον κωδικό πρόσβασης. Μόλις τελειώσετε, μπορείτε να βγείτε από τη διεπαφή της PostgreSQL και να επιστρέψετε στον κανονικό χρήστη του μηχανήματός σας:
|
1 2 |
\q exit |
Η PostgreSQL απαιτεί να συνδεθείτε με ένα όνομα χρήστη που ταιριάζει με το όνομα χρήστη του λειτουργικού σας συστήματος και επίσης να συνδεθείτε στη βάση δεδομένων με το ίδιο όνομα χρήστη. Εφόσον δεν το κάνετε αυτό σε αυτήν την περίπτωση, θα πρέπει να καθορίσετε ρητά τις επιλογές που θέλετε να χρησιμοποιήσετε. Μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
user: Το όνομα χρήστη με το οποίο θέλετε να συνδεθείτε
DB: Μια υπάρχουσα βάση δεδομένων στην οποία έχετε πρόσβαση
-h 127.0.0.1: Καθορίζει στην PostgreSQL ότι θα συνδεθείτε μέσω μιας διεπαφής δικτύου στο τοπικό μηχάνημα. Αυτή η επιλογή μάς επιτρέπει την ταυτοποίηση, παρόλο που το όνομα χρήστη δεν ταιριάζει με το όνομα χρήστη του συστήματος.
-W: Υποδεικνύει στην PostgreSQL ότι θα εισαγάγετε έναν κωδικό πρόσβασης
Για να συνδεθούμε με τον “test_user,” μπορούμε να εκδώσουμε την ακόλουθη εντολή:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

Μόλις εισαγάγετε τον κωδικό πρόσβασης, θα συνδεθείτε στο shell. Στο παράδειγμά μας, χρησιμοποιούμε τη βάση δεδομένων ‘postgres,’ την προεπιλεγμένη βάση δεδομένων που ρυθμίζεται αυτόματα κατά την εγκατάσταση.
Σε αυτήν τη συνεδρία, ανάλογα με τον χρήστη που επιλέξατε για να συνδεθείτε, θα αντιμετωπίσετε ένα πρόβλημα ότι δεν έχετε τα κατάλληλα δικαιώματα για να εκτελέσετε διάφορες ενέργειες. Ο λόγος για το πρόβλημα είναι ότι δεν έχετε δώσει ήδη στον χρήστη επαρκή δικαιώματα για τη διαχείριση πραγμάτων.
Στην επόμενη ενότητα, θα εκχωρήσετε τα απαιτούμενα δικαιώματα στους χρήστες. Αρχικά, θα πρέπει να αλλάξετε ξανά τον χρήστη σε διαχειριστή:
|
1 2 3 |
\q sudo su - postgres psql |
Διαχείριση δικαιωμάτων στην PostgreSQL: Πώς να εκχωρήσετε δικαιώματα στην PostgreSQL
Στην PostgreSQL, εάν μια βάση δεδομένων ή ένας πίνακας δημιουργηθεί από έναν συγκεκριμένο ρόλο, μόνο αυτός ο ρόλος έχει δικαιώματα τροποποίησής του. Εξαίρεση σε αυτό αποτελούν οι ρόλοι που έχουν δικαιώματα υπερχρήστη. Σε αυτήν την ενότητα, θα εκχωρήσετε δικαιώματα σε άλλους ρόλους. Μπορείτε να εκχωρήσετε δικαιώματα σε άλλους ρόλους χρησιμοποιώντας τη δήλωση ‘GRANT’. Η σύνταξη είναι:
|
1 |
GRANT permission_type ON table_name TO role_name; |
Μπορείτε να δημιουργήσετε έναν απλό πίνακα για να εκτελέσετε την εντολή:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Για να δείτε τον πίνακα που δημιουργήθηκε, εκτελέστε την εντολή:
|
1 |
\d |

Τώρα που έχετε έναν πίνακα demo, μπορείτε να εκχωρήσετε δικαιώματα στον πίνακα ‘demo’ στο ‘demo_role.’ Μπορείτε να δώσετε στον ρόλο το δικαίωμα ‘UPDATE’ με αυτήν την εντολή:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Μπορείτε να εκχωρήσετε όλα τα δικαιώματα σε έναν ρόλο ορίζοντας το δικαίωμα ως ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
Αν θέλετε να εκχωρήσετε ένα συγκεκριμένο δικαίωμα σε όλους τους ρόλους στο σύστημα, μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί ‘public’ αντί για τον ρόλο, όπως στην ακόλουθη εντολή:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Μπορείτε να δείτε όλα τα δικαιώματα που έχουν εκχωρηθεί χρησιμοποιώντας την ακόλουθη εντολή:
|
1 |
\z |
Διαχείριση δικαιωμάτων στην PostgreSQL: Πώς να αφαιρέσετε δικαιώματα στην PostgreSQL
Μπορείτε εύκολα να αφαιρέσετε δικαιώματα ενός ρόλου χρησιμοποιώντας την εντολή ‘REVOKE’. Είναι πολύ παρόμοια με την εντολή grant:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
Όπως και με το GRANT, μπορούμε να χρησιμοποιήσουμε τις λέξεις-κλειδιά – ‘ALL’ και ‘PUBLIC’ για να εκχωρήσουμε όλα τα δικαιώματα ή να εκχωρήσουμε δικαιώματα σε όλους τους ρόλους:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
Πώς να χρησιμοποιήσετε ομαδικούς ρόλους στην PostgreSQL
Για την ενεργοποίηση ευρείας κλίμακας ελέγχου δικαιωμάτων, οι ρόλοι είναι αρκετά ευέλικτοι ώστε να επιτρέπουν την ομαδοποίηση με άλλους ρόλους. Για παράδειγμα, μπορείτε να δημιουργήσετε έναν ρόλο – ‘temporary_role’ και στη συνέχεια να προσθέσετε το ‘demo_role’ και το ‘test_user’ σε αυτόν τον ρόλο:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
Τώρα μπορείτε να διαχειριστείτε τα δικαιώματα αυτών των δύο ρόλων απλώς διαχειριζόμενοι τα δικαιώματα του ρόλου ‘temporary_role’. Αυτό επιτρέπει την ευκολότερη διαχείριση των δικαιωμάτων. Μπορείτε να δείτε τις πληροφορίες συμμετοχής του ρόλου με αυτήν την εντολή:
|
1 |
\du |

Οποιοδήποτε μέλος της ομάδας μπορεί να ενεργήσει ως η ομάδα χρησιμοποιώντας την εντολή ‘set role’. Καθώς ο χρήστης ‘postgres’ είναι υπερχρήστης, μπορείτε να χρησιμοποιήσετε το ‘set role’ ακόμη και αν δεν είστε μέλος της ομάδας:
|
1 |
SET ROLE temporary_role; |
Οποιοιδήποτε πίνακες δημιουργήσετε τώρα θα ανήκουν στο temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Για να ελέγξετε την ιδιοκτησία του πίνακα, εκτελέστε την ακόλουθη εντολή:
|
1 |
\d |

Μπορείτε να δείτε ότι ο ρόλος ‘temporary_role’ είναι ιδιοκτήτης του νέου πίνακα και της ακολουθίας που σχετίζεται με τον τύπο δεδομένων serial. Για να επιστρέψετε στα αρχικά δικαιώματα ρόλου, εκτελέστε την ακόλουθη εντολή:
|
1 |
RESET ROLE; |
Αν θέλετε ο ρόλος να έχει όλα τα δικαιώματα του ρόλου στον οποίο ανήκει, μπορείτε να ορίσετε την ιδιότητα ‘inherit’ με την εντολή ‘alter role’:
|
1 |
ALTER ROLE test_user INHERIT; |
Με την παραπάνω εντολή, ο ‘test_user’ έχει λάβει όλα τα δικαιώματα των ρόλων στους οποίους ανήκει. Για να διαγράψετε έναν ρόλο, μπορείτε να χρησιμοποιήσετε την εντολή ‘drop role’:
|
1 |
DROP ROLE temporary_users; |

Η παραπάνω εντολή εμφανίζει σφάλμα επειδή έχουμε ορισμένα αντικείμενα, όπως ο πίνακας ‘hello,’ που εξαρτώνται από αυτόν. Για να τον διαγράψετε, μπορείτε να μεταβιβάσετε την ιδιοκτησία του πίνακα σε έναν διαφορετικό ρόλο:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Μπορείτε να ελέγξετε ότι ο temporary_role δεν έχει στην ιδιοκτησία του κανέναν πίνακα τώρα με την ακόλουθη εντολή:
|
1 |
\d |

Μπορείτε να διαγράψετε τον ‘temporary_role’ τώρα, καθώς δεν έχει πλέον εξαρτήσεις:
|
1 |
DROP ROLE temporary_users; |
Παρόλο που η παραπάνω εντολή θα διαγράψει τον ρόλο temporary_users, τα πρώην μέλη της ομάδας ρόλων δεν αφαιρούνται.
Συμπέρασμα
Έχετε ολοκληρώσει τον οδηγό και τώρα γνωρίζετε πώς να διαχειρίζεστε τα δικαιώματα στην PostgreSQL. Μπορείτε να διαχειριστείτε τα δικαιώματα εύκολα. Η γνώση της διαχείρισης δικαιωμάτων διασφαλίζει ότι οι εφαρμογές σας έχουν πρόσβαση στις απαιτούμενες βάσεις δεδομένων, ενώ δεν έχουν πρόσβαση σε καμία άλλη βάση δεδομένων που χρησιμοποιείται από διαφορετική εφαρμογή.
Καλή συνέχεια!


Σχόλια
Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.