Χορήγηση **όλων** των προνομίων στη βάση δεδομένων

Έχω δημιουργήσει βάση δεδομένων, για παράδειγμα 'mydb'.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

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

Πώς μπορώ να χορηγήσω όλα τα προνόμια σε αυτή τη βάση δεδομένων και (στο μέλλον) τους πίνακες. Δεν μπορώ να δημιουργήσω πίνακες στη βάση δεδομένων 'mydb'. Πάντα λαμβάνω:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'
Λύση
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

Με αυτόν τον τρόπο δημιουργώ τα προνόμια του "Super User" (αν και κανονικά θα προσδιόριζα έναν κεντρικό υπολογιστή).

ΣΗΜΑΝΤΙΚΉ ΣΗΜΕΊΩΣΗ

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

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

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

Σχόλια (14)

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

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

Το % δεν φαίνεται να καλύπτει τις επικοινωνίες socket, για τις οποίες προορίζεται το localhost. Το WITH GRANT OPTION είναι καλό μόνο για τον υπερ-χρήστη, αλλιώς συνήθως αποτελεί κίνδυνο για την ασφάλεια.

Ελπίζω αυτό να βοηθάει.

Σχόλια (7)

Αυτό θα είναι χρήσιμο για μερικούς ανθρώπους:

Από τη γραμμή εντολών της MySQL:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

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

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

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Οι αστερίσκοι σε αυτή την εντολή αναφέρονται στη βάση δεδομένων και στον πίνακα (αντίστοιχα) που μπορούν να έχουν πρόσβαση - η συγκεκριμένη εντολή επιτρέπει στο χρήστη να διαβάζει, να επεξεργάζεται, να εκτελεί και να εκτελεί όλες τις εργασίες σε όλες τις βάσεις δεδομένων και τους πίνακες.

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

FLUSH PRIVILEGES;

Οι αλλαγές σας θα είναι πλέον σε ισχύ.

Για περισσότερες πληροφορίες: http://dev.mysql.com/doc/refman/5.6/en/grant.html

Αν δεν είστε άνετοι με τη γραμμή εντολών, τότε μπορείτε να χρησιμοποιήσετε ένα πρόγραμμα-πελάτη όπως MySQL workbench, Navicat ή SQLyog.

Σχόλια (4)