Wie erteile ich dem MySQL-Server RAS-Berechtigungen für Benutzer?


118

Wenn ich SHOW GRANTSin meiner MySQL-Datenbank mache, bekomme ich

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

Wenn ich mich nicht irre, root@localhostbedeutet dies, dass der Benutzer rootnur von auf den Server zugreifen kann localhost. Wie kann ich MySQL anweisen, rootdie Berechtigung zum Zugriff auf diesen MySQL- Server auch von jedem anderen Computer (im selben Netzwerk) zu erteilen ?


6
Durch einfaches Ändern localhostvon %wird der Root-Zugriff auf das öffentliche Netzwerk gewährt. Vergessen Sie nichtflush privileges;

6
Das Hinzufügen von root @% setzt Sie einem hohen Risiko aus und sollte nicht durchgeführt werden. Ich weiß, dass dies ein alter Beitrag ist, aber diese Warnung sollte hier sein. Das Root-Konto ist das erste Konto, auf das Angreifer abzielen. Root @ '%' bedeutet, dass der Root-Benutzer von jedem beliebigen Ort aus eine Verbindung zu Ihrem MySQL-Konto herstellen kann. Es gibt zu viel, um in Kommentaren zu behandeln, aber Sie sollten versuchen, so viele Benutzer @ '%' wie möglich zu entfernen, und alle, die dabei deklariert werden, sollten nur sehr eingeschränkte Berechtigungen haben. Egal was passiert, Sie sollten auf keinen Fall root @ '%' hinzufügen, und Ihre Anwendungen sollten auch nicht erwarten, dass dieses Konto vorhanden ist.
Damon


Hey Leute, sollte die PASSWORD-Zeichenfolge für diesen Befehl entfernen ... es verursacht einen Fehler ... beenden Sie einfach mit IDENTIFIED BY und dann dem Passwort selbst.
Mário de Sá Vera

Antworten:


143

Dies gewährt Root-Zugriff mit demselben Kennwort von jedem Computer in *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

Wenn die Namensauflösung nicht funktioniert, können Sie den Zugriff auch über IP oder Subnetz gewähren:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%'
    IDENTIFIED BY 'some_characters'  
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

MySQL- GRANTSyntaxdokumente.


15
Ich nehme an, ...TO 'root'@'%' IDENTIFIED...würde Zugriff von überall gewähren?
Aufwind

3
Ich habe den Befehl in MySQL ausgeführt, SHOW GRANTSzeigt aber immer noch dasselbe (wie in meiner Frage). Ich habe es sogar getan FLUSH PRIVILGES. Gibt es etwas, das ich vermisse?
Aufwind

@Aufwind Ich würde nicht erwarten, dass du etwas anderes brauchst FLUSH PRIVILEGES. Melden Sie sich ab und wieder an, und starten Sie den mysqld-Dienst neu, wenn Sie Zugriff haben. Stellen Sie außerdem sicher, dass die skip networkingLeitung in Ihrem nicht aktiviert ist, my.cnfobwohl dies nicht dazu führen würde, dass Sie SHOW GRANTSimmer noch nicht identisch sind.
Michael Berkowski

@Aufwind Andernfalls müssen Sie möglicherweise stattdessen bei ServerFault.com nachfragen.
Michael Berkowski

10
Beachten Sie, dass dies IDENTIFIED BY PASSWORDvon einer 41-stelligen hexadezimalen Hash-Zahl begleitet wird. Verwenden IDENTIFIED BY 'password'Sie diese Option, wenn Sie das Kennwort direkt eingeben möchten.
Rainulf

94

Versuchen:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;

1
ähm, was Pa55w0rddumm erscheint, sag mir nicht, dass das das Passwort ist, das du machen willst. Für alle, die versuchen, sich bei MySQL anzumelden?
SSpoke

23
Es wird nur häufig verwendet, um einem Passwort einen Platzhalter zu geben und zu sagen: "Setzen Sie Ihr gut gelesenes Passwort an diese Stelle".
Moshe Beeri

2
Dieser Befehl mit der üblichen Einschränkung, dass Sie ihn nur für Anwendungen verwenden möchten, bei denen die Sicherheit keine Rolle spielt, z. B. Entwickler oder Qualitätssicherung.
Unschuldig

Wenn es auf dem Mac nicht funktioniert, versuchen Sie, 'root' @ '%' durch 'root' @ 'localhost' oder / etc / hosts Name des Computers zu ändern, dem Sie Berechtigungen gewähren.
Moshe Beeri

2
Vergessen Sie nicht, dies nach:FLUSH PRIVILEGES;
Däne

44

Sie müssen einige Schritte ausführen, um sicherzustellen, dass zuerst MySQL und dann Root-Benutzer von außen zugänglich sind:

  1. Disable skip-networkingin my.cnf(dh /etc/mysql/my.cnf)

  2. Überprüfen Sie den Wert von bind-addressin my.cnf. Wenn dieser Wert auf gesetzt ist, 127.0.0.1können Sie ihn so ändern 0.0.0.0, dass der Zugriff von allen IP-Adressen oder von jeder IP-Adresse aus möglich ist, von der aus Sie eine Verbindung herstellen möchten.

  3. Gewähren Sie dem Root-Benutzer Remotezugriff von einer beliebigen IP-Adresse (oder geben Sie Ihre IP-Adresse anstelle von an %).

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
  4. Starten Sie den MySQL-Dienst neu:

    sudo service mysql restart

Sie müssen auch den MySQL-Port 3306 über die Firewall öffnen, da sonst keine Remote-Clients eine Verbindung herstellen können
David Okwii,

Nur eine kurze Mitteilung zu Punkt 2 von @Khashayar: 0.0.0.0 bedeutet eine beliebige IPv4-Adresse. * bedeutet JEDE Adresse, sei es IPv4 oder IPv6.
Gustavo Pinsard

34
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

*.* = DB.TABLE Sie können den Benutzer auf eine bestimmte Datenbank und eine bestimmte Tabelle beschränken.

'root'@'%'Sie können root mit jedem Benutzer ändern, den Sie erstellt haben, und% soll alle IP-Adressen zulassen. Sie können es einschränken, indem Sie auch% .168.1.1 usw. ändern.


Wenn sich das nicht beheben lässt, ändern Sie auch my.cnf oder my.ini und kommentieren Sie diese Zeilen

bind-address = 127.0.0.1zu #bind-address = 127.0.0.1
und
skip-networkingzu#skip-networking

  • Starten Sie MySQL neu und wiederholen Sie die obigen Schritte erneut.

Raspberry Pi, ich fand Bindungsadressenkonfiguration unter \etc\mysql\mariadb.conf.d\50-server.cnf


2
Nur Antwort, die das *.*und erklärt 'user'@'address'. Vielen Dank! :)
Philipp

ALLES gewähren . lädt Hacker ein.
Rick James

Deshalb erklärte ich *. *
Wasim A.

8

Diese SQL-Zuschüsse, die die anderen gemeinsam nutzen, funktionieren. Wenn Sie immer noch nicht auf die Datenbank zugreifen können, haben Sie möglicherweise nur eine Firewall-Einschränkung für den Port. Es hängt von Ihrem Servertyp (und allen dazwischen liegenden Routern) ab, wie die Verbindung hergestellt wird. Öffnen Sie den eingehenden TCP-Port 3306 und geben Sie ihm eine ähnliche Zugriffsregel für externe Computer (alle / Subnetz / einzelne IP / etc.).


4

Öffnen Sie die /etc/mysql/mysql.conf.d/mysqld.cnfDatei und kommentieren Sie die folgende Zeile:

#bind-address = 127.0.0.1

Arbeiten an Ubuntu 19.4
Ngô Văn Thao

3

In meinem Fall habe ich versucht, eine Verbindung zu einem Remote-MySQL-Server unter Cent OS herzustellen. Nach vielen Lösungen (Gewähren aller Berechtigungen, Entfernen von IP-Bindungen, Aktivieren des Netzwerks) wurde das Problem immer noch nicht gelöst.

Wie sich herausstellte, stieß ich bei der Suche nach verschiedenen Lösungen auf iptables, wodurch mir klar wurde, dass der MySQL-Port 3306 keine Verbindungen akzeptierte.

Hier ist ein kleiner Hinweis, wie ich dieses Problem überprüft und behoben habe.

  • Überprüfen, ob der Port Verbindungen akzeptiert:
Telnet (MySQL Server IP) [PortNo]

- Hinzufügen einer IP-Tabellenregel, um Verbindungen am Port zuzulassen:

iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

-Würde dies nicht für die Produktionsumgebung empfehlen, aber wenn Ihre iptables nicht richtig konfiguriert sind, kann das Problem durch Hinzufügen der Regeln möglicherweise noch nicht behoben werden. In diesem Fall sollte Folgendes getan werden:

Service Iptables stoppen

Hoffe das hilft.


3

Zwei schritte:

  1. Benutzer mit Platzhalter einrichten:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    Fügen Sie Folgendes hinzu:
    bind-address=0.0.0.0

Starten Sie den Server neu, Sie sollten keine Probleme haben, eine Verbindung zu ihm herzustellen.


Im Anschluss erhalten Sie "FEHLER 1827 (HY000): Der Kennwort-Hash hat nicht das erwartete Format. Überprüfen Sie, ob der richtige Kennwortalgorithmus mit der Funktion PASSWORD () verwendet wird." Können Sie erklären, was ich hier falsch mache?
lampShadesDrifter

2

Mit MySQL 8 und einer höheren Version können Sie keinen Benutzer hinzufügen, indem Sie Berechtigungen erteilen. es bedeutet mit dieser Abfrage:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysql gibt diesen Fehler zurück:

FEHLER 1064 (42000): In Ihrer SQL-Syntax ist ein Fehler aufgetreten. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'IDENTIFIED BY' geschriebenes Passwort 'in Zeile 1

Dies bedeutet, dass Sie keinen Root-Benutzer für% domain haben. Sie müssen also zuerst den Benutzer einfügen und dann folgende Berechtigungen erteilen:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

Vergessen Sie nicht, Passwörter durch Ihre spezifischen Passwörter zu ersetzen.


0

Das hat bei mir funktioniert. Aber es gab ein seltsames Problem, das selbst ich zuerst versuchte, diejenigen, die es nicht betraf. Ich habe die phpmyadmin-Seite aktualisiert und sie irgendwie zum Laufen gebracht.

Wenn Sie Zugriff auf local-xampp-mysql benötigen. Sie können zu xampp-shell -> öffnende Eingabeaufforderung gehen.

Dann mysql -uroot -p --port = 3306 oder mysql -uroot -p (wenn ein Passwort festgelegt ist). Danach können Sie diesen Zugriff von der MySQL-Shell-Seite aus gewähren (kann auch von localhost / phpmyadmin aus funktionieren).

Fügen Sie diese einfach hinzu, wenn jemand dieses Thema findet und Anfängerprobleme hat.


0

Ubuntu 18.04

Installiere und stelle sicher, dass mysqld uns läuft.

Gehen Sie in die Datenbank und richten Sie den Root-Benutzer ein:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Bearbeiten Sie die mysqld-Berechtigungen und starten Sie neu:

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

Testen Sie von einem anderen Computer aus. Der obvs-Port (3306) auf dem mysqld-Computer muss die Verbindung vom Testcomputer zulassen.

mysql -u root -p -h 123.456.789.666

Die zusätzliche "Sicherheit" von MySql hilft der Sicherheit überhaupt nicht, sie kompliziert und verschleiert sie nur, es ist jetzt tatsächlich einfacher, sie zu vermasseln als früher, als Sie nur ein wirklich langes Passwort verwendet haben.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.