Επιστροφή στο blog

Πώς να χρησιμοποιήσετε ρόλους και να διαχειριστείτε δικαιώματα στην PostgreSQL

Πώς να χρησιμοποιήσετε ρόλους και να διαχειριστείτε δικαιώματα στην PostgreSQL

PostgreSQL είναι ένα DBMS ανοιχτού κώδικα το οποίο με τη σειρά του χρησιμοποιεί SQL. Είναι ένα πολύ ισχυρό εργαλείο που χρησιμοποιείται για τη διαχείριση εφαρμογών και τη φιλοξενία δεδομένων ιστού σε VPS. Σε αυτόν τον οδηγό, θα μάθετε πώς να διαχειρίζεστε τα δικαιώματα στο PostgreSQL. Θα σας βοηθήσει να παρέχετε στους ρόλους της εφαρμογής σας τα απαιτούμενα δικαιώματα. Θα εκτελέσουμε αυτόν τον οδηγό χρησιμοποιώντας το PostgreSQL σε έναν Ubuntu 18.04 διακομιστή cloud στο CloudSigma.

Εγκατάσταση του PostgreSQL

Για να κάνετε λήψη και να εγκαταστήσετε το PostgreSQL, εκτελέστε τις ακόλουθες εντολές:

Το πρόγραμμα εγκατάστασης θα δημιουργήσει έναν προεπιλεγμένο χρήστη – “Postgres” για να λειτουργεί υπό αυτόν. Θα χρησιμοποιήσουμε αυτόν τον χρήστη για το μεγαλύτερο μέρος αυτού του οδηγού. Μπορείτε να συνδεθείτε στον χρήστη με αυτήν την εντολή:

Tώρα που το PostgreSQL έχει εγκατασταθεί, θα μάθετε πώς χειρίζεται τα δικαιώματα. Μπορείτε επίσης να ακολουθήσετε τον οδηγό μας για τη ρύθμιση του PostgreSQL σε Ubuntu για έναν λεπτομερή οδηγό βήμα προς βήμα της διαδικασίας εγκατάστασης.

Έννοιες δικαιωμάτων PostgreSQL

Το Postgres διαχειρίζεται τα δικαιώματα μέσω της έννοιας των “ρόλων”. Με τους ρόλους, δεν υπάρχει διάκριση μεταξύ χρηστών και ομάδων. Οι ρόλοι είναι πιο ευέλικτοι από το παραδοσιακό σύστημα χρηστών και ομάδων του Unix. Για παράδειγμα, ένας ρόλος μπορεί να λειτουργήσει ως μέλος ενός άλλου ρόλου, κληρονομώντας τα δικαιώματά του.

Προβολή ρόλων στο PostgreSQL

Για να δείτε τους ρόλους στο PostgreSQL, πρέπει πρώτα να συνδεθείτε στη γραμμή εντολών χρησιμοποιώντας την ακόλουθη εντολή:

Στη συνέχεια, εκτελέστε τα ακόλουθα για να δείτε τους ρόλους:

show roles manage permissions in PostgreSQL

Προς το παρόν, υπάρχει μόνο ένας προεπιλεγμένος ρόλος με όλα τα προνόμια.

Πώς να δημιουργήσετε ρόλους στο PostgreSQL

Μπορείτε να δημιουργήσετε ρόλους για το Postgres είτε από τη γραμμή εντολών είτε μέσα από το κέλυφος του Postgres. Μπορείτε να δοκιμάσετε τις ακόλουθες δύο προσεγγίσεις, μετά τις οποίες θα δείτε πώς να διαχειρίζεστε τα δικαιώματα και τις προσβάσεις στο PostgreSQL.

Πώς να δημιουργήσετε ρόλους μέσα από το PostgreSQL

Ο ευκολότερος τρόπος για να δημιουργήσετε ρόλους είναι μέσα από τη γραμμή εντολών του Postgres. Μπορείτε να το κάνετε με την ακόλουθη εντολή:

Για να ελέγξετε αν έχει δημιουργηθεί, εκτελέστε την εντολή:

create role from prompt

Καθορίζει ότι ο νέος ρόλος δεν έχει δικαιώματα σύνδεσης. Θα μάθετε πώς να το αλλάξετε αυτό αργότερα στον οδηγό.

Πώς να δημιουργήσετε ρόλους από τη γραμμή εντολών

Η εναλλακτική λύση στην παραπάνω μέθοδο είναι η δημιουργία του χρήστη από τη γραμμή εντολών. Για να βγείτε από τη γραμμή εντολών του PostgreSQL, πληκτρολογήστε τα ακόλουθα:

Μπορείτε να δημιουργήσετε έναν ρόλο με το όνομα “test” με την ακόλουθη εντολή:

Αφού εκτελέσετε την παραπάνω εντολή, συνδεθείτε στο psql και εμφανίστε τη λίστα με τους ρόλους χρησιμοποιώντας τις ακόλουθες εντολές:

creating user from commandline

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

Πώς να διαγράψετε ρόλους στο PostgreSQL

Μπορείτε εύκολα να διαγράψετε ρόλους στο PostgreSQL χρησιμοποιώντας την ακόλουθη σύνταξη:

Μπορείτε να διαγράψετε τον δοκιμαστικό ρόλο που δημιουργήσαμε νωρίτερα χρησιμοποιώντας την εντολή:

drop role

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

drop role fail

Αν θέλετε η εντολή να μην εμφανίζει σφάλμα όταν ο ρόλος δεν υπάρχει, μπορείτε να προσθέσετε το ‘IF EXISTS’ στην εντολή:

Μπορείτε να δοκιμάσετε ξανά να διαγράψετε τον ρόλο με αυτήν την εντολή:

drop role if exists

Πώς να ορίσετε προνόμια κατά τη δημιουργία ρόλου

Μέχρι τώρα, έχετε δημιουργήσει και διαγράψει ρόλους. Σε αυτήν την ενότητα, θα δημιουργήσετε ρόλους με τροποποιημένα δικαιώματα. Μπορείτε να το κάνετε αυτό καθορίζοντας τα δικαιώματα για τον ρόλο με την εντολή create:

Για να δείτε τις επιλογές για αυτό, μπορείτε να ανοίξετε τη βοήθεια χρησιμοποιώντας αυτήν την εντολή:

help create user

Αν θέλετε να δημιουργήσετε έναν ρόλο με δικαιώματα σύνδεσης, μπορείτε να διαμορφώσετε την εντολή ως εξής:

create role with login manage permissions in PostgreSQL

Όπως είδαμε νωρίτερα, αν θέλετε να δημιουργήσετε ρόλους με δικαίωμα σύνδεσης, μπορείτε επίσης να χρησιμοποιήσετε την ακόλουθη εντολή:

Η μόνη διαφορά μεταξύ των δύο εντολών είναι ότι η ‘CREATE USER’ δίνει δικαίωμα σύνδεσης στον ρόλο από προεπιλογή.

Πώς να αλλάξετε τα προνόμια των ρόλων στην PostgreSQL

Μέχρι τώρα, δοκιμάσατε πώς να δίνετε δικαιώματα κατά τη δημιουργία του χρήστη. Σε αυτήν την ενότητα, θα τροποποιήσετε τα δικαιώματα των ήδη δημιουργημένων χρηστών. Η σύνταξη για την εντολή alter είναι:

Για παράδειγμα, αν θέλετε, μπορείτε να αλλάξετε τα δικαιώματα σύνδεσης του demo_role σε ‘log in’ με αυτήν την εντολή:

alter nologin

Για να επιτρέψετε στον χρήστη να συνδεθεί ξανά, μπορείτε να τροποποιήσετε τα δικαιώματα με την ακόλουθη εντολή:

Πώς να συνδεθείτε ως διαφορετικός χρήστης στην PostgreSQL

Η PostgreSQL σάς επιτρέπει να συνδέεστε μόνο τοπικά από προεπιλογή, εάν το όνομα χρήστη σας ταιριάζει με το όνομα χρήστη του συστήματος. Για να το παρακάμψετε αυτό, μπορείτε είτε να αλλάξετε τον τύπο σύνδεσης είτε να ρυθμίσετε την PostgreSQL να χρησιμοποιεί τη διεπαφή δικτύου loopback. Αυτή η διεπαφή θα άλλαζε τον τύπο σύνδεσης σε απομακρυσμένο, ακόμη και αν η σύνδεση είναι τοπική.

Σε αυτήν την ενότητα, θα δοκιμάσετε τη δεύτερη μέθοδο. Για αρχή, μπορείτε να ορίσετε τον κωδικό πρόσβασης του χρήστη, ώστε να είναι δυνατή η ταυτοποίηση.

Ορίστε τον κωδικό πρόσβασης του ‘demo_user’ με την ακόλουθη εντολή:

Όταν σας ζητηθεί, εισαγάγετε και επιβεβαιώστε τον κωδικό πρόσβασης. Μόλις τελειώσετε, μπορείτε να βγείτε από τη διεπαφή της PostgreSQL και να επιστρέψετε στον κανονικό χρήστη του μηχανήματός σας:

Η PostgreSQL απαιτεί να συνδεθείτε με ένα όνομα χρήστη που ταιριάζει με το όνομα χρήστη του λειτουργικού σας συστήματος και επίσης να συνδεθείτε στη βάση δεδομένων με το ίδιο όνομα χρήστη. Εφόσον δεν το κάνετε αυτό σε αυτήν την περίπτωση, θα πρέπει να καθορίσετε ρητά τις επιλογές που θέλετε να χρησιμοποιήσετε. Μπορείτε να χρησιμοποιήσετε την ακόλουθη σύνταξη:

user: Το όνομα χρήστη με το οποίο θέλετε να συνδεθείτε
DB: Μια υπάρχουσα βάση δεδομένων στην οποία έχετε πρόσβαση
-h 127.0.0.1: Καθορίζει στην PostgreSQL ότι θα συνδεθείτε μέσω μιας διεπαφής δικτύου στο τοπικό μηχάνημα. Αυτή η επιλογή μάς επιτρέπει την ταυτοποίηση, παρόλο που το όνομα χρήστη δεν ταιριάζει με το όνομα χρήστη του συστήματος.
-W: Υποδεικνύει στην PostgreSQL ότι θα εισαγάγετε έναν κωδικό πρόσβασης

Για να συνδεθούμε με τον “test_user,” μπορούμε να εκδώσουμε την ακόλουθη εντολή:

postgresql login through network interface manage permissions in PostgreSQL

Μόλις εισαγάγετε τον κωδικό πρόσβασης, θα συνδεθείτε στο shell. Στο παράδειγμά μας, χρησιμοποιούμε τη βάση δεδομένων ‘postgres,’ την προεπιλεγμένη βάση δεδομένων που ρυθμίζεται αυτόματα κατά την εγκατάσταση.

Σε αυτήν τη συνεδρία, ανάλογα με τον χρήστη που επιλέξατε για να συνδεθείτε, θα αντιμετωπίσετε ένα πρόβλημα ότι δεν έχετε τα κατάλληλα δικαιώματα για να εκτελέσετε διάφορες ενέργειες. Ο λόγος για το πρόβλημα είναι ότι δεν έχετε δώσει ήδη στον χρήστη επαρκή δικαιώματα για τη διαχείριση πραγμάτων.

Στην επόμενη ενότητα, θα εκχωρήσετε τα απαιτούμενα δικαιώματα στους χρήστες. Αρχικά, θα πρέπει να αλλάξετε ξανά τον χρήστη σε διαχειριστή:

Διαχείριση δικαιωμάτων στην PostgreSQL: Πώς να εκχωρήσετε δικαιώματα στην PostgreSQL

Στην PostgreSQL, εάν μια βάση δεδομένων ή ένας πίνακας δημιουργηθεί από έναν συγκεκριμένο ρόλο, μόνο αυτός ο ρόλος έχει δικαιώματα τροποποίησής του. Εξαίρεση σε αυτό αποτελούν οι ρόλοι που έχουν δικαιώματα υπερχρήστη. Σε αυτήν την ενότητα, θα εκχωρήσετε δικαιώματα σε άλλους ρόλους. Μπορείτε να εκχωρήσετε δικαιώματα σε άλλους ρόλους χρησιμοποιώντας τη δήλωση ‘GRANT’. Η σύνταξη είναι:

Μπορείτε να δημιουργήσετε έναν απλό πίνακα για να εκτελέσετε την εντολή:

Για να δείτε τον πίνακα που δημιουργήθηκε, εκτελέστε την εντολή:

create table manage permissions in PostgreSQL

Τώρα που έχετε έναν πίνακα demo, μπορείτε να εκχωρήσετε δικαιώματα στον πίνακα ‘demo’ στο ‘demo_role.’ Μπορείτε να δώσετε στον ρόλο το δικαίωμα ‘UPDATE’ με αυτήν την εντολή:

Μπορείτε να εκχωρήσετε όλα τα δικαιώματα σε έναν ρόλο ορίζοντας το δικαίωμα ως ‘ALL’:

Αν θέλετε να εκχωρήσετε ένα συγκεκριμένο δικαίωμα σε όλους τους ρόλους στο σύστημα, μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί ‘public’ αντί για τον ρόλο, όπως στην ακόλουθη εντολή:

Μπορείτε να δείτε όλα τα δικαιώματα που έχουν εκχωρηθεί χρησιμοποιώντας την ακόλουθη εντολή:

granted permissions

Διαχείριση δικαιωμάτων στην PostgreSQL: Πώς να αφαιρέσετε δικαιώματα στην PostgreSQL

Μπορείτε εύκολα να αφαιρέσετε δικαιώματα ενός ρόλου χρησιμοποιώντας την εντολή ‘REVOKE’. Είναι πολύ παρόμοια με την εντολή grant:

Όπως και με το GRANT, μπορούμε να χρησιμοποιήσουμε τις λέξεις-κλειδιά – ‘ALL’ και ‘PUBLIC’ για να εκχωρήσουμε όλα τα δικαιώματα ή να εκχωρήσουμε δικαιώματα σε όλους τους ρόλους:

Πώς να χρησιμοποιήσετε ομαδικούς ρόλους στην PostgreSQL

Για την ενεργοποίηση ευρείας κλίμακας ελέγχου δικαιωμάτων, οι ρόλοι είναι αρκετά ευέλικτοι ώστε να επιτρέπουν την ομαδοποίηση με άλλους ρόλους. Για παράδειγμα, μπορείτε να δημιουργήσετε έναν ρόλο – ‘temporary_role’ και στη συνέχεια να προσθέσετε το ‘demo_role’ και το ‘test_user’ σε αυτόν τον ρόλο:

Τώρα μπορείτε να διαχειριστείτε τα δικαιώματα αυτών των δύο ρόλων απλώς διαχειριζόμενοι τα δικαιώματα του ρόλου ‘temporary_role’. Αυτό επιτρέπει την ευκολότερη διαχείριση των δικαιωμάτων. Μπορείτε να δείτε τις πληροφορίες συμμετοχής του ρόλου με αυτήν την εντολή:

role - group manage permissions in PostgreSQL

Οποιοδήποτε μέλος της ομάδας μπορεί να ενεργήσει ως η ομάδα χρησιμοποιώντας την εντολή ‘set role’. Καθώς ο χρήστης ‘postgres’ είναι υπερχρήστης, μπορείτε να χρησιμοποιήσετε το ‘set role’ ακόμη και αν δεν είστε μέλος της ομάδας:

Οποιοιδήποτε πίνακες δημιουργήσετε τώρα θα ανήκουν στο temporary_role:

Για να ελέγξετε την ιδιοκτησία του πίνακα, εκτελέστε την ακόλουθη εντολή:

create table with temporary_role

Μπορείτε να δείτε ότι ο ρόλος ‘temporary_role’ είναι ιδιοκτήτης του νέου πίνακα και της ακολουθίας που σχετίζεται με τον τύπο δεδομένων serial. Για να επιστρέψετε στα αρχικά δικαιώματα ρόλου, εκτελέστε την ακόλουθη εντολή:

Αν θέλετε ο ρόλος να έχει όλα τα δικαιώματα του ρόλου στον οποίο ανήκει, μπορείτε να ορίσετε την ιδιότητα ‘inherit’ με την εντολή ‘alter role’:

Με την παραπάνω εντολή, ο ‘test_user’ έχει λάβει όλα τα δικαιώματα των ρόλων στους οποίους ανήκει. Για να διαγράψετε έναν ρόλο, μπορείτε να χρησιμοποιήσετε την εντολή ‘drop role’:

drop role manage permissions in PostgreSQL

Η παραπάνω εντολή εμφανίζει σφάλμα επειδή έχουμε ορισμένα αντικείμενα, όπως ο πίνακας ‘hello,’ που εξαρτώνται από αυτόν. Για να τον διαγράψετε, μπορείτε να μεταβιβάσετε την ιδιοκτησία του πίνακα σε έναν διαφορετικό ρόλο:

Μπορείτε να ελέγξετε ότι ο temporary_role δεν έχει στην ιδιοκτησία του κανέναν πίνακα τώρα με την ακόλουθη εντολή:

check ownerships

Μπορείτε να διαγράψετε τον ‘temporary_role’ τώρα, καθώς δεν έχει πλέον εξαρτήσεις:

Παρόλο που η παραπάνω εντολή θα διαγράψει τον ρόλο temporary_users, τα πρώην μέλη της ομάδας ρόλων δεν αφαιρούνται.

Συμπέρασμα

Έχετε ολοκληρώσει τον οδηγό και τώρα γνωρίζετε πώς να διαχειρίζεστε τα δικαιώματα στην PostgreSQL. Μπορείτε να διαχειριστείτε τα δικαιώματα εύκολα. Η γνώση της διαχείρισης δικαιωμάτων διασφαλίζει ότι οι εφαρμογές σας έχουν πρόσβαση στις απαιτούμενες βάσεις δεδομένων, ενώ δεν έχουν πρόσβαση σε καμία άλλη βάση δεδομένων που χρησιμοποιείται από διαφορετική εφαρμογή.

Καλή συνέχεια!

author

Akshay Nagpal

Συγγραφέας · CloudSigma

Ο Preslav Dobrev είναι Δημιουργικός Σχεδιαστής στην CloudSigma, με εστίαση στη συνεπή επιχειρηματική ταυτότητα μέσω παραδοσιακών και καινοτόμων καναλιών μάρκετινγκ. Διαθέτει την ικανότητα να συνδυάζει το καλλιτεχνικό όραμα με το στρατηγικό μάρκετινγκ για τη δημιουργία εντυπωσιακών αφηγήσεων επωνυμίας.

Σχόλια

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