Εκχώρηση και αφαίρεση δικαιωμάτων. Ρύθμιση δικαιωμάτων εντολή χορήγησης Χρήση προβολών για φιλτράρισμα προνομίων

ΧΟΡΗΓΗΣΤΕ priv_type [(column_list)] [, priv_type [(column_list)] ...] ON (tbl_name | * | *.* | db_name.*) TO user_name "password"] [, user_name ...] ] ] ] ΑΝΑΚΤΗΣΗ priv_type [(column_list)] [, priv_type [(column_list)] ...] ON (tbl_name | * | *.* | db_name.*) FROM user_name [, user_name ...]

Το GRANT περιλαμβάνεται στην MySQL έκδοση 3.22.11 και νεότερη. Σε προηγούμενες εκδόσεις της MySQL, η δήλωση GRANT δεν κάνει τίποτα.

Οι εντολές GRANT και REVOKE επιτρέπουν στους διαχειριστές του συστήματος να δημιουργούν χρήστες MySQL και να εκχωρούν ή να ανακαλούν δικαιώματα σε χρήστες σε τέσσερα επίπεδα προνομίων:

Παγκόσμιο επίπεδοΤα καθολικά προνόμια ισχύουν για όλες τις βάσεις δεδομένων στον καθορισμένο διακομιστή. Αυτά τα δικαιώματα αποθηκεύονται στον πίνακα mysql.user. Επίπεδο βάσης δεδομένωνΤα δικαιώματα βάσης δεδομένων ισχύουν για όλους τους πίνακες στην καθορισμένη βάση δεδομένων. Αυτά τα δικαιώματα αποθηκεύονται στους πίνακες mysql.db και mysql.host. Επίπεδο τραπεζιούΤα δικαιώματα πίνακα ισχύουν για όλες τις στήλες του καθορισμένου πίνακα. Αυτά τα δικαιώματα αποθηκεύονται στον πίνακα mysql.tables_priv. Επίπεδο στήληςΤα δικαιώματα στηλών ισχύουν για μεμονωμένες στήλες στον καθορισμένο πίνακα. Αυτά τα δικαιώματα αποθηκεύονται στον πίνακα mysql.columns_priv.

Εάν παραχωρηθούν δικαιώματα σε έναν χρήστη που δεν υπάρχει, τότε αυτός ο χρήστης δημιουργείται. Για παραδείγματα της εντολής GRANT, δείτε την ενότητα 4.3.5 Προσθήκη νέων χρηστών στη MySQL.

Ο πίνακας δείχνει μια λίστα με πιθανές τιμές για την παράμετρο priv_type για τις δηλώσεις GRANT και REVOKE:

ΟΛΑΟρίζει όλα τα απλά προνόμια εκτός από το WITH GRANT OPTION
ΑΛΛΑΖΩΕπιτρέπει τη χρήση του ALTER TABLE
ΔΗΜΙΟΥΡΓΩΕπιτρέπει τη χρήση του CREATE TABLE
ΔΗΜΙΟΥΡΓΗΣΤΕ ΠΡΟΣΩΡΙΝΟΥΣ ΤΡΑΠΕΖΟΥΣΕπιτρέπει τη χρήση του ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΣΩΡΙΝΟΥ ΠΙΝΑΚΑ
ΔΙΑΓΡΑΦΩΕπιτρέπει τη χρήση του DELETE
ΠΤΩΣΗΕπιτρέπει τη χρήση του DROP TABLE.
ΕΚΤΕΛΕΣΗΕπιτρέπει στο χρήστη να εκτελεί αποθηκευμένες διαδικασίες (για MySQL 5.0)
ΑΡΧΕΙΟΕπιτρέπει τη χρήση του SELECT ... INTO OUTFILE και LOAD DATA INFILE .
ΔΕΙΚΤΗΣΕπιτρέπει τη χρήση του CREATE INDEX και ΠΤΩΣΗΔΕΙΚΤΗΣ
ΕΙΣΑΓΕΤΕΕπιτρέπει τη χρήση του INSERT
ΚΛΕΙΔΑΡΙΑ ΤΡΑΠΕΖΙΑΕπιτρέπει τη χρήση των ΠΙΝΑΚΩΝ LOCK σε πίνακες που έχουν το δικαίωμα SELECT.
ΕΠΕΞΕΡΓΑΖΟΜΑΙ, ΔΙΑΔΙΚΑΣΙΑΕπιτρέπει τη χρήση του SHOW FULL PROCESSLIST
ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣΕπιφυλάσσεται για μελλοντική χρήση
ΓΕΜΙΖΩ ΠΑΛΙΕπιτρέπει τη χρήση του FLUSH
ΠΕΛΑΤΗΣ ΑΝΑΠΑΡΑΓΩΓΗΣΠαραχωρεί στον χρήστη το δικαίωμα να ρωτήσει για την τοποθεσία του κύριου και του υποτελούς διακομιστή.
ΑΝΑΠΑΡΑΓΩΓΗ ΣΛΑΒΑπαραίτητο για slave servers κατά την αναπαραγωγή (για ανάγνωση πληροφοριών από τα δυαδικά αρχεία καταγραφής του head server).
ΕΠΙΛΕΓΩΕπιτρέπει τη χρήση του SELECT
ΕΜΦΑΝΙΣΤΕ ΒΑΣΕΙΣ ΔΕΔΟΜΕΝΩΝΕΜΦΑΝΙΣΗ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ Εμφανίζει όλες τις βάσεις δεδομένων.
ΤΕΡΜΑΤΙΣΜΟΣ ΛΕΙΤΟΥΡΓΙΑΣΕπιτρέπει τη χρήση του τερματισμού λειτουργίας mysqladmin
ΣΟΥΠΕΡΣας επιτρέπει να δημιουργήσετε μία σύνδεση (μία φορά), ακόμα και αν επιτευχθεί μέγιστο_συνδέσεις, και να εκτελέσετε τις εντολές CHANGE MASTER , KILL thread , mysqladmin debug , PURGE MASTER LOGS και SET GLOBAL
ΕΚΣΥΓΧΡΟΝΙΖΩΕπιτρέπει τη χρήση του UPDATE
ΧΡΗΣΗΣυνώνυμο του όρου «χωρίς προνόμια».

Η τιμή USAGE μπορεί να καθοριστεί εάν πρέπει να δημιουργήσετε έναν χρήστη χωρίς δικαιώματα.

Τα δικαιώματα ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΣΩΡΙΝΩΝ ΠΙΝΑΚΩΝ, ΕΚΤΕΛΕΣΗ, ΚΛΕΙΔΩΜΑ ΠΙΝΑΚΩΝ, ΑΝΑΠΑΡΑΓΩΓΗ ..., ΕΜΦΑΝΙΣΗ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ και SUPER είναι νέα στην έκδοση 4.0.2. Για να επωφεληθείτε από αυτά τα νέα δικαιώματα μετά την αναβάθμιση στην έκδοση 4.0.2, πρέπει να εκτελέσετε το σενάριο mysql_fix_privilege_tables.

Σε παλαιότερες εκδόσεις της MySQL, το προνόμιο PROCESS εκχωρεί τα ίδια δικαιώματα με το νέο προνόμιο SUPER.

Για να ανακαλέσετε τα δικαιώματα ενός χρήστη που παραχωρούνται από την εντολή GRANT, χρησιμοποιήστε την τιμή priv_type στην ΕΠΙΛΟΓΗ GRANT:

Mysql> ΑΝΑΚΛΗΣΗ ΕΠΙΛΟΓΗΣ ΧΟΡΗΓΗΣΗΣ ΣΤΟ ... ΑΠΟ ...;

Οι μόνες τιμές priv_type που μπορούν να καθοριστούν για έναν πίνακα είναι: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, IDEX και ALTER.

Οι μόνες τιμές priv_type που μπορούν να καθοριστούν για μια στήλη (όταν χρησιμοποιείται ο τελεστής στήλης_λίστας) είναι SELECT , INSERT και UPDATE .

Τα καθολικά δικαιώματα μπορούν να οριστούν χρησιμοποιώντας τη σύνταξη ON *.* και τα δικαιώματα βάσης δεδομένων μπορούν να οριστούν χρησιμοποιώντας τη σύνταξη ON db_name.*. Εάν καθορίσετε ON * ενώ η τρέχουσα βάση δεδομένων είναι ανοιχτή, θα οριστούν δικαιώματα για αυτήν τη βάση δεδομένων. ( Προειδοποίηση: εάν καθορίσετε ON * πότε απουσίαη τρέχουσα βάση δεδομένων είναι ανοιχτή, αυτό θα επηρεάσει τα παγκόσμια προνόμια!)

Προκειμένου να είναι δυνατός ο ορισμός δικαιωμάτων για χρήστες σε συγκεκριμένους υπολογιστές, η MySQL παρέχει τη δυνατότητα να καθορίσετε το όνομα χρήστη (όνομα_χρήστη) στη φόρμα. Εάν πρέπει να καθορίσετε μια συμβολοσειρά χρήστη που περιέχει ειδικούς χαρακτήρες (όπως `-") ή μια συμβολοσειρά κεντρικού υπολογιστή που περιέχει ειδικούς χαρακτήρες ή χαρακτήρες μπαλαντέρ (όπως `%"), μπορείτε να επισυνάψετε το όνομα απομακρυσμένος υπολογιστήςή χρήστη σε εισαγωγικά (για παράδειγμα, "test-user"@"test-hostname").

Μπορείτε επίσης να συμπεριλάβετε χαρακτήρες μπαλαντέρ στο όνομα του απομακρυσμένου υπολογιστή. Για παράδειγμα, το "%.loc.gov" αναφέρεται στο χρήστη όλων των απομακρυσμένων υπολογιστών στον τομέα loc.gov και το "144.155.166.%" αναφέρεται στο χρήστη όλων των απομακρυσμένων υπολογιστών στο υποδίκτυο κατηγορίας C 144.155.166.

Ο χρήστης της απλής φόρμας είναι συνώνυμο του "%" .

Η MySQL δεν υποστηρίζει χαρακτήρες μπαλαντέρ στα ονόματα χρήστη. Οι ανώνυμοι χρήστες ορίζονται εισάγοντας εγγραφές User="" στον πίνακα mysql.user ή δημιουργώντας έναν χρήστη με κενό όνομα χρησιμοποιώντας την εντολή GRANT.

Σημείωση: Εάν επιτρέπεται σε ανώνυμους χρήστες να συνδεθούν στον διακομιστή MySQL, πρέπει επίσης να εκχωρήσετε δικαιώματα σε όλους τους τοπικούς χρήστες ως , γιατί διαφορετικά, όταν ένας χρήστης προσπαθεί να συνδεθεί στη MySQL από τον τοπικό υπολογιστή, ο πίνακας mysql.user θα χρησιμοποιήσει τον ανώνυμο χρήστη Σύνδεση!

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

Mysql> SELECT Host,User FROM mysql.user WHERE User="";

Επί του παρόντος, η εντολή GRANT υποστηρίζει ονόματα απομακρυσμένων υπολογιστών, πίνακες, βάσεις δεδομένων και στήλες έως και 60 χαρακτήρων. Το όνομα χρήστη δεν πρέπει να περιέχει περισσότερους από 16 χαρακτήρες.

Τα δικαιώματα για έναν πίνακα ή στήλη σχηματίζονται χρησιμοποιώντας τον λογικό τελεστή OR από τα δικαιώματα σε καθένα από τα τέσσερα επίπεδα. Για παράδειγμα, εάν ο πίνακας mysql.user υποδεικνύει ότι ο χρήστης έχει το καθολικό δικαίωμα SELECT, αυτό το δικαίωμα δεν ανακαλείται σε επίπεδο βάσης δεδομένων, πίνακα ή στήλης.

Τα δικαιώματα για μια στήλη μπορούν να υπολογιστούν ως εξής:

Καθολικά δικαιώματα Ή (προνόμια βάσης δεδομένων ΚΑΙ δικαιώματα απομακρυσμένου υπολογιστή) Ή δικαιώματα πίνακα Ή δικαιώματα στήλης

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

Εάν παραχωρούνται δικαιώματα σε συνδυασμό χρήστη/απομακρυσμένου που δεν βρίσκεται στον πίνακα mysql.user, προστίθεται μια καταχώρηση στον πίνακα mysql.user και παραμένει στον πίνακα μέχρι να διαγραφεί χρησιμοποιώντας την εντολή DELETE. Με άλλα λόγια, η εντολή GRANT μπορεί να δημιουργήσει εγγραφές χρήστη στον πίνακα, αλλά η εντολή REVOKE δεν μπορεί να τις διαγράψει. Αυτό πρέπει να γίνει χρησιμοποιώντας την εντολή DELETE.

Εάν έχετε δικαιώματα βάσης δεδομένων, δημιουργείται μια καταχώρηση στον πίνακα mysql.db, εάν είναι απαραίτητο. Αυτή η καταχώρηση διαγράφεται αφού αφαιρεθούν όλα τα δικαιώματα για αυτήν τη βάση δεδομένων με την εντολή REVOKE.

Εάν ένας χρήστης δεν έχει δικαιώματα σε έναν πίνακα, τότε ο πίνακας δεν εμφανίζεται όταν ο χρήστης ζητά μια λίστα πινάκων (για παράδειγμα, χρησιμοποιώντας τη δήλωση SHOW TABLES).

Η δήλωση WITH GRANT OPTION δίνει σε έναν χρήστη τη δυνατότητα να εκχωρεί σε άλλους χρήστες τυχόν προνόμια που έχει ο ίδιος σε ένα καθορισμένο επίπεδο προνομίων. Πρέπει να δίνεται προσοχή κατά την παραχώρηση του προνομίου GRANT, καθώς δύο χρήστες με διαφορετικά προνόμια ενδέχεται να συνδυάσουν τα προνόμιά τους!

Οι επιλογές MAX_QUERIES_PER_HOUR # , MAX_UPDATES_PER_HOUR # και MAX_CONNECTIONS_PER_HOUR # είναι νέες στην έκδοση 4.0.2 της MySQL. Αυτές οι ρυθμίσεις περιορίζουν τον αριθμό των αιτημάτων, ενημερώσεων και συνδέσεων που μπορεί να κάνει ένας χρήστης σε μία ώρα. Εάν οριστεί στο 0 (η προεπιλογή), αυτό σημαίνει ότι δεν υπάρχουν περιορισμοί για αυτόν τον χρήστη. Δείτε την ενότητα.

Δεν μπορείτε να δώσετε σε άλλο χρήστη ένα προνόμιο που δεν έχετε. Το προνόμιο GRANT σας επιτρέπει να παραχωρείτε μόνο εκείνα τα προνόμια που έχετε.

Σημειώστε ότι εάν σε έναν χρήστη εκχωρηθεί το δικαίωμα GRANT σε ένα συγκεκριμένο επίπεδο προνομίων, τότε όλα τα δικαιώματα που έχει ήδη ο συγκεκριμένος χρήστης (ή θα εκχωρηθούν στο μέλλον!) σε αυτό το επίπεδο μπορούν επίσης να εκχωρηθούν σε αυτόν τον χρήστη. Ας υποθέσουμε ότι έχει παραχωρηθεί σε έναν χρήστη το δικαίωμα INSERT σε μια βάση δεδομένων. Εάν στη συνέχεια εκχωρήσετε το δικαίωμα SELECT στη βάση δεδομένων και καθορίσετε WITH GRANT OPTION, ο χρήστης μπορεί να εκχωρήσει όχι μόνο το δικαίωμα SELECT, αλλά και το δικαίωμα INSERT. Εάν στη συνέχεια παραχωρήσετε στον χρήστη το δικαίωμα UPDATE στη βάση δεδομένων, ο χρήστης μπορεί στη συνέχεια να εκδώσει INSERT, SELECT και UPDATE.

Τα προνόμια ALTER δεν πρέπει να εκχωρούνται σε τακτικούς χρήστες. Αυτό δίνει στον χρήστη τη δυνατότητα να σπάσει το σύστημα προνομίων μετονομάζοντας πίνακες!

Λάβετε υπόψη ότι εάν χρησιμοποιούνται δικαιώματα πίνακα ή στήλης ακόμη και για έναν χρήστη, ο διακομιστής ελέγχει τα δικαιώματα πίνακα και στηλών για όλους τους χρήστες και αυτό επιβραδύνει κάπως την MySQL.

Όταν ξεκινά το mysqld, όλα τα δικαιώματα διαβάζονται στη μνήμη. Τα δικαιώματα βάσης δεδομένων, πίνακα και στηλών τίθενται σε ισχύ αμέσως, ενώ τα δικαιώματα σε επίπεδο χρήστη ισχύουν την επόμενη φορά που θα συνδεθεί ο χρήστης. Οι αλλαγές στους πίνακες εκχώρησης δικαιωμάτων που γίνονται χρησιμοποιώντας τις εντολές GRANT και REVOKE επεξεργάζονται αμέσως από τον διακομιστή. Εάν τροποποιήσετε τους πίνακες εκχώρησης προνομίων με μη αυτόματο τρόπο (χρησιμοποιώντας INSERT , UPDATE , κ.λπ.), πρέπει να εκτελέσετε τη δήλωση FLUSH PRIVILEGES ή mysqladmin flush-privilege για να ζητήσετε από τον διακομιστή να φορτώσει ξανά τους πίνακες εκχώρησης δικαιωμάτων. Δείτε την ενότητα 4.3.3 Πότε ισχύουν οι αλλαγές προνομίων.

Οι πιο σημαντικές διαφορές μεταξύ των εκδόσεων ANSI SQL και MySQL της εντολής GRANT είναι οι εξής:

  • Στη MySQL, τα δικαιώματα εκχωρούνται στον συνδυασμό ονόματος χρήστη + απομακρυσμένου υπολογιστή και όχι μόνο στο όνομα χρήστη.
  • Το ANSI SQL δεν έχει παγκόσμια δικαιώματα ή δικαιώματα σε επίπεδο βάσης δεδομένων και το ANSI SQL δεν υποστηρίζει όλους τους τύπους προνομίων MySQL. Η MySQL, από την άλλη πλευρά, δεν υποστηρίζει τα προνόμια ANSI SQL TRIGGER, EXECUTE ή UNDER.
  • Η δομή προνομίων ANSI SQL είναι ιεραρχική. Εάν διαγράψετε έναν χρήστη, ανακαλούνται όλα τα δικαιώματα που έχουν εκχωρηθεί σε αυτόν. Στη MySQL, τα εκχωρημένα προνόμια δεν ανακαλούνται αυτόματα· πρέπει να τα αφαιρέσετε μόνοι σας εάν είναι απαραίτητο.
  • Στη MySQL, ένας χρήστης μπορεί να INSERT έναν πίνακα εάν έχει το δικαίωμα INSERT μόνο σε μερικές στήλες σε αυτόν τον πίνακα. Οι στήλες που δεν έχουν το δικαίωμα INSERT θα οριστούν στις προεπιλεγμένες τιμές τους. Το ANSI SQL απαιτεί το δικαίωμα INSERT σε όλες τις στήλες.
  • Όταν ρίχνετε έναν πίνακα στο ANSI SQL, όλα τα δικαιώματα για αυτόν τον πίνακα θα ανακαλούνται. Εάν ανακαλέσετε ένα προνόμιο στο ANSI SQL, ανακαλούνται επίσης όλα τα προνόμια που εκχωρήθηκαν βάσει αυτού του προνομίου. Στη MySQL, τα δικαιώματα μπορούν να αφαιρεθούν μόνο χρησιμοποιώντας την εντολή REVOKE ή αλλάζοντας τους πίνακες εκχώρησης δικαιωμάτων MySQL.

Για μια περιγραφή της χρήσης του REQUIRE, ανατρέξτε στην ενότητα 4.3.9 Χρήση ασφαλών συνδέσεων.

Σχόλια χρηστών

Δημοσιεύτηκε από τον Frank Wortner[Διαγραφή] [Επεξεργασία]

Δεν είχα κανένα πρόβλημα με το ld. DEC (Compaq) μπορεί
έχουν στερεώσει το ld σε κιτ patch. Μπορεί να θέλετε
εγκαταστήστε το πιο πρόσφατο κιτ ενημέρωσης κώδικα για το Digital Unix σας
(Tru64 Unix) πριν από τη δημιουργία της MySQL. Κιτ μπαλωμάτων
είναι διαθέσιμα στο
href=http://ftp.support.compaq.com/public/unix/ >
http://ftp.support.compaq.com/public/unix/

Δημοσιεύτηκε από το Σάββατο 16 Φεβρουαρίου 2002, @22:21[Διαγραφή] [Επεξεργασία]

Για εγκαταστάσεις πηγής, αυτές οι οδηγίες αναφέρονται στη δομή καταλόγου υποθέτοντας ότι χρησιμοποιήθηκε το "usr/local" (προεπιλογή) με τη ρύθμιση παραμέτρων. Όμως οι οδηγίες της προηγούμενης σελίδας (για τη μεταγλώττιση/εγκατάσταση) προτείνουν να χρησιμοποιήσετε:

./configure --prefix=/usr/local/mysql

Για να είμαι συνεπής (και αυτό μου προκαλεί κάποιες ταλαιπωρίες με την Perl, επομένως δεν είναι καθαρά σημασιολογικό), οι οδηγίες σε αυτήν τη σελίδα θα πρέπει να υποθέσουν ότι το /usr/local/mysql καθορίστηκε ως ο κατάλογος εγκατάστασης με τη ρύθμιση παραμέτρων.

Δημοσιεύτηκε από τη Linda Wright το Σάββατο 16 Φεβρουαρίου 2002, @22:21[Διαγραφή] [Επεξεργασία]

Αυτό είναι ίσως το πιο σημαντικό και λιγότερο
εκτιμώμενες ενότητες όλης της mySQL
τεκμηρίωση για πρώτη φορά χρήστες mySQL. IMHO,
διαβάζοντας αυτή τη σελίδα σε συνδυασμό με
Το http://www.mysql.com/doc/P/r/Privileges.html είναι ένα
πρέπει για τον σχεδιασμό ασφαλών συστημάτων βάσεων δεδομένων
κάθε πραγματικής πολυπλοκότητας.

Δημοσιεύτηκε από Christopher Raymond το Σάββατο 16 Φεβρουαρίου 2002, @22:21[Διαγραφή] [Επεξεργασία]

Προσπαθώ να εγκαταστήσω τη MySQL στο OS X Public Beta. Όταν εκτελώ το σενάριο mysql_install_db, λαμβάνω ένα μήνυμα σφάλματος:

Το Dyld: ./bin/mysqld δεν μπορεί να ανοίξει τη βιβλιοθήκη: /usr/lib/libpthread.A.dylib (Δεν υπάρχει τέτοιο αρχείο ή κατάλογος, errno = 2)
Η εγκατάσταση πινάκων επιχορήγησης απέτυχε!

Υποθέτω ότι το σενάριο αναζητά έναν κατάλογο που δεν υπάρχει επειδή η Apple έχει λίγο διαφορετική δομή ονομασίας καταλόγου. Ίσως αυτό το σενάριο πρέπει να τροποποιηθεί για τη διανομή του OS X.

Μπορεί κάποιος να βοηθήσει;

Δημοσιεύτηκε από τον Mark Zieg το Σάββατο 16 Φεβρουαρίου 2002, @22:21[Διαγραφή] [Επεξεργασία]

Θα ήταν ωραίο να υπήρχε μια επιλογή καταγραφής συνδέσεων, αλλά όχι ερωτημάτων.

Δημοσιεύτηκε από τον Bennett Haselton το Σάββατο 16 Φεβρουαρίου 2002, @22:21[Διαγραφή] [Επεξεργασία]

Εάν είστε συνδεδεμένοι ως ο ριζικός χρήστης της mysql, χωρίς επιλεγμένη τρέχουσα βάση δεδομένων και προσπαθήσετε να το κάνετε
παραχωρήστε όλα τα δικαιώματα σε έναν χρήστη με την εντολή:

ΧΟΡΗΓΗΣΤΕ ΟΛΑ ΤΑ ΠΡΟΝΟΜΙΑ ΣΤΟΝ * ΣΤΟ Bhaselto

Τότε δεν θα χορηγηθούν τα RELOAD, SHUTDOWN, PROCESS, FILE και GRANT, όπως μπορεί
επαληθεύεται ελέγχοντας τον πίνακα "χρήστης" της βάσης δεδομένων "mysql". (Αυτό προφανώς οφείλεται στο σχεδιασμό,
καθώς αυτά τα προνόμια μπορούν να κάνουν έναν χρήστη "υπερβολικά ισχυρό".)

Δημοσιεύτηκε από το DC Hill το Σάββατο 16 Φεβρουαρίου 2002, @22:21[Διαγραφή] [Επεξεργασία]

ΣΗΜΕΙΩΣΗ: Εάν έχετε εκχωρήσει δικαιώματα σε έναν χρήστη σε μια συγκεκριμένη βάση δεδομένων ή σε οποιοδήποτε χαμηλότερο επίπεδο από αυτό, επικαλούμενοι το "REVOKE ALL ON *.* FROM ;" ΔΕΝ θα ανακαλέσει τα προνόμια σε αυτά τα επίπεδα. Το *.* στην παραπάνω δήλωση σημαίνει "καθολικός", όχι "όλοι οι (μεμονωμένοι) πίνακες σε όλες τις (μεμονωμένες) βάσεις δεδομένων. Αυτή η δήλωση θα ανακαλέσει ΜΟΝΟ τα καθολικά δικαιώματα, όπως είναι αποθηκευμένα στον πίνακα mysql.user. ΠΡΕΠΕΙ να ανακαλέσετε οποιονδήποτε πιο συγκεκριμένο προνόμια με τον ίδιο τρόπο που παραχωρήθηκαν, εάν επιθυμείτε να αφαιρεθούν από τους πίνακες προνομίων. (δηλαδή - GRANT ALL ON foo.* TO ; => REVOKE ALL ON foo.* FROM ;) Ελπίζω ότι αυτό θα σώσει μερικά από σας λίγο χρόνο και απογοήτευση.

Δημοσιεύτηκε από τον Cris Perdue το Σάββατο 16 Φεβρουαρίου 2002, @22:21[Διαγραφή] [Επεξεργασία]

«Αν έχετε το προνόμιο της διαδικασίας, μπορείτε να δείτε
όλα τα νήματα.
Διαφορετικά, μπορείτε να δείτε μόνο τα δικά σας νήματα."

Δημοσιεύτηκε από το FreeBSD Forums το Σάββατο 16 Φεβρουαρίου 2002, στις 10:21 μ.μ[Διαγραφή] [Επεξεργασία]

Μπορείτε να χρησιμοποιήσετε το εργαλείο web phpMyAdmin για να κάνετε πολλά
των λειτουργιών διαχείρισης mySQL. href="http://www.freebsdforums.org"
>Φόρουμ FreeBSD

Δημοσιεύτηκε από τη Δευτέρα 25 Φεβρουαρίου 2002, @6:03 π.μ[Διαγραφή] [Επεξεργασία]

Επαληθεύτηκε στο MySQL 3.23.36 στο Red Hat Linux 7.1:
Σημειώστε ότι εάν πληκτρολογήσετε
χρησιμοποιήστε a_c;
παραχώρηση επιλογής στο * σε ;
θα σας δοθεί πρόσβαση σε οποιαδήποτε
βάση δεδομένων που αντιστοιχεί στο "a_c" όπου η υπογράμμιση είναι α
μπαλαντέρ. (Σπανίως πρόβλημα, υποθέτω).
Διορθώστε με
ενημέρωση mysql.db set db="a\_c" όπου db="a_c";

Δημοσιεύτηκε από jan behrens την Τρίτη 9 Ιουλίου 2002, @ 1:31 π.μ[Διαγραφή] [Επεξεργασία]

το προαναφερθέν bug από τον DAN ELIN στο x.x.41 είναι
προφανώς εξακολουθεί να ισχύει στο x.x.51, δεν μπορώ να συνδεθώ στο a
βάσης δεδομένων μετά από ΧΟΡΗΓΗΣΗ προνομίων και δόθηκαν α
κωδικός πρόσβασης σε νέο χρήστη (ναι, έκλεισα
προνόμια).............μόνο η πρόσβαση root είναι δυνατή

Δημοσιεύτηκε από τον Dan Egli την Πέμπτη 4 Απριλίου 2002, στις 20:33[Διαγραφή] [Επεξεργασία]

Φαίνεται ότι υπάρχει ένα σφάλμα στο 3.23.41 χρησιμοποιώντας το Grant.
Μόνο το root μπορεί να έχει πρόσβαση στη βάση δεδομένων mysql, ακόμη και
μετά τη χρήση του Grant για τη χορήγηση privs για οτιδήποτε
βάση δεδομένων/πίνακας/στήλη/κτλ.. παίρνετε πάντα
άρνηση άδειας, ανεξάρτητα.

Δημοσιεύτηκε από τον Lars Aronsson το Σάββατο 8 Ιουνίου 2002, @11:16 π.μ["%". Όταν προσπαθώ να τα διαγράψω, μου λένε κάποια βάση δεδομένων, αλλά δεν υπάρχουν παγκόσμια προνόμια, το
ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΣΩΡΙΝΟΥ ΠΙΝΑΚΑ προνόμιο σε αυτήν τη βάση δεδομένων
απορρίπτεται.

Πρέπει να δώσετε καθολική CREATE __and__
ΔΗΜΙΟΥΡΓΗΣΤΕ ΠΡΟΣΩΡΙΝΟΥΣ ΠΙΝΑΚΕΣ στο χρήστη. IOW:
ΧΟΡΗΓΗΣΗ ΔΗΜΙΟΥΡΓΙΑ, ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΣΩΡΙΝΩΝ ΠΙΝΑΚΩΝ ΣΤΗΝ *.* ΠΡΟΣ
;

Περιττό να πούμε ότι αυτό επηρεάζει την ασφάλεια ευχαρίστως.

Δημοσιεύτηκε από την Κυριακή 25 Αυγούστου 2002, @9:17 π.μ[Διαγραφή] [Επεξεργασία]

Τα προσωρινά αρχεία είναι μια εξαιρετική ιδέα, αλλά ακόμη και με
Δημιουργία και δημιουργία δικαιωμάτων προσωρινού αρχείου στο
αρχείο χρήστη (καθολικά δικαιώματα) εξακολουθεί να μην λειτουργεί.
Αυτό φαίνεται να είναι κακώς σχεδιασμένο.

Δημοσιεύτηκε από τον Brad Bulger τη Δευτέρα 2 Σεπτεμβρίου 2002, @4:09 π.μ[Διαγραφή] [Επεξεργασία]

Να σημειωθεί ότι μόνο ΜΕ ΕΠΙΛΟΓΗ ΕΠΙΧΟΡΗΓΗΣΗΣ
επιτρέπει στον χρήστη να μεταβιβάσει προνόμια σε χρήστες που
υπάρχει ήδη. Η αυτόματη δημιουργία χρήστη
εγγραφές δενεφαρμόστε - λαμβάνετε ένα σφάλμα λέγοντας
που κάνει ο χρήστης με το προνόμιο GRANT OPTION
δεν έχουν πρόσβαση στη βάση δεδομένων "mysql". Αυτό είναι
μάλλον καλό, αλλά πρέπει να τεκμηριωθεί.

Δημοσιεύτηκε από τον Michael Babcock την Παρασκευή 8 Νοεμβρίου 2002, @1:00 μ.μ[Διαγραφή] [Επεξεργασία]

Το SHOW MASTER STATUS απαιτεί δικαιώματα PROCESS.
Άλλοι τέτοιοι περίεργοι συνδυασμοί θα πρέπει να τεκμηριώνονται.

Δημοσιεύτηκε από τον Dee Kintaudi την Πέμπτη 21 Νοεμβρίου 2002, @12:42 μ.μ[Διαγραφή] [Επεξεργασία]

Εντάξει, έχω μια ερώτηση και ένα πρόβλημα με το Mysql και
κωδικούς πρόσβασης :). Προσπάθησα να χρησιμοποιήσω αρκετές από τις επιλογές
και τα περισσότερα από αυτά δεν έχουν δουλέψει. Ωστόσο ένα
Το soloution λειτούργησε και το δοκίμασα δύο φορές και αυτό
ήταν συμπαγής. Φυσικά έχασα το χαρτάκι I
το έγραψα και δεν μπορώ να το βρω
λύση οπουδήποτε, σαν να μην υπήρχε ή ίσως εγώ
το φαντάστηκε. Η λύση που λειτούργησε για μένα,
πριν χάσω το μικρό χαρτάκι το έγραψα
πάει κάπως έτσι...... Εισαγάγετε σε root χρήστη
Κωδικός "ο κωδικός μου" και μετά κάτι
με "Y", "Y", "Y", (περίπου μια ντουζίνα ή 15 φορές περίπου)
Ωστόσο, δεν μπορώ να βρω αυτή τη λύση πουθενά
κάποιος να με βοηθήσει εδώ;

Νομίζω ότι θα ήταν πολύ ωραίο να το έβαζαν
σε όλη την τεκμηρίωσή τους αντί να προσπαθούν
κρυψ'το. Νομίζω ότι αυτό θα έλυνε πολλά προβλήματα. Μόλις
βάλε κωδικό = "Y", "Y", "Y", όπως τους ντρέπονται για αυτό
ή κάτι.

Δημοσιεύτηκε από AJIT DIXIT τη Δευτέρα 25 Νοεμβρίου 2002, @ 6:56 π.μ[Διαγραφή] [Επεξεργασία]

Όταν εργάζομαι σε ενημέρωση πολλών πινάκων με χρήστη root
δουλεύει μια χαρά

Όταν εργάζομαι με μη-root χρήστη λαμβάνω σφάλμα

Sql: ενημέρωση Stockists, περιοχές ορίζονται a_nm = όνομα
όπου acd = περιοχή

Σε αυτό το κεφάλαιο, θα μάθετε πώς να εργάζεστε με προνόμια. Όπως συζητήθηκε στο Κεφάλαιο 2, η SQL χρησιμοποιείται συνήθως σε περιβάλλοντα που απαιτούν αναγνώριση από τον χρήστη και διάκριση μεταξύ διαφορετικών χρηστών συστημάτων. Γενικά, οι ίδιοι οι διαχειριστές βάσεων δεδομένων δημιουργούν χρήστες και τους δίνουν προνόμια. Από την άλλη πλευρά, οι χρήστες που δημιουργούν οι ίδιοι πίνακες έχουν δικαιώματα διαχείρισης αυτών των πινάκων. Τα δικαιώματα είναι αυτά που καθορίζουν εάν ένας καθορισμένος χρήστης μπορεί να εκτελέσει μια δεδομένη εντολή. Υπάρχουν διάφοροι τύποι προνομίων που αντιστοιχούν σε διάφορους τύπους λειτουργιών. Τα δικαιώματα παραχωρούνται και ανακαλούνται χρησιμοποιώντας δύο εντολές SQL: - GRANT και REVOKE. Αυτό το κεφάλαιο θα σας δείξει πώς χρησιμοποιούνται αυτές οι εντολές.

ΧΡΗΣΤΕΣ

Κάθε χρήστης σε περιβάλλον SQL έχει ένα ειδικό όνομα ή αριθμό αναγνώρισης. Η ορολογία είναι διαφορετική παντού, αλλά επιλέξαμε (ακολουθώντας το ANSI) να αναφερθούμε σε αυτήν ή τον αριθμό ως Αναγνωριστικό Πρόσβασης (ID). Μια εντολή που αποστέλλεται στη βάση δεδομένων σχετίζεται με έναν συγκεκριμένο χρήστη. ή διαφορετικά, ένα ειδικό αναγνωριστικό πρόσβασης. Καθώς σχετίζεται με μια βάση δεδομένων SQL, το αναγνωριστικό άδειας είναι το όνομα χρήστη και η SQL μπορεί να χρησιμοποιήσει την ειδική λέξη-κλειδί USER, η οποία αναφέρεται στο Access ID που σχετίζεται με την τρέχουσα εντολή. Η εντολή ερμηνεύεται και επιτρέπεται (ή απορρίπτεται) με βάση πληροφορίες που σχετίζονται με το Access ID του χρήστη που εκδίδει την εντολή.

ΕΓΓΡΑΦΗ

Σε συστήματα με πολλούς χρήστες, υπάρχει κάποιο είδος διαδικασίας σύνδεσης που πρέπει να ολοκληρώσει ο χρήστης για να αποκτήσει πρόσβαση στο σύστημα υπολογιστή. Αυτή η διαδικασία καθορίζει ποιο αναγνωριστικό πρόσβασης θα συσχετιστεί με τον τρέχοντα χρήστη. Συνήθως, κάθε άτομο που χρησιμοποιεί τη βάση δεδομένων πρέπει να έχει το δικό του αναγνωριστικό πρόσβασης και μετά την εγγραφή γίνεται έγκυρος χρήστης. Ωστόσο, συχνά οι χρήστες με πολλές εργασίες μπορούν να εγγραφούν σε διαφορετικά αναγνωριστικά πρόσβασης ή, αντίθετα, ένα αναγνωριστικό πρόσβασης μπορεί να χρησιμοποιηθεί από πολλούς χρήστες. Από την άποψη της SQL δεν υπάρχει διαφορά μεταξύ αυτών των δύο περιπτώσεων. αντιμετωπίζει τον χρήστη απλώς ως αναγνωριστικό πρόσβασής του. Η βάση δεδομένων SQL μπορεί να χρησιμοποιεί τη δική της διαδικασία σύνδεσης ή μπορεί να επιτρέπει ένα άλλο πρόγραμμα, όπως π.χ λειτουργικό σύστημα(το κύριο πρόγραμμα που εκτελείται στον υπολογιστή σας), επεξεργαστείτε το αρχείο εγγραφής και αποκτήστε το αναγνωριστικό πρόσβασης από αυτό το πρόγραμμα. Με τον ένα ή τον άλλο τρόπο, η SQL θα έχει ένα αναγνωριστικό πρόσβασης που θα συσχετίζεται με τις ενέργειές σας και η λέξη-κλειδί USER θα είναι σχετική με εσάς.

ΠΑΡΟΧΗ ΠΡΟΝΟΜΙΩΝ

Κάθε χρήστης σε μια βάση δεδομένων SQL έχει ένα σύνολο προνομίων. Αυτό επιτρέπεται να κάνει ο χρήστης (ίσως είναι ένα αρχείο καταγραφής, το οποίο μπορεί να θεωρηθεί ως ελάχιστο προνόμιο). Αυτά τα προνόμια μπορούν να αλλάξουν με την πάροδο του χρόνου - προστίθενται νέα, αφαιρούνται τα παλιά. Μερικά από αυτά τα προνόμια ορίζονται στο ANSI SQL, αλλά υπάρχουν επιπλέον δικαιώματα που απαιτούνται επίσης. Τα προνόμια SQL όπως ορίζονται από το ANSI δεν επαρκούν στις περισσότερες πραγματικές καταστάσεις. Από την άλλη πλευρά, οι τύποι των προνομίων που απαιτούνται μπορεί να διαφέρουν ανάλογα με τον τύπο του συστήματος που χρησιμοποιείτε - για το οποίο το ANSI δεν κάνει συστάσεις. Προνόμια που δεν αποτελούν μέρος του προτύπου SQL ενδέχεται να χρησιμοποιούν σύνταξη που είναι παρόμοια και δεν συνάδει πλήρως με το πρότυπο.

ΠΡΟΤΥΠΙΚΑ ΠΡΟΝΟΜΙΑ

Τα δικαιώματα SQL που ορίζονται από το ANSI είναι δικαιώματα αντικειμένου. Αυτό σημαίνει ότι ο χρήστης έχει το δικαίωμα να εκτελέσει μια δεδομένη εντολή μόνο σε ένα συγκεκριμένο αντικείμενο στη βάση δεδομένων. Προφανώς, τα δικαιώματα πρέπει να κάνουν διάκριση μεταξύ αυτών των αντικειμένων, αλλά ένα σύστημα προνομίων που βασίζεται αποκλειστικά στα προνόμια ενός αντικειμένου δεν μπορεί να αντιμετωπίσει όλα όσα χρειάζεται η SQL, όπως θα δούμε αργότερα σε αυτό το κεφάλαιο. Τα δικαιώματα ενός αντικειμένου συσχετίζονται τόσο με χρήστες όσο και με πίνακες. Δηλαδή, το δικαίωμα δίνεται σε έναν συγκεκριμένο χρήστη σε έναν καθορισμένο πίνακα, ή υποκείμενο πίνακα ή προβολή. Πρέπει να θυμάστε ότι ο χρήστης που δημιούργησε τον πίνακα (οποιουδήποτε είδους) είναι ο κάτοχος αυτού του πίνακα.

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

ΕΠΙΛΟΓΗ Ένας χρήστης με αυτό το δικαίωμα μπορεί να εκτελέσει ερωτήματα στον πίνακα.

INSERT Ένας χρήστης με αυτό το δικαίωμα μπορεί να εκδώσει μια εντολή INSERT σε έναν πίνακα.

ΕΝΗΜΕΡΩΣΗ Ένας χρήστης με αυτό το δικαίωμα μπορεί να εκδώσει μια εντολή UPDATE σε έναν πίνακα. Μπορείτε να περιορίσετε αυτό το δικαίωμα σε συγκεκριμένες στήλες πίνακα.

ΔΙΑΓΡΑΦΗ Ένας χρήστης με αυτό το δικαίωμα μπορεί να εκδώσει μια εντολή DELETE σε έναν πίνακα.

ΑΝΑΦΟΡΕΣ Ένας χρήστης με αυτό το δικαίωμα μπορεί να ορίσει ένα ξένο κλειδί που χρησιμοποιεί μία ή περισσότερες στήλες αυτού του πίνακα ως γονικό κλειδί. Μπορείτε να περιορίσετε αυτό το δικαίωμα σε ορισμένες στήλες. (Δείτε το Κεφάλαιο 19 για λεπτομέρειες σχετικά με το ξένο κλειδί και το γονικό κλειδί.)

Επιπλέον, θα συναντήσετε μη τυπικά δικαιώματα αντικειμένου, όπως το INDEX, το οποίο δίνει το δικαίωμα δημιουργίας ευρετηρίου σε έναν πίνακα, το SYNONYM, το οποίο δίνει το δικαίωμα να δημιουργήσετε ένα συνώνυμο για ένα αντικείμενο, το οποίο θα εξηγηθεί στο Κεφάλαιο 23, και ALTER, που δίνει το δικαίωμα εκτέλεσης της εντολής ALTER TABLE σε έναν πίνακα. Η μηχανή SQL εκχωρεί αυτά τα δικαιώματα σε χρήστες χρησιμοποιώντας την εντολή GRANT.

ΟΜΑΔΑ ΧΟΡΗΓΗΣΕΩΝ

Ας υποθέσουμε ότι ο χρήστης Diane έχει έναν πίνακα πελατών και θέλει να επιτρέψει στον χρήστη Adrian να τον ρωτήσει. Στη συνέχεια, η Diane θα πρέπει να εισαγάγει την ακόλουθη εντολή:

GRANT INSERT ON Slespeople TO Diane;

Τώρα ο Adrian μπορεί να εκτελέσει ερωτήματα στον πίνακα "Πελάτες". Χωρίς άλλα προνόμια, μπορεί να επιλέξει μόνο τιμές. αλλά δεν μπορεί να εκτελέσει καμία ενέργεια που θα επηρεάσει τις τιμές στον πίνακα Πελάτες (συμπεριλαμβανομένης της χρήσης του πίνακα Πελάτες ως γονικού πίνακα του ξένου κλειδιού, που περιορίζει τις αλλαγές που μπορούν να γίνουν στην τιμή στον πίνακα Πελάτες).

Όταν η SQL λαμβάνει μια εντολή GRANT, ελέγχει τα δικαιώματα του χρήστη που εκδίδει την εντολή για να προσδιορίσει εάν η εντολή GRANT είναι έγκυρη. Ο Adrian δεν μπορεί να δώσει αυτή την εντολή μόνος του. Επίσης, δεν μπορεί να εκχωρήσει άδεια SELECT σε άλλο χρήστη: ο πίνακας εξακολουθεί να ανήκει στην Diane (θα δείξουμε αργότερα πώς η Diane μπορεί να εκχωρήσει άδεια στον Adrian SELECT σε άλλους χρήστες).

Η σύνταξη είναι ίδια με την παραχώρηση άλλων προνομίων. Εάν ο Adrian είναι ο κάτοχος του πίνακα Sellers, τότε μπορεί να επιτρέψει στην Diane να εισάγει σειρές σε αυτόν χρησιμοποιώντας την ακόλουθη ρήτρα

GRANT INSERT ON Slespeople TO Diane; Η Diane έχει πλέον το δικαίωμα να τοποθετήσει έναν νέο πωλητή στον πίνακα.

ΟΜΑΔΕΣ ΠΡΟΝΟΜΙΩΝ, ΟΜΑΔΕΣ ΧΡΗΣΤΩΝ

Δεν πρέπει να περιοριστείτε στην παραχώρηση ενός μόνο προνομίου σε έναν μεμονωμένο χρήστη με την εντολή GRANT. Οι λίστες προνομίων ή χρηστών διαχωρισμένων με κόμματα είναι απολύτως αποδεκτές. Ο Stephen μπορεί να παρέχει τόσο SELECT όσο και INSERT στον πίνακα Order για τον Adrian

GRANT SELECT, INSERT ON Orders TO Adrian. ή για τον Adrian και για την Diane GRANT SELECT, INSERT ON Orders TO Adrian, Diane.

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

ΠΕΡΙΟΡΙΣΜΟΣ ΠΡΟΝΟΜΙΩΝ ΣΕ ΣΥΓΚΕΚΡΙΜΕΝΕΣ ΣΤΗΛΕΣ

Όλα τα δικαιώματα αντικειμένων χρησιμοποιούν την ίδια σύνταξη, εκτός από τις εντολές UPDATE και REGERNCES, οι οποίες δεν απαιτούν ονόματα στηλών. Το δικαίωμα UPDATE μπορεί να παραχωρηθεί όπως και άλλα προνόμια:

ΕΠΙΧΟΡΗΓΗΣΤΕ ΕΝΗΜΕΡΩΣΗ ΓΙΑ ΠΩΛΗΤΕΣ ΣΤΗΝ Diane.

Αυτή η εντολή θα επιτρέψει στην Diane να αλλάξει τις τιμές σε οποιαδήποτε ή όλες τις στήλες του πίνακα Vendors. Ωστόσο, εάν ο Adrian θέλει να περιορίσει την Diane από το να αλλάξει, για παράδειγμα, προμήθειες, μπορεί να εισέλθει

ΕΠΙΧΟΡΗΓΗΣΤΕ ΕΝΗΜΕΡΩΣΗ (comm) ΣΤΟΥΣ ΠΩΛΗΤΕΣ ΣΤΗΝ Diane.

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

ΕΠΙΧΟΡΗΓΗΣΤΕ ΕΝΗΜΕΡΩΣΗ (πόλη, επικοινωνία) ΣΤΟΥΣ ΠΩΛΗΤΕΣ ΣΤΗΝ Diane.

Οι ΑΝΑΦΟΡΕΣ ακολουθούν τον ίδιο κανόνα. Όταν εκχωρείτε το δικαίωμα REFERENCES σε άλλον χρήστη, θα μπορεί να δημιουργεί ξένα κλειδιά που αναφέρονται σε στήλες στον πίνακά σας ως γονικά κλειδιά. Όπως και το UPDATE, το δικαίωμα REFERENCES μπορεί να καθοριστεί ως μια λίστα με μία ή περισσότερες στήλες για τις οποίες περιορίζεται αυτό το δικαίωμα. Για παράδειγμα, η Diane θα μπορούσε να εκχωρήσει στον Stephen το δικαίωμα να χρησιμοποιήσει τον πίνακα Πελάτης ως τον πίνακα γονικού κλειδιού με την ακόλουθη εντολή:

ΕΠΙΧΟΡΗΓΗΣΤΕ ΑΝΑΦΟΡΕΣ (cname, cnum) ΣΤΟΥΣ Πελάτες ΣΤΟΝ Stephen; Αυτή η εντολή δίνει στον Stephen το δικαίωμα να χρησιμοποιεί τις στήλες cnum και cname ως γονικά κλειδιά σε οποιαδήποτε ξένα κλειδιά στους πίνακές του. Ο Stephen μπορεί να ελέγξει πώς γίνεται αυτό. Μπορεί να ορίσει (cname, cnum) ή, στην περίπτωσή μας, (cnum, cname), ως γονικό κλειδί δύο στηλών που ταιριάζει με ένα ξένο κλειδί σε δύο στήλες σε έναν από τους πίνακες του. Ή μπορεί να δημιουργήσει ξεχωριστά ξένα κλειδιά για να αναφέρεται στο φύλο μεμονωμένα, διασφαλίζοντας έτσι ότι η Diane έχει ένα γονικό κλειδί αντιστοιχισμένο σε αυτό (βλ. Κεφάλαιο 19).

Χωρίς περιορισμούς σε αριθμούς ξένων κλειδιών, πρέπει να βασίζεται σε αυτά τα γονικά κλειδιά και τα γονικά κλειδιά διαφορετικών ξένων κλειδιών πρέπει να επιτρέπεται να επικαλύπτονται.

Όπως και με το δικαίωμα UPDATE, μπορείτε να εξαιρέσετε μια λίστα στηλών και έτσι να επιτρέψετε τη χρήση όλων των στηλών ως γονικών κλειδιών. Ο Adrian μπορεί να παραχωρήσει στην Diane το δικαίωμα να το κάνει αυτό με την ακόλουθη εντολή:

ΕΠΙΧΟΡΗΓΗΣΤΕ ΑΝΑΦΟΡΕΣ ΣΕ ΠΩΛΗΤΕΣ ΣΤΗΝ Diane.

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

ΧΡΗΣΗ ΟΛΩΝ ΚΑΙ ΔΗΜΟΣΙΩΝ ΕΠΙΧΕΙΡΗΜΑΤΩΝ

Η SQL υποστηρίζει δύο ορίσματα στην εντολή GRANT που έχουν ειδική σημασία: ALL PRIVILEGES ή απλά ALL και PUBLIC. ΟΛΑ χρησιμοποιείται αντί για ονόματα προνομίων στην εντολή GRANT για την παραχώρηση όλων των δικαιωμάτων σε έναν πίνακα. Για παράδειγμα, η Diane θα μπορούσε να δώσει στον Stephen ολόκληρο το σύνολο των προνομίων στον πίνακα Πελάτες με την ακόλουθη εντολή:

ΕΠΙΧΟΡΗΓΗΣΤΕ ΑΝΑΦΟΡΕΣ ΣΕ ΠΩΛΗΤΕΣ ΣΤΗΝ Diane.

(Τα δικαιώματα ΕΝΗΜΕΡΩΣΗΣ και ΑΝΑΦΟΡΩΝ ισχύουν φυσικά για όλες τις στήλες.) Ακολουθεί ένας άλλος τρόπος για να πείτε το ίδιο πράγμα:

ΧΟΡΗΓΗΣΤΕ ΟΛΟΥΣ ΤΟΥΣ Πελάτες ΣΤΟΝ Stephen.

Το PUBLIC μοιάζει περισσότερο με τύπο ορίσματος catch-all παρά με προνόμιο χρήστη. Όταν εκχωρείτε δικαιώματα δημοσίευσης, τα λαμβάνουν αυτόματα όλοι οι χρήστες. Τις περισσότερες φορές, αυτό χρησιμοποιείται για το δικαίωμα SELECT σε ορισμένους υποκείμενους πίνακες ή προβολές που θέλετε να διαθέσετε σε οποιονδήποτε χρήστη. Για να επιτρέψετε σε οποιονδήποτε χρήστη να δει τον πίνακα Παραγγελίας, θα μπορούσατε, για παράδειγμα, να εισαγάγετε τα εξής:

ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ ΓΙΑ ΠΑΡΑΓΓΕΛΙΕΣ ΣΤΟ ΔΗΜΟΣΙΟ.

Φυσικά, μπορείτε να παραχωρήσετε οποιοδήποτε ή όλα τα προνόμια στην κοινωνία, αλλά αυτό μάλλον δεν είναι σκόπιμο. Όλα τα προνόμια εκτός από το SELECT επιτρέπουν στο χρήστη να αλλάξει (ή, στην περίπτωση των ΑΝΑΦΟΡΩΝ, να περιορίσει) τα περιεχόμενα του πίνακα. Εάν επιτρέψετε σε όλους τους χρήστες να αλλάξουν το περιεχόμενο των πινάκων σας θα δημιουργήσει πρόβλημα.

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

ΧΟΡΗΓΗΣΗ ΠΡΟΝΟΜΙΩΝ ΧΡΗΣΗΣ ΜΕ ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ

Μερικές φορές, ο δημιουργός ενός πίνακα θέλει άλλους χρήστες να μπορούν να αποκτήσουν προνόμια στο τραπέζι του. Αυτό γίνεται συνήθως σε συστήματα όπου ένα ή περισσότερα άτομα δημιουργούν αρκετούς (ή όλους) από τους πίνακες βάσης σε μια βάση δεδομένων και στη συνέχεια αναθέτουν την ευθύνη για αυτούς σε αυτούς που θα συνεργαστούν πραγματικά μαζί τους. Η SQL σάς επιτρέπει να το κάνετε αυτό χρησιμοποιώντας την ρήτρα WITH GRANT OPTION. Εάν η Diane ήθελε ο Adrian να μπορεί να παραχωρήσει το δικαίωμα SELECT στον πίνακα Πελάτες σε άλλους χρήστες, θα του παραχωρούσε το προνόμιο SELECT χρησιμοποιώντας την ρήτρα WITH GRANT OPTION:

GRANT SELECT ON Customers TO Adrian ΜΕ ΕΠΙΛΟΓΗ ΕΠΙΧΟΡΗΓΗΣΗΣ. Στη συνέχεια, ο Adrian απέκτησε το δικαίωμα να μεταβιβάσει το προνόμιο SELECT σε τρίτους. μπορεί να εκδώσει την εντολή GRANT SELECT ON Diane.Customers TO Stephen; ή ακόμα και GRANT SELECT ON Diane.Customers TO Stephen ΜΕ ΕΠΙΛΟΓΗ GRANT? Ένας χρήστης με ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ σε ένα συγκεκριμένο προνόμιο σε ένα δεδομένο τραπέζι μπορεί, με τη σειρά του, να παραχωρήσει αυτό το δικαίωμα στον ίδιο πίνακα, με ή χωρίς ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ, σε οποιονδήποτε άλλο χρήστη. Αυτό δεν αλλάζει την ιδιοκτησία του ίδιου του πίνακα. όπως και πριν, ο πίνακας ανήκει στον δημιουργό του. (Ως εκ τούτου, οι εκχωρημένοι χρήστες πρέπει να εισάγουν το πρόθεμα του αναγνωριστικού πρόσβασης κατόχου όταν αναφέρονται σε αυτούς τους πίνακες. Στο επόμενο κεφάλαιο θα εμφανιστεί αυτή η μέθοδος.) Ένας χρήστης που χρησιμοποιεί την ΕΠΙΛΟΓΗ GRANT για όλα τα δικαιώματα για έναν δεδομένο πίνακα θα έχει πλήρη εξουσία σε αυτόν τον πίνακα.

ΑΚΥΡΩΣΗ ΠΡΟΝΟΜΙΩΝ

Ακριβώς όπως το ANSI παρέχει την εντολή CREATE TABLE για τη δημιουργία ενός πίνακα, αντί για την εντολή DROP TABLE για να απαλλαγούμε από αυτόν, η εντολή GRANT σάς επιτρέπει να δίνετε δικαιώματα σε χρήστες χωρίς να παρέχετε τρόπο να τους επαναφέρετε. Η ανάγκη αφαίρεσης προνομίων καταλήγει στην εντολή ΑΝΑΚΛΗΣΗ, η οποία είναι στην πραγματικότητα ένα τυπικό εργαλείο με μια αρκετά σαφή μορφή εισαγωγής. Η σύνταξη της εντολής REVOKE είναι παρόμοια με την GRANT, αλλά έχει την αντίθετη σημασία. Για να καταργήσετε το δικαίωμα INSERT για τον Adrian στον πίνακα Order, μπορείτε να εισαγάγετε

ΑΝΑΚΛΗΣΗ ΕΝΘΕΤΟΥ ΣΤΙΣ παραγγελίες από τον Adrian.

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

ΑΝΑΚΛΗΣΗ ΕΝΘΕΤΟΥ, ΔΙΑΓΡΑΦΗ ΣΕ Πελάτες ΑΠΟ Adrian, Stephen. Ωστόσο, εδώ υπάρχει κάποια ασάφεια. Ποιος έχει το δικαίωμα να ανακαλέσει τα προνόμια; Πότε ένας χρήστης με το δικαίωμα να μεταβιβάσει προνόμια σε άλλους χάνει αυτό το δικαίωμα; Θα τα χάσουν και οι χρήστες στους οποίους παραχώρησε αυτά τα προνόμια; Δεδομένου ότι αυτό δεν είναι τυπικό χαρακτηριστικό, δεν υπάρχουν έγκυρες απαντήσεις σε αυτές τις ερωτήσεις, αλλά η πιο κοινή προσέγγιση είναι η εξής: * Τα προνόμια ανακαλούνται από τον χρήστη που τα παραχώρησε και η ανάκληση θα καταρρεύσει, δηλαδή θα διαδοθεί αυτόματα σε όλους τους χρήστες που έλαβαν το προνόμιο από αυτόν.

ΧΡΗΣΗ ΠΡΟΒΟΛΩΝ ΓΙΑ ΦΙΛΤΡΙΣΜΑ ΠΡΟΝΟΜΙΩΝ

Μπορείτε να κάνετε τις ενέργειες προνομίων πιο ακριβείς χρησιμοποιώντας προβολές. Κάθε φορά που εκχωρείτε ένα δικαίωμα σε έναν βασικό πίνακα σε έναν χρήστη, αυτό διαδίδεται αυτόματα σε όλες τις σειρές και, όταν χρησιμοποιείτε τις πιθανές εξαιρέσεις ΕΝΗΜΕΡΩΣΗ και ΑΝΑΦΟΡΕΣ, σε όλες τις στήλες του πίνακα. Δημιουργώντας μια προβολή που αναφέρεται στον υποκείμενο πίνακα και στη συνέχεια μεταφέρει το δικαίωμα στην προβολή αντί στον πίνακα, μπορείτε να περιορίσετε αυτά τα δικαιώματα σε οποιεσδήποτε εκφράσεις στο ερώτημα που περιέχεται στην προβολή. Αυτό βελτιώνει σημαντικά τις βασικές δυνατότητες της εντολής GRANT.

ΠΟΙΟΣ ΜΠΟΡΕΙ ΝΑ ΚΑΝΕΙ ΥΠΟΒΟΛΕΣ;

Για να δημιουργήσετε μια προβολή, πρέπει να έχετε το δικαίωμα SELECT σε όλους τους πίνακες στους οποίους αναφέρεστε στην προβολή. Εάν η προβολή μπορεί να τροποποιηθεί, τυχόν δικαιώματα INSERT, UPDATE και DELETE που έχετε στον βασικό πίνακα θα μεταφερθούν αυτόματα στην προβολή. Αν δεν έχετε δικαιώματα τροποποίησης στους βασικούς πίνακες, δεν θα μπορείτε να τα έχετε στις προβολές που δημιουργείτε, ακόμα κι αν αυτές οι ίδιες οι προβολές μπορούν να τροποποιηθούν. Επειδή τα ξένα κλειδιά δεν χρησιμοποιούνται σε προβολές, το προνόμιο REFERENCES δεν χρησιμοποιείται ποτέ κατά τη δημιουργία προβολών. Όλοι αυτοί οι περιορισμοί ορίζονται από το ANSI. Μπορούν επίσης να ενεργοποιηθούν τα μη τυπικά δικαιώματα συστήματος (που θα συζητηθούν αργότερα σε αυτό το κεφάλαιο). Στις επόμενες ενότητες, θα υποθέσουμε ότι οι δημιουργοί των προβολών που συζητάμε έχουν ιδιωτικά ή κατάλληλα προνόμια σε όλους τους υποκείμενους πίνακες.

ΠΕΡΙΟΡΙΣΜΟΣ ΕΠΙΛΟΓΗΣ ΠΡΟΝΟΜΙΟΥ ΣΕ ΣΥΓΚΕΚΡΙΜΕΝΕΣ ΣΤΗΛΕΣ

Ας υποθέσουμε ότι θέλετε να δώσετε στον χρήστη Claire τη δυνατότητα να βλέπει μόνο τις στήλες snum και sname του πίνακα Sales. Μπορείτε να το κάνετε αυτό βάζοντας τα ονόματα αυτών των στηλών στην προβολή

ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ Clairesview AS SELECT snum, sname ΑΠΟ Πωλητές. και παραχωρήστε στην Claire το δικαίωμα SELECT στην προβολή και όχι στον ίδιο τον πίνακα Sellers: GRANT SELECT On Clairesview στην Claire. Μπορείτε να δημιουργήσετε δικαιώματα ειδικά για στήλες, όπως η χρήση άλλων δικαιωμάτων, αλλά για μια εντολή INSERT θα εισαγάγετε προεπιλεγμένες τιμές και για μια εντολή DELETE, ο περιορισμός στήλης δεν θα έχει αποτέλεσμα. Τα προνόμια ΑΝΑΦΟΡΕΣ και ΕΝΗΜΕΡΩΣΗ μπορούν, φυσικά, να κάνουν συγκεκριμένες στήλες χωρίς να καταφεύγουν σε προβολή.

ΠΕΡΙΟΡΙΣΤΙΚΑ ΠΡΟΝΟΜΙΑ ΓΙΑ ΣΥΓΚΕΚΡΙΜΕΝΕΣ ΧΟΡΔΕΣΣυνήθως, ένας πιο χρήσιμος τρόπος για να φιλτράρετε τα δικαιώματα με προβολές είναι να χρησιμοποιήσετε την προβολή για να κάνετε το δικαίωμα να ισχύει μόνο σε ορισμένες σειρές. Αυτό το κάνετε φυσικά χρησιμοποιώντας ένα κατηγόρημα στην προβολή που θα καθορίσει ποιες σειρές περιλαμβάνονται. Για να δώσετε στον χρήστη Adrian το δικαίωμα UPDATE στον πίνακα Πελάτες για όλους τους πελάτες που βρίσκονται στο Λονδίνο, θα μπορούσατε να δημιουργήσετε μια προβολή όπως αυτή:

ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗΣ Londoncust ΩΣ ΕΠΙΛΕΓΜΕΝΟΣ * ΑΠΟ Πελάτες WHERE city = "London" ΜΕ ΕΠΙΛΟΓΗ ΕΠΙΛΟΓΗΣ; Στη συνέχεια, πρέπει να εκχωρήσετε το δικαίωμα ΕΝΗΜΕΡΩΣΗΣ σε αυτό το τραπέζι στον Adrian: GRANT UPDATE ON Londoncust TO Adrian. Αυτή είναι η διαφορά μεταξύ του προνομίου για ορισμένες σειρές και του προνομίου UPDATE για ορισμένες στήλες, το οποίο ισχύει για όλες τις στήλες του πίνακα Πελάτες, αλλά όχι για τις σειρές, μεταξύ των οποίων οι σειρές με τιμή φύλου πόλης διαφορετική από το Λονδίνο δεν θα ληφθούν υπόψη . Η ρήτρα WITH CHECK OPTION εμποδίζει τον Adrian να αλλάξει την τιμή του φύλου της πόλης σε οτιδήποτε άλλο εκτός από το Λονδίνο. ΠΑΡΟΧΗ ΠΡΟΣΒΑΣΗΣ ΜΟΝΟ ΣΕ ΕΞΑΓΩΓΜΕΝΑ ΔΕΔΟΜΕΝΑΜια άλλη δυνατότητα είναι να προσφέρουμε στους χρήστες πρόσβαση στα δεδομένα που έχουν ήδη ανακτηθεί και όχι στις πραγματικές τιμές στον πίνακα. Οι αθροιστικές συναρτήσεις μπορεί να είναι πολύ βολικές στη χρήση αυτής της μεθόδου. Μπορείτε να δημιουργήσετε μια προβολή που δίνει το πλήθος, τον μέσο όρο και το σύνολο για παραγγελίες για κάθε ημέρα της παραγγελίας: ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗΣ ημερομηνιών AS SELECT odate, COUNT (*), SUM (amt), AVG (amt) FROM Orders GROUP BY odate. Τώρα εκχωρείτε στον χρήστη Diane το δικαίωμα SELECT στην προβολή Detotals: GRANT SELECT ON Datetotals TO Diane. ΧΡΗΣΗ ΑΝΤΙΠΡΟΣΩΠΕΙΩΝ ΩΣ ΕΝΑΛΛΑΚΤΙΚΗ ΣΤΙΣ ΠΕΡΙΟΡΙΣΜΟΥΣΜία από τις πιο πρόσφατες εφαρμογές της σειράς, που περιγράφεται στο Κεφάλαιο 18, είναι η χρήση προβολών με ΕΠΙΛΟΓΗ ΕΛΕΓΧΟΥ ως εναλλακτική λύση στους περιορισμούς. Ας υποθέσουμε ότι θέλατε να βεβαιωθείτε ότι όλες οι τιμές φύλου πόλης στον πίνακα Προμηθευτές βρίσκονταν σε μία από τις πόλεις όπου η εταιρεία σας έχει επί του παρόντος γραφείο. Μπορείτε να ορίσετε έναν περιορισμό CHECK απευθείας στη στήλη της πόλης, αλλά μπορεί να γίνει δύσκολο να τον αλλάξετε αργότερα εάν η εταιρεία σας ανοίξει άλλα τμήματα εκεί, για παράδειγμα. Εναλλακτικά, μπορείτε να δημιουργήσετε μια αναλυτική προβολή που να εξαιρεί μη έγκυρες τιμές πόλης: ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ ΤΩΝ νομισμάτων ΩΣ ΕΠΙΛΕΓΜΕΝΗ * ΑΠΟ ΠΩΛΗΤΕΣ ΟΠΟΥ Η πόλη IN ("London", "Rome", "San Jose", "Berlin") ΜΕ ΕΠΙΛΟΓΗ ΕΛΕΓΧΟΥ. Τώρα, αντί να παραχωρείτε στους χρήστες δικαιώματα τροποποίησης στον πίνακα Εμπόρων, μπορείτε να τους παραχωρήσετε στην προβολή Curcities. Το πλεονέκτημα αυτής της προσέγγισης είναι ότι αν χρειαστεί να κάνετε μια αλλαγή, μπορείτε να διαγράψετε αυτήν την προβολή, να δημιουργήσετε μια νέα και να εκχωρήσετε δικαιώματα στους χρήστες σε αυτήν τη νέα προβολή, κάτι που είναι πιο εύκολο από την αλλαγή περιορισμών. Το μειονέκτημα είναι ότι ο κάτοχος του πίνακα πωλήσεων πρέπει επίσης να χρησιμοποιήσει αυτήν την προβολή εάν δεν θέλει να απορριφθούν οι δικές του εντολές. Από την άλλη πλευρά, αυτή η προσέγγιση επιτρέπει στον κάτοχο του πίνακα και σε οποιονδήποτε άλλο να αποκτήσει δικαιώματα τροποποίησης στον ίδιο τον πίνακα, αντί στην προβολή, να κάνει εξαιρέσεις στους περιορισμούς.

Αυτό είναι συχνά επιθυμητό, ​​αλλά δεν είναι εφικτό εάν χρησιμοποιείτε περιορισμούς στον βασικό πίνακα. Δυστυχώς, αυτές οι εξαιρέσεις δεν θα είναι ορατές στην προβολή. Εάν επιλέξετε αυτήν την προσέγγιση, θα θελήσετε να δημιουργήσετε μια δεύτερη προβολή που θα περιέχει μόνο εξαιρέσεις: ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ Άλλες πόλεις ΩΣ ΕΠΙΛΕΓΜΕΝΕΣ * ΑΠΟ Πωλητές ΟΠΟΥ Η πόλη ΟΧΙ ΜΕΣΑ ("Λονδίνο", "Ρώμη", "Σαν Χοσέ", "Βερολίνο") ΜΕ ΕΠΙΛΟΓΗ ΕΛΕΓΧΟΥ. Θα πρέπει να επιλέξετε να δώσετε στους χρήστες μόνο το δικαίωμα SELECT σε αυτήν την προβολή, ώστε να μπορούν να βλέπουν τις εξαιρούμενες σειρές αλλά να μην μπορούν να βάλουν μη έγκυρες τιμές πόλης στον υποκείμενο πίνακα. Στην πραγματικότητα, οι χρήστες μπορούσαν να ρωτήσουν και τις δύο προβολές σε μια ένωση και να δουν όλες τις σειρές ταυτόχρονα.

ΑΛΛΑ ΕΙΔΗ ΠΡΟΝΟΜΙΩΝ

Φυσικά, θέλετε να μάθετε ποιος έχει το δικαίωμα να δημιουργήσει πρώτος τον πίνακα. Αυτή η περιοχή προνομίων δεν είναι ANSI, αλλά δεν μπορεί να αγνοηθεί. Όλα τα τυπικά προνόμια ANSI προέρχονται από αυτό το προνόμιο. προνόμια των δημιουργών πινάκων που μπορούν να μεταφέρουν δικαιώματα αντικειμένων. Εάν όλοι οι χρήστες σας δημιουργούν πίνακες βάσης στο σύστημα με διαφορετικά μεγέθηΑυτό θα οδηγήσει σε πλεονασμό τους και σε αναποτελεσματικότητα του συστήματος. Άλλες ερωτήσεις προσελκύουν επίσης την προσοχή:

Ποιος έχει το δικαίωμα να αλλάξει, να διαγράψει ή να περιορίσει πίνακες;

Τα δικαιώματα δημιουργίας βασικών πινάκων πρέπει να διαφέρουν από τα δικαιώματα δημιουργίας προβολών;

Πρέπει να υπάρχει ένας υπερχρήστης - ένας χρήστης που είναι υπεύθυνος για τη συντήρηση της βάσης δεδομένων και επομένως έχει τα περισσότερα ή όλα τα προνόμια που δεν παρέχονται μεμονωμένα;

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

Τα προνόμια που δεν ορίζονται ως προς τα ειδικά αντικείμενα δεδομένων ονομάζονται δικαιώματα συστήματος ή δικαιώματα βάσης δεδομένων. Σε βασικό επίπεδο, αυτά θα περιλαμβάνουν πιθανότατα το δικαίωμα δημιουργίας αντικειμένων δεδομένων, πιθανώς διαφορετικών από πίνακες βάσης (που συνήθως δημιουργούνται από λίγους χρήστες) και προβολές (συνήθως δημιουργούνται από την πλειοψηφία των χρηστών). Τα δικαιώματα συστήματος για τη δημιουργία προβολών θα πρέπει να είναι επιπλέον και όχι αντί των δικαιωμάτων αντικειμένων που απαιτεί το ANSI από τους δημιουργούς προβολών (που περιγράφηκαν νωρίτερα σε αυτό το κεφάλαιο). Επιπλέον, σε ένα σύστημα οποιουδήποτε μεγέθους υπάρχουν πάντα κάποιοι τύποι υπερχρηστών - χρήστες που έχουν αυτόματα τα περισσότερα ή όλα τα προνόμια - και που μπορούν να μεταφέρουν την κατάσταση υπερχρήστη σε κάποιον άλλο μέσω ενός προνομίου ή μιας ομάδας προνομίων. Διαχειριστής βάσης δεδομένων ή DBA, είναι ο όρος που χρησιμοποιείται πιο συχνά για έναν τέτοιο υπερχρήστη και τα προνόμια που έχει.

ΤΥΠΙΚΑ ΠΡΟΝΟΜΙΑ ΣΥΣΤΗΜΑΤΟΣ

Σε μια γενική προσέγγιση, υπάρχουν τρία βασικά προνόμια συστήματος: - CONNECT, - RESOURCE και - DBA (Διαχειριστής βάσης δεδομένων). Με απλούστερους όρους, το CONNECT μπορεί να ειπωθεί ότι αποτελείται από το δικαίωμα εγγραφής και το δικαίωμα δημιουργίας προβολών και συνωνύμων (βλ. Κεφάλαιο 23) εάν παραχωρηθούν τα δικαιώματα του αντικειμένου. Το RESOURCE αποτελείται από το δικαίωμα δημιουργίας βασικών πινάκων. Το DBA είναι ένα προνόμιο υπερχρήστη που δίνει στον χρήστη υψηλή εξουσία στη βάση δεδομένων. Ένας ή περισσότεροι χρήστες με λειτουργικότητα διαχειριστή βάσης δεδομένων ενδέχεται να έχουν αυτό το δικαίωμα. Ορισμένα συστήματα έχουν επίσης έναν ειδικό χρήστη, που μερικές φορές ονομάζεται SYSADM ή SYS (Διαχειριστής βάσης δεδομένων συστήματος), ο οποίος έχει την ανώτατη εξουσία. είναι ξεχωριστό για αυτούς, και όχι απλώς ένας χρήστης με ειδικά προνόμια DBA. Μάλιστα, μόνο ένα άτομο επιτρέπεται να εγγραφεί με το όνομα SYSADM, που είναι το αναγνωριστικό πρόσβασής του. Η διάκριση είναι αρκετά λεπτή και λειτουργεί διαφορετικά σε διαφορετικά συστήματα. Για τους σκοπούς μας, θα αναφερθούμε σε έναν εξαιρετικά προνομιούχο χρήστη που αναπτύσσει και διαχειρίζεται μια βάση δεδομένων με δικαιώματα DBA, κατανοώντας ότι στην πραγματικότητα αυτά τα προνόμια είναι το ίδιο προνόμιο. Η εντολή GRANT, σε τροποποιημένη μορφή, μπορεί να χρησιμοποιηθεί με δικαιώματα αντικειμένου καθώς και δικαιώματα συστήματος. Αρχικά, η μεταφορά δικαιωμάτων μπορεί να γίνει χρησιμοποιώντας ένα DBA. Για παράδειγμα, ένα DBA θα μπορούσε να εκχωρήσει το δικαίωμα δημιουργίας πίνακα στον Rodriguez ως εξής: GRANT RESOURCE TO Rodriguez.

ΔΗΜΙΟΥΡΓΙΑ ΚΑΙ ΔΙΑΓΡΑΦΗ ΧΡΗΣΤΩΝ

Φυσικά, τίθεται το ερώτημα: από πού προέρχεται ένας χρήστης που ονομάζεται Rodriguez; Πώς να προσδιορίσετε το αναγνωριστικό εκκαθάρισης; Στις περισσότερες υλοποιήσεις, το DBA δημιουργεί τον χρήστη παραχωρώντας του αυτόματα το δικαίωμα CONNECT. Σε αυτήν την περίπτωση, συνήθως προστίθεται μια ρήτρα IDENTIFIED BY για να υποδείξει τον κωδικό πρόσβασης. (Εάν όχι, το λειτουργικό σύστημα πρέπει να καθορίσει εάν μπορείτε να συνδεθείτε στη βάση δεδομένων με το δεδομένο αναγνωριστικό πρόσβασης.) Το DBA θα μπορούσε, για παράδειγμα, να εκδώσει GRANT CONNECT TO Thelonius IDENTIFIED BY Redwagon. το οποίο θα δημιουργήσει έναν χρήστη με το όνομα Thelonius, θα του δώσει το δικαίωμα εγγραφής και θα του εκχωρήσει τον κωδικό Redwagon, όλα σε μία πρόταση. Εφόσον ο Thelonious είναι ήδη πιστοποιημένος χρήστης, αυτός ή το DBA μπορεί να χρησιμοποιήσει την ίδια εντολή για να αλλάξει τον κωδικό πρόσβασης του Redwagon. Αν και αυτό είναι βολικό, εξακολουθούν να υπάρχουν περιορισμοί σε αυτήν την προσέγγιση. Αυτή είναι η αδυναμία να υπάρχει ένας χρήστης που δεν μπορούσε να εγγραφεί, τουλάχιστον προσωρινά. Εάν θέλετε να αποτρέψετε τη σύνδεση ενός χρήστη, πρέπει να χρησιμοποιήσετε το δικαίωμα CONNECT στο REVOKE, το οποίο "καταργεί" αυτόν τον χρήστη. Ορισμένες υλοποιήσεις σάς επιτρέπουν να δημιουργείτε και να διαγράφετε χρήστες, ανεξάρτητα από τα προνόμια σύνδεσής τους. Όταν εκχωρείτε το δικαίωμα CONNECT σε έναν χρήστη, δημιουργείτε αυτόν τον χρήστη. Επιπλέον, για να το κάνετε μόνοι σας, πρέπει να έχετε το προνόμιο DBA. Εάν αυτός ο χρήστης θα δημιουργήσει πίνακες βάσης (όχι μόνο προβολές), πρέπει επίσης να του εκχωρηθεί το προνόμιο RESOURCE. Αυτό όμως δημιουργεί αμέσως ένα άλλο πρόβλημα. Εάν επιχειρήσετε να αφαιρέσετε το προνόμιο CONNECT ενός χρήστη που έχει πίνακες που έχουν δημιουργηθεί από αυτόν, η εντολή θα απορριφθεί επειδή θα άφηνε τον πίνακα χωρίς κάτοχο, κάτι που δεν επιτρέπεται. Πρέπει πρώτα να απορρίψετε όλους τους πίνακες που δημιουργήθηκαν από αυτόν τον χρήστη πριν καταργήσετε το προνόμιο ΣΥΝΔΕΣΗ. Εάν αυτοί οι πίνακες δεν είναι κενοί, τότε πιθανότατα θα θέλετε να μεταβιβάσετε τα δεδομένα τους σε άλλους πίνακες χρησιμοποιώντας την εντολή INSERT, η οποία χρησιμοποιεί ένα ερώτημα. Δεν χρειάζεται να αφαιρέσετε ξεχωριστά το προνόμιο RESOURSE. Αρκεί να διαγράψετε το CONNECT για να διαγράψετε τον χρήστη. Ενώ η παραπάνω είναι μια αρκετά τυπική προσέγγιση για τα προνόμια του συστήματος, έχει επίσης σημαντικούς περιορισμούς. Έχουν προκύψει εναλλακτικές προσεγγίσεις που ορίζονται πιο συγκεκριμένα και ελέγχουν τα προνόμια του συστήματος με μεγαλύτερη ακρίβεια.

Αυτά τα συμπεράσματα μας οδηγούν κάπως πέρα ​​από το πρότυπο SQL όπως ορίζεται επί του παρόντος και, σε ορισμένες υλοποιήσεις, μπορεί να υπερβαίνουν εντελώς το πρότυπο SQL. Αυτά τα πράγματα πιθανότατα δεν θα σας απασχολήσουν πάρα πολύ εκτός και αν είστε DBA ή χρήστης υψηλό επίπεδο. Οι τακτικοί χρήστες πρέπει απλώς να είναι εξοικειωμένοι με τα προνόμια του συστήματος καταρχήν, συμβουλευόμενοι την τεκμηρίωσή τους μόνο σε περίπτωση ειδικών μηνυμάτων.

ΠΕΡΙΛΗΨΗ

Τα προνόμια σάς δίνουν τη δυνατότητα να βλέπετε την SQL από μια νέα οπτική γωνία όταν η SQL εκτελεί ενέργειες μέσω ειδικών χρηστών σε ένα ειδικό σύστημα βάσης δεδομένων. Η ίδια η εντολή GRANT είναι αρκετά απλή: με τη βοήθειά της, εκχωρείτε ορισμένα προνόμια ενός αντικειμένου σε έναν ή περισσότερους χρήστες. Εάν εκχωρήσετε το δικαίωμα WITH GRANT OPTION σε έναν χρήστη, αυτός ο χρήστης μπορεί με τη σειρά του να παραχωρήσει αυτό το δικαίωμα σε άλλους. Τώρα καταλαβαίνετε τις συμβουλές σχετικά με τη χρήση προνομίων σε προβολές—για τη βελτίωση των προνομίων σε πίνακες βάσης ή ως εναλλακτική λύση σε περιορισμούς—και ορισμένα από τα πλεονεκτήματα και τα μειονεκτήματα αυτής της προσέγγισης. Τα προνόμια συστήματος που απαιτούνται αλλά δεν εμπίπτουν στο πεδίο εφαρμογής του προτύπου SQL έχουν συζητηθεί στην πιο γενική τους μορφή και έτσι θα τα μάθετε μέσω της πρακτικής. Το Κεφάλαιο 23 θα συνεχίσει τη συζήτηση σχετικά με την εξαγωγή συμπερασμάτων στην SQL, όπως η αποθήκευση ή η επαναφορά αλλαγών, η δημιουργία των δικών σας ονομάτων για πίνακες που ανήκουν σε άλλα άτομα και η κατανόηση του τι συμβαίνει όταν διαφορετικοί χρήστες προσπαθούν να έχουν πρόσβαση στο ίδιο αντικείμενο ταυτόχρονα.

ΕΡΓΑΣΙΑ ΜΕ SQL

1. Δώστε στην Janet το δικαίωμα να αλλάξει την αξιολόγηση του πελάτη.

2. Δώστε στον Stephan το δικαίωμα να παραχωρήσει σε άλλους χρήστες το δικαίωμα να υποβάλουν ερωτήματα στον πίνακα Παραγγελίες.

3. Καταργήστε το δικαίωμα INSERT στον πίνακα Vendors από την Claire και από όλους τους χρήστες στους οποίους παραχωρήθηκε.

4. Δώστε στον Τζέρι το δικαίωμα να εισαγάγει ή να τροποποιήσει τον πίνακα Πελάτες, διατηρώντας παράλληλα την ικανότητά του να αξιολογεί τιμές στην περιοχή από 100 έως 500.

5. Επιτρέψτε στη Janet να υποβάλει ερώτημα στον πίνακα πελατών, αλλά αποτρέψτε τη να μειώσει τις αξιολογήσεις στον ίδιο πίνακα πελατών.

Η πλατφόρμα SQL Server χρησιμοποιεί τη δήλωση REVOKE ως τρόπο ανάκλησης των ρυθμίσεων δικαιωμάτων που έχουν εκχωρηθεί σε έναν συγκεκριμένο χρήστη. Αυτό το σημείο είναι σημαντικό επειδή ο SQL Server υποστηρίζει μια πρόσθετη δήλωση DENY που αρνείται ρητά την πρόσβαση ενός χρήστη σε έναν καθορισμένο πόρο. Στον SQL Server, η δήλωση REVOKE μπορεί να χρησιμοποιηθεί για την ανάκληση δικαιωμάτων που έχουν εκχωρηθεί σε έναν χρήστη χρησιμοποιώντας τη δήλωση GRANT. Εάν θέλετε να αρνηθείτε ρητά σε έναν χρήστη ένα συγκεκριμένο προνόμιο, θα πρέπει να χρησιμοποιήσετε τη δήλωση DENY.

Η πλατφόρμα SQL Server δεν υποστηρίζει τους όρους ANSI HIERARCHY OPTION και ADMIN OPTION. Παρόλο που η ρήτρα ADMIN OPTION δεν υποστηρίζεται, η έκδοση του SQL Server της εντολής REVOKE έχει δύο δικαιώματα διαχειριστή (CREATE και BACKUP). Η σύνταξη των οδηγιών είναι η εξής.

ΑΝΑΚΛΗΣΗ ([object_privilege] [, ...] | [system_privilege]) [(στήλη [, ...])]]| (ΠΡΟΣ | ΑΠΟ) (όνομα_παραλήπτη [, …] | ρόλος [, …] | ΔΗΜΟΣΙΟ | ΚΑΛΕΣΜΕΝΟΣ) ]

ΕΠΙΛΟΓΗ ΕΠΙΧΟΡΗΓΗΣΗΣ ΓΙΑ

Ο χρήστης στερείται του δικαιώματος εκχώρησης συγκεκριμένων προνομίων σε άλλους χρήστες.

προνόμιο αντικειμένου

Τα δικαιώματα πρόσβασης σε διάφορες οδηγίες, οι οποίες μπορούν να συνδυαστούν με οποιαδήποτε σειρά, ανακαλούνται.

ΟΛΑ

Όλα τα προνόμια που έχουν εκχωρηθεί σε επί του παρόντοςκαθορισμένους χρήστες ή/και για καθορισμένα αντικείμενα βάσης δεδομένων. Αυτή η πρόταση αποθαρρύνεται επειδή προωθεί την ασάφεια προγραμματισμού.

(ΕΠΙΛΟΓΗ | ΕΙΣΑΓΩΓΗ ΔΙΑΓΡΑΦΗΣ ΕΝΗΜΕΡΩΣΗΣ)

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

ΒΙΒΛΙΟΓΡΑΦΙΚΕΣ ΑΝΑΦΟΡΕΣ

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

Το δικαίωμα του χρήστη να δημιουργήσει ή να διαγράψει έναν κανόνα σε πίνακα ή προβολή ανακαλείται.

Το δικαίωμα εκτέλεσης μιας αποθηκευμένης διαδικασίας, μιας συνάρτησης που ορίζεται από το χρήστη ή μιας εκτεταμένης αποθηκευμένης διαδικασίας ανακαλείται.

προνόμιο συστήματος

Το δικαίωμα εκτέλεσης των ακόλουθων εντολών ανακαλείται: ΔΗΜΙΟΥΡΓΙΑ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ, ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΕΠΙΛΟΓΗΣ, ΔΗΜΙΟΥΡΓΙΑ ΣΥΝΑΡΤΗΣΗΣ, ΔΗΜΙΟΥΡΓΙΑ ΔΙΑΔΙΚΑΣΙΑΣ, ΔΗΜΙΟΥΡΓΙΑ ΚΑΝΟΝΑΣ, ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑΣ, ΔΗΜΙΟΥΡΓΙΑ ΠΡΟΒΟΛΗ, ΒΑΣΗ ΔΕΔΟΜΕΝΩΝ ΑΝΤΙΓΡΑΦΩΝ και ΑΡΧΕΙΟ ΑΝΤΙΓΡΑΦΩΝ.

ON [αντικείμενο] [(στήλη [, ...])]

Το δικαίωμα πρόσβασης του χρήστη στο συγκεκριμένο αντικείμενο ανακαλείται. Εάν το αντικείμενο είναι πίνακας ή προβολή, μπορείτε να ανακαλέσετε τα δικαιώματα πρόσβασης σε μεμονωμένες στήλες. Μπορείτε να ανακαλέσετε τα δικαιώματα SELECT, INSERT, UPDATE, DELETE και REFERENCES σε έναν πίνακα ή μια προβολή. Σε στήλες πίνακα ή προβολής, μπορείτε να ανακαλέσετε μόνο τα δικαιώματα SELECT και UPDATE. Μπορείτε να ανακαλέσετε τα δικαιώματα EXECUTE σε μια αποθηκευμένη διαδικασία, μια λειτουργία που ορίζεται από το χρήστη ή μια εκτεταμένη αποθηκευμένη διαδικασία.

[ΠΡΟΣ | FROM] όνομα παραλήπτη | ρόλος | ΔΗΜΟΣΙΟ | ΕΠΙΣΚΕΠΤΗΣ

Καθορίζει τους χρήστες ή τους ρόλους που χάνουν το καθορισμένο δικαίωμα. Μπορείτε να χρησιμοποιήσετε τη λέξη-κλειδί PUBLIC για να ανακαλέσετε τα δικαιώματα που έχουν εκχωρηθεί στον ρόλο PUBLIC (που περιλαμβάνει όλους τους χρήστες). Μπορείτε να παραθέσετε πολλούς παραλήπτες, χωρίζοντας τα ονόματά τους με κόμματα. Υποστηρίζεται επίσης στον SQL Server λογαριασμός GUEST, το οποίο χρησιμοποιείται από όλους τους χρήστες που δεν έχουν δική τους καταχώρηση στη βάση δεδομένων.

Τα προνόμια των χρηστών που έλαβαν τα δικαιώματά τους μέσω της ρήτρας WITH GRANT OPTION καταργούνται. Αυτή η ρήτρα απαιτείται όταν χρησιμοποιείτε την ρήτρα GRANT OPTION FOR.

AS (όνομα_ομάδας_όνομα_ρόλου)

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

Οι δύο μορφές της δήλωσης REVOKE, το δικαίωμα αντικειμένου REVOKE και το REVOKE system_privilege, είναι αμοιβαία αποκλειόμενες. Μην προσπαθήσετε να κάνετε και τις δύο λειτουργίες σε μία δήλωση. Η βασική συντακτική διαφορά μεταξύ των δύο είναι ότι δεν πρέπει να χρησιμοποιείτε τη ρήτρα ON κατά την κατάργηση των προνομίων συστήματος. Για παράδειγμα, για να καταργήσετε ένα προνόμιο συστήματος, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή.

ΑΝΑΚΛΗΣΗ ΔΗΜΙΟΥΡΓΙΑΣ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ, ΑΝΤΙΓΡΑΦΗ ΒΑΣΗΣ ΔΕΔΟΜΕΝΩΝ ΑΠΟ dylan, katie

Εάν εκχωρήθηκαν δικαιώματα σε έναν χρήστη που χρησιμοποιεί την ρήτρα WITH GRANT OPTION, τότε αυτά τα δικαιώματα θα πρέπει να ανακληθούν χρησιμοποιώντας την ταυτόχρονη χρήση δύο ρητρών - WITH GRANT OPTION και CASCADE. Για παράδειγμα:

ΑΝΑΚΛΗΣΗ ΕΠΙΛΟΓΗΣ ΧΟΡΗΓΗΣΗΣ ΓΙΑ ΕΠΙΛΟΓΗ, ΕΙΣΑΓΩΓΗ, ΕΝΗΜΕΡΩΣΗ, ΔΙΑΓΡΑΦΗ Τίτλων ΣΤΟΥΣ συντάκτες CASCADE GO

Η εντολή REVOKE μπορεί να χρησιμοποιηθεί μόνο στην τρέχουσα βάση δεδομένων. Συνεπώς, οι τυπικές επιλογές ANSI CURRENTJJSER και CURRENTROLE θεωρούνται πάντα σιωπηρά. Η δήλωση REVOKE χρησιμοποιείται επίσης για την ακύρωση όλων των επιλογών DENY.

Η πλατφόρμα SQL Server υποστηρίζει επίσης μια πρόσθετη δήλωση DENY. Η σύνταξη της πρότασης DENY είναι πανομοιότυπη με τη σύνταξη της δήλωσης ΑΝΑΚΤΗΣΗ. Στην ουσία όμως διαφέρουν στο ότι το REVOKE εξουδετερώνει τα προνόμια του χρήστη, ενώ το DENY τα απαγορεύει ρητά. Χρησιμοποιήστε τη δήλωση DENY για να αρνηθείτε την πρόσβαση χρήστη ή ρόλου σε ένα προνόμιο, ακόμη και αν το δικαίωμα παραχωρείται ρητά ή μέσω ανάθεσης ρόλου.

Η δήλωση REVOKE πρέπει να χρησιμοποιηθεί για την κατάργηση προνομίων που είχαν χορηγηθεί ή ΑΠΟΡΡΙΨΗ. Για παράδειγμα, ο χρήστης Kelly πήγε σε παρατεταμένη άδεια μητρότητας. Κατά τη διάρκεια αυτής της περιόδου, της απαγορεύτηκε η πρόσβαση στο τραπέζι των εργαζομένων. Επέστρεψε και επιτρέψαμε ξανά προνόμια.

ΑΡΝΗΣΤΕ ΟΛΕΣ ΤΟΝ εργαζόμενο TO Kelly GO

ΑΝΑΚΑΛΩΣΤΕ ΟΛΟΥΣ ΤΟΥΣ εργαζομένους TO Kelly GO

Σε αυτό το παράδειγμα, η εντολή REVOKE δεν καταργεί τα προνόμιά της, αντικαθιστά την εντολή DENY.

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

Τα δικαιώματα χορηγούνται από την εντολή GRANT. Θα πρέπει να θυμόμαστε ότι ο χρήστης που εκδίδει την εντολή GRANT μπορεί να μεταφέρει ή, αν προτιμάτε, να εκχωρήσει σε άλλους χρήστες μόνο εκείνα τα δικαιώματα που έχει ο ίδιος.

Το GRANT ορίζει δικαιώματα σε αντικείμενα βάσης δεδομένων σε χρήστες, ρόλους ή άλλα αντικείμενα βάσης δεδομένων. Όταν δημιουργείται ένα αντικείμενο, μόνο ο δημιουργός του έχει δικαιώματα σε αυτό και μόνο αυτός μπορεί να εκχωρήσει δικαιώματα σε άλλους χρήστες ή αντικείμενα.

Για πρόσβαση σε πίνακα ή προβολή, ο χρήστης ή το αντικείμενο χρειάζεται δικαιώματα SELECT, INSERT, UPDATE, DELETE ή REFERENCES. Όλα τα δικαιώματα μπορούν να δοθούν με την επιλογή ALL.

Για να καλέσετε μια διαδικασία σε μια εφαρμογή, ο χρήστης πρέπει να έχει δικαιώματα EXECUTE.

Οι χρήστες μπορούν να λάβουν άδεια παραχώρησης δικαιωμάτων σε άλλους χρήστες μεταφέροντας δικαιώματα σύμφωνα με τη λίστα , το οποίο καθορίζεται από την επιλογή ΜΕ ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ. Ο χρήστης μπορεί να παραχωρήσει σε άλλους μόνο τα δικαιώματα που έχει ο ίδιος.

Τα δικαιώματα μπορούν να δοθούν σε όλους τους χρήστες χρησιμοποιώντας την επιλογή PUBLIC στη θέση της λίστας ονομάτων χρηστών. Ο καθορισμός της επιλογής PUBLIC επηρεάζει μόνο τους χρήστες και όχι τα αντικείμενα βάσης δεδομένων.

Ο κατάλογος των δικαιωμάτων δίνεται στον πίνακα. 8.5.

Πίνακας 8.5. Κατάλογος δικαιωμάτων

Τα δικαιώματα μπορούν να ανακληθούν από τον χρήστη που τα παραχώρησε χρησιμοποιώντας την εντολή REVOKE. Εάν τα δικαιώματα εκδόθηκαν με χρήση ALL, τότε μπορούν να ρευστοποιηθούν μόνο σε λειτουργία ALL, εάν τα δικαιώματα εκδόθηκαν με τη χρήση PUBLIC, τότε μπορούν να ρευστοποιηθούν μόνο σε λειτουργία PUBLIC.

Σύνταξη:

GRANT (όλα /PRIVILEGES] / LJST_ ) ΣΤΟ ΤΡΑΠΕΖΙ ]

(όνομα πίνακα/όνομα προβολής)

ΠΡΟΣ ΤΗΝ( /ΛΙΣΤΑ_ /GROUP UNIX_group^

/EXECUTE ON PROCEDURE procname TO

(ΛΙΣΤΑ_ ΛΙΣΤΑ_ (ΜΕ ΕΠΙΛΟΓΗ ΕΠΙΧΟΡΗΓΗΣΗΣ./)

ILJST_όνομα ρόλου ΠΡΟΣ (ΔΗΜΟΣΙΟ

/ΛΙΣΤΑ_ (ΜΕ ΕΠΙΛΟΓΗ ADKIN] ) ;

;;= SELECT / DELETE / INSERT / UPDATE [ (LIST_col) ] j ΑΝΑΦΟΡΕΣ PT5T_co1) ]

; . = ΔΙΑΔΙΚΑΣΙΑ procname j TRIGGER trigname j ΠΡΟΒΟΛΗ όνομα προβολής / PUBLIC

;:= όνομα χρήστη I όνομα ρόλου

:;= όνομα χρήστη

Πίνακας 8.6. Περιγραφή των συντακτικών στοιχείων της εντολής GRANT

Διαφωνία Περιγραφή
προνόμιο Το όνομα του παραχωρούμενου δικαιώματος. Έγκυρες τιμές: SELECT, DELETE, INSERT, UPDATE, REFERENCES
Διάσελο Το όνομα της στήλης στην οποία παραχωρούνται δικαιώματα.
Όνομα πίνακα Όνομα του υπάρχοντος πίνακα στον οποίο ισχύουν τα δικαιώματα
Όνομα προβολής Όνομα της υπάρχουσας κριτικής που υπόκειται σε δικαιώματα
Το όνομα ενός υπάρχοντος αντικειμένου βάσης δεδομένων (διαδικασία, αναθεώρηση, ενεργοποίηση) για το οποίο ισχύουν δικαιώματα
όνομα χρήστη Όνομα του χρήστη στον οποίο μεταβιβάζονται τα δικαιώματα
ΜΕ ΕΠΙΛΟΓΗ ΕΠΙΧΟΡΗΓΗΣΗΣ Παραχωρεί δικαιώματα μεταφοράς σε χρήστες που αναφέρονται στο LIST_
όνομα ρόλου Όνομα υπάρχοντος ρόλου που δημιουργήθηκε από την εντολή CREATE ROLE
Ο χρήστης στον οποίο έχουν εκχωρηθεί τα δικαιώματα ρόλου. Η λίστα των χρηστών πρέπει να καθοριστεί στο isc4.gdb (δημιουργήθηκε, για παράδειγμα, από το βοηθητικό πρόγραμμα IBConsole)
GROUP unix_group Όνομα ομάδας UNIX που ορίζεται στο /etc/group

Η ακόλουθη εντολή εκχωρεί δικαιώματα SELECT και DELETE στον χρήστη. Η επιλογή ΜΕ ΕΠΙΛΟΓΗ ΕΠΙΧΟΡΗΓΗΣΗΣ δίνει τα δικαιώματα περαιτέρω μεταβίβασής τους.

Παράδειγμα 8.5

Και αυτή η εντολή δίνει το δικαίωμα να εκτελέσει μια διαδικασία σε άλλη διαδικασία και χρήστη.

Παράδειγμα 8.6

ΕΠΙΧΟΡΗΓΗΣΗ ΕΚΤΕΛΕΣΗΣ ΣΤΗ ΔΙΑΔΙΚΑΣΙΑ ΣΥΓΓΡΑΦΕΑΣ ΤΗΣ ΔΙΑΔΙΚΑΣΙΑΣ PBOOKAUTHOR, MISHA;

Σε αυτήν την περίπτωση, η μεταφορά δικαιωμάτων στη διαδικασία PBOOKAUTHOR στη βάση δεδομένων μας δεν έχει νόημα, αφού απλά δεν χρησιμοποιεί τη διαδικασία PAUTHOR, αλλά συντακτικά είναι αρκετά σωστή.

Η ακόλουθη εντολή είναι εντελώς παρόμοια σε περιεχόμενο με το Παράδειγμα 8.5, αλλά επικεντρώνεται στη χρήση ενσωματωμένης SQL.

Παράδειγμα 8.7 EXEC SQL

ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ, ΔΙΑΓΡΑΦΗ ΣΤΟ TBOOK ΣΤΟΝ ΜΙΣΑ ΜΕ ΕΠΙΛΟΓΗ ΧΟΡΗΓΗΣΗΣ.

Εκκαθάριση δικαιωμάτων. Εντολή ΑΝΑΚΛΗΣΗ

Το REVOKE καταργεί τα δικαιώματα πρόσβασης σε αντικείμενα βάσης δεδομένων. Τα δικαιώματα είναι ενέργειες με ένα αντικείμενο που επιτρέπονται στον χρήστη. Τα δικαιώματα SQL περιγράφονται στον πίνακα. 8.7.

Υπάρχουν ορισμένοι περιορισμοί που πρέπει να σημειώσετε όταν χρησιμοποιείτε την εντολή ΑΝΑΚΛΗΣΗ. Μόνο ο χρήστης που τα εξέδωσε μπορεί να ρευστοποιήσει δικαιώματα. Σε έναν χρήστη μπορεί να εκχωρηθούν τα ίδια δικαιώματα σε ένα αντικείμενο βάσης δεδομένων από οποιονδήποτε αριθμό διαφορετικών χρηστών. Η εντολή REVOKE συνεπάγεται τη στέρηση των δικαιωμάτων που είχαν εκχωρηθεί προηγουμένως από τον συγκεκριμένο χρήστη. Τα δικαιώματα που παραχωρούνται σε όλους τους χρήστες από την επιλογή PUBLIC μπορούν να ανακληθούν μόνο με την εντολή REVOKE με την επιλογή PUBLIC. Σύνταξη:

ΑΝΑΚΛΗΣΗ ονόματος χρήστη / ΔΗΜΟΣΙΟ :;= /"Όνομα χρήστη USER7

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

Παράδειγμα 8.8

ΑΝΑΚΛΗΣΗ ΔΙΑΓΡΑΦΗ ΠΗΡΕ ΑΠΟ ΤΟ MISHA?

Και αυτή η εντολή ανακαλεί το δικαίωμα εκτέλεσης μιας διαδικασίας από άλλη διαδικασία και χρήστη (δείτε την επισήμανση των αντίστοιχων δικαιωμάτων στο παράδειγμα 8.6)

ΑΝΑΚΛΗΣΗ .ΕΚΤΕΛΕΣΗ ΣΤΗ ΔΙΑΔΙΚΑΣΙΑ ΠΡΟΓΡΑΜΜΑΤΟΣ ΑΠΟ ΔΙΑΔΙΚΑΣΙΑ PBOOKAUTHOR, MISHA;

 Μπλουζα