Aufgrund einiger Probleme habe ich beschlossen, alle Benutzer mit Ausnahme von neu zu erstellen root@localhost
. Dies funktioniert gut, aber der neu erstellte Benutzer hat kein Recht, etwas zu tun. Was ich möchte, ist einfach alle Rechte zum Rooten bei einer lokalen IP zu geben. Ich habe es root@localhost
versucht
CREATE USER 'root'@'10.0.3.210';
GRANT ALL ON *.* TO 'root'@'10.0.3.210';
Der erste Befehl funktioniert, der zweite schlägt mit der Nachricht fehl
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
Ich verstehe nicht, warum ich nicht root@localhost
alles machen kann, ich bin sicher, ich habe mich nicht mit seinen Privilegien angelegt. Von
SHOW GRANTS FOR 'root'@'localhost'
Ich bekomme
Grants for root@localhost
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER ON *.* TO 'root'@'localhost' WITH GRANT OPTION
GRANT ALL PRIVILEGES ON `%`.* TO 'root'@'localhost' WITH GRANT OPTION
was auch immer das bedeutet. Vermisse ich ein notwendiges Privileg? Kann es behoben werden?
Ich arbeite mit mysql Ver 14.14 Distrib 5.1.61 für debian-linux-gnu (x86_64).
mysql
permissions
Maaartinus
quelle
quelle
GRANT SELECT ON *.* TO 'root'@'10.0.3.210';
?Antworten:
Oh mein Gott, ich denke, das Problem ergibt sich aus dem Mischen des MySQL-Schemas verschiedener MySQL-Versionen. Führen Sie zunächst diese Abfrage aus:
Für MySQL 5.6 erhalten Sie 43 Spalten
Für MySQL 5.5 erhalten Sie 42 Spalten
Für MySQL 5.1 erhalten Sie 39 Spalten
Für MySQL 5.0 erhalten Sie 37 Spalten
Für MySQL 4.x erhalten Sie 31 Spalten
Stellen Sie sich dieses Szenario vor:
Die Benutzerberechtigungen werden verschoben. Bei jeder Ausführung
SHOW GRANTS;
ist es fest verdrahtet, Spalten an bestimmten Stellen in mysql.user zu erwarten (da mysql.user ein MyISAM ist und ROW_FORMAT dynamisch ist (Standard)). Es ist sehr leicht zu sehen, dass ein Benutzer plötzlich die Berechtigungen verliert, wenn Sie eine MySQL 5.0-Version von mysql.user in eine MySQL 5.1-Instanz neu laden.Sollten Sie sich in Zukunft dazu entschließen, Benutzer erneut in MySQL zu laden, versuchen Sie, die Benutzer mithilfe von pt-show-grant anstelle von mysqldump in eine Textdatei zu kopieren.
Ich habe tatsächlich meine eigene Version von pt-show-Grants wie folgt geschrieben:
Dadurch werden alle Benutzerzuschüsse als SQL erstellt, das weitaus portabler ist als Standard-MySQL-Techniken. Laden Sie einfach das SQL-Skript neu und die GRANTS werden ausgeführt. Natürlich ist ein solches Nachladen nur vorwärtskompatibel, niemals rückwärtskompatibel.
quelle
Der Kommentar von
gbn
brachte mich zur Lösung: Keine Ahnung, wie es dazu kam, aberroot@localhost
es fehlten einige Privilegien. Also zuerst alle über erhaltenEs gibt einige Spalten, also verwenden Sie so etwas wie
kann einige Eingaben sparen.
FLUSH PRIVILEGES
Wird wahrscheinlich nach den UPDATEs benötigt. Sobald ich alle Privilegien habe, kann ich sie auch GEWÄHREN.quelle
Ich habe ein Problem gesehen, bei dem Sie nicht können
GRANT CREATE TABLESPACE
.Ich bin mir jedoch nicht aller Details sicher und habe es unter 5.5 / Solaris gesehen
Mein Kommentar oben und Ihre Antwort weisen darauf hin, dass dies hier zutreffen kann. Das heißt, Sie können alles außer
CREATE TABLESPACE
Berechtigungen gewährenquelle
Wie @RolandoMYSQLDBA richtig angegeben hat, ist dieses Problem auf ein Upgrade Ihrer MySQL-Version zurückzuführen, während ältere Dateien erhalten bleiben (ohne Speicherauszug / Wiederherstellung). @gbn kam auch zu Recht zu dem Schluss, dass dies mit dem
CREATE TABLESPACE
Privileg zusammenhängt, das in MySQL 5.5 hinzugefügt wurde. Sie haben wahrscheinlich Datenbankdateien von MySQL 5.1.Die einfache Lösung (die auch im MySQL-Referenzhandbuch dokumentiert ist ) besteht darin, sie auszuführen
mysql_upgrade
und schließlich dieGRANT
Tabellenprüfung zu überspringen :quelle