MySQL: Erstellen eines Benutzers, der von mehreren Hosts aus eine Verbindung herstellen kann

30

Ich benutze MySQL und muss ein Konto erstellen, das entweder vom lokalen Host oder von einem anderen Server aus eine Verbindung herstellen kann, z. B. 10.1.1.1. Also mache ich:

CREATE USER 'bob'@'localhost' IDENTIFIED BY 'password123';
CREATE USER 'bob'@'10.1.1.1' IDENTIFIED BY 'password123';
GRANT SELECT, INSERT, UPDATE, DELETE on MyDatabse.* to 'bob'@'localhost', 'bob'@'10.1.1.1';

Das funktioniert gut, aber gibt es eine elegantere Möglichkeit, ein Benutzerkonto zu erstellen, das mit mehreren IPs verknüpft ist, oder muss dies auf diese Weise erfolgen?

Ich mache mir hauptsächlich Sorgen, dass die Berechtigungen in Zukunft für ein Bob-Konto aktualisiert werden, für das andere jedoch nicht.

DrStalker
quelle

Antworten:

20

Wenn Sie die Beschränkung auf den Host und keine Angabe auf der Basis eines Subnetzes oder Platzhalters vornehmen möchten %, ist dies die einzige Möglichkeit. Weitere Details finden Sie in der MySQL-Dokumentation .

Ich versuche immer noch, Möglichkeiten zu finden, um den Overhead beim Verwalten der Authentifizierung für große MySQL-Installationen zu beseitigen, und habe noch keine perfekte Lösung gefunden.

Warner
quelle
8

Beginnen wir damit, einen neuen Benutzer namens "chaminda" in der MySQL-Shell zu erstellen:

CREATE USER 'chaminda'@'%' IDENTIFIED BY 'password';

Das erste, was zu tun ist, ist, dem Benutzer die erforderlichen Berechtigungen zu erteilen. Hier habe ich alle Berechtigungen für den jeweiligen Benutzer erteilt.

GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'%';

Laden Sie alle Berechtigungen neu.

FLUSH PRIVILEGES;

Wenn Sie einem bestimmten Benutzer eine Reihe von IP-Adressen erlauben möchten, gehen Sie wie folgt vor: 10.1.1.%

GRANT ALL PRIVILEGES ON * . * TO 'chaminda'@'10.1.1.%';

Hinweis: Hier ist Hostname =% und das bedeutet, dass Sie von jedem Host aus auf diesen Datenbankserver zugreifen können. Das Gewähren aller Berechtigungen für den Benutzer ist ein großes Risiko und keine bewährte Methode. Außerdem können Sie den Benutzer 'chaminda' durch 'bob' ersetzen.

Chaminda Bandara
quelle
5
Dies beantwortet die Frage nicht. Es gewährt einem Benutzer Zugriff von allen IPs, aber das OP fragt nach einer eleganteren Möglichkeit, einem einzelnen Benutzer den Zugriff auf die Datenbank von einer Liste von IPs aus zu ermöglichen. Anstatt mehrere Anweisungen zu verwenden, um einen Benutzer mehrmals von mehreren IP-Adressen aus hinzuzufügen, sollten Sie einen einzelnen Benutzer hinzufügen, der von mehreren IP-Adressen aus auf die Datenbank zugreifen kann, wodurch die Verwaltung einfacher und weniger fehleranfällig wird.
Anthony
Sie können _ auch als Platzhalter wie 10.1.1.1__ verwenden, um 100-199 abzugleichen. Für 200 müssen Sie jedoch ein separates Konto erstellen oder den Platzhalter% verwenden und auch 0-99 und 201-255 einschließen
Chaminda Bandara,
-3

MySQL erlaubt mehrere Platzhalter in einer Zeile. Eine mögliche Lösung besteht darin, Host als Benutzer Bobfestzulegen

locahost/10.1.1.1

Referenz:

http://dev.mysql.com/doc/refman/5.1/en/connection-access.html

GabrielC
quelle
Das steht nicht in der Dokumentation. Wie in der Tabelle aufgeführt, ist die /255.255.255.0 eine Netzmaske. Wenn es eine Möglichkeit gibt, mehrere Platzhalter in der Hostdefinition aufzulisten, ist dies nicht der Fall.
Majikman