Können Sie in MySQL "su -"?

7

Kann ich dies tun, wenn ich Root in einer MySQL-Datenbank habe und die Berechtigungen eines normalen Benutzers ohne Verwendung seines Kennworts löschen möchte? Wenn das so ist, wie? Denken Sie # su - usernamean Unix. Grundsätzlich möchte ich nur vermeiden, dass ihr Passwort benötigt wird, damit sie ihre Berechtigungen bei ihrem Benutzer testen können. In postgres könnte ich einfach eine Ident-Authentifizierung für den System-Root-Benutzer zulassen, um die Kennwortauthentifizierung zu umgehen. Der Grund, warum ich dies brauche, ist, dass ich in der Lage bin, ein Benutzerproblem zu reproduzieren, indem ich sie bin. Wenn ich sie nicht bin, ist keine genaue Reproduktion möglich. Ich kann natürlich nach ihrem Passwort fragen, aber das dauert länger als das Umgehen.

Xenoterracid
quelle

Antworten:

4

Ich habe gerade festgestellt, dass es Ihnen nichts ausmacht, den Benutzer beim Anmelden zu sperren.

  1. Sichern Sie die Tabelle mysql.user (zumindest das Hash-Passwort des Benutzers).
  2. Setzen Sie ihr Passwort auf etwas, das Sie kennen: UPDATE mysql.user SET password=PASSWORD('new password') WHERE user='username' AND host='hostname';
  3. Melden Sie sich als sie an
  4. Setzen Sie ihr Passwort wieder auf das, was es war: UPDATE mysql.user SET password='saved password hash' WHERE user='username' AND host='hostname';

... müssen Sie möglicherweise flush privileges;nach der Bearbeitung der Tabelle mysql.user.

Joe
quelle
möglich ... aber nicht sicher, ob es in allen Fällen funktionieren würde ... wir machen so etwas mit vielen anderen Sachen.
Xenoterracide
Das größte Problem bei dieser Methode ist, dass Apps, die die Datenbank verwenden, vorübergehend unterbrochen werden.
Xenoterracide
@xenoterracide: Entschuldigung, ich kann mir keinen besseren Weg vorstellen ... es ist nicht wie bei Postgres, wo Sie die Rechte eines Benutzers einfach jemand anderem zuweisen können.
Joe
3

Mit der Einführung von Proxy-Benutzern ist es möglich, einen Benutzer ab MySQL 5.5.7 zu emulieren . Ich hatte dies noch nie zuvor getan und habe es daher mit dem Testauthentifizierungs-Plugin ausprobiert , da Proxy-Benutzer anscheinend nur mit aktivierten Authentifizierungs-Plugins arbeiten. Hier sind die Schritte, die ich unternommen habe.

Erste Schritte als root:

  • mysql> INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';
  • mysql> SHOW PLUGINS; Geben Sie hier die Bildbeschreibung ein
  • Erstellen Sie einen Benutzer zum Emulieren (in Ihrem Fall ist er bereits vorhanden):

    mysql> GRANT ALL PRIVILEGES ONdtest @localhostIDENTIFIED BY 'mypass';

  • 'Proxy'-Benutzer erstellen:

    mysql> CREATE USER proxy@localhost IDENTIFIED WITH test_plugin_server AS 'dtest';

  • mysql> GRANT PROXY ON dtest@localhost TO proxy@localhost;

  • mysql> FLUSH PRIVILEGES;

Versuchen Sie nun, sich mit user : proxy, password: dtest(der 'AS'-Variablen des Proxy-Benutzers) anzumelden:

  • $ mysql -uproxy -pdtest
  • mysql> SELECT USER(), CURRENT_USER();

    Geben Sie hier die Bildbeschreibung ein

  • mysql> SHOW GRANTS; Geben Sie hier die Bildbeschreibung ein

Derek Downey
quelle
2

Heutzutage hat MySQL kein Root-Passwort und verwendet stattdessen das auth_socketPlugin, um zu überprüfen, ob der mit dem Socket verbundene Benutzer der Root-Benutzer des Systems ist. Sie können dieselbe Technik verwenden, um Ihr Problem zu lösen, wenn Sie mit Unix-Konten für alle Benutzer einverstanden sind, was alle Arten von Möglichkeiten eröffnet, z. B. eine einfache Speicherung von Binärdateien!

Zuerst würden Sie ein Unix-Konto für den Benutzer hinzufügen:

root: adduser testuser

Fügen Sie dann einen passenden MySQL-Benutzer hinzu (könnte automatisch in einem adduser.local Skript erfolgen):

CREATE USER 'testuser'@'localhost' IDENTIFIED WITH auth_socket;

Wechseln Sie nun zum Benutzer (kein Passwort erforderlich, wenn Sie als root ausgeführt werden):

root: su testuser

Stellen Sie als Benutzer eine Verbindung zu MySQL her (kein Kennwort erforderlich, da Sie als dieser Benutzer angemeldet sind):

testuser: mysql -u $USER (oder -you testuser anstatt die Umgebungsvariable zu verwenden)

Es ist am besten, den -uBenutzerparameter anzugeben, da die automatische Benutzerkomfortroutine des MySQL-Clients nicht in der Lage ist, dies selbst herauszufinden. Wenn Sie beispielsweise von Benutzer zu Benutzerkonto wechseln, wird aus irgendeinem Grund der erste Benutzer verwendet.

malhal
quelle
1

Ich kenne keinen bestimmten Weg, um das Äquivalent von zu replizieren. suSie benötigen jedoch kein Kennwort. Aufgrund der Art und Weise, wie MySQL die Authentifizierung verarbeitet, können Sie auf jedem Computer ein anderes (oder gar kein) Kennwort festlegen das ist eingeloggt von.

Joe
quelle
Dies setzt natürlich voraus, dass MySQL tatsächlich über einen Port abgehört wird und nicht nur über einen Unix-Socket zugänglich ist.
Joe
In diesem Fall handelt es sich nur um einen Computer, und ich möchte das Benutzerkennwort nicht ändern, da dadurch die vorhandenen bereitgestellten Apps beschädigt werden.
Xenoterracide
@xenoterracide: Können Sie Netzwerk-Sockets aktivieren und Datenverkehr von einem anderen Computer zulassen? Behalten Sie natürlich eine hostbasierte Firewall bei, damit Sie nur von dem von Ihnen festgelegten Computer aus eine Verbindung herstellen können. Wenn Sie bereits eine Verbindung von einem Remotecomputer aus herstellen, richten Sie einfach andere Regeln für die Verbindung von localhost aus ein.
Joe
Nun, ich kann technisch tun, was ich will, aber was ich tun muss, ist zu replizieren, was ein idiotischer Kunde tut. Ich habe nur versucht, es zu tun, ohne den idiotischen Kunden nach dem Passwort zu fragen. Es sollte bereits Netzwerk-Sockets haben, und ich kann die Firewall öffnen, wenn ich möchte, usw. usw. Technisch gesehen spielt dies morgen überhaupt keine Rolle. An dieser Stelle ist es ein "für zukünftige Referenz". In Postgres müsste ich nur die Passwortauthentifizierung vorübergehend deaktivieren, ugh ... es ist so viel besser.
Xenoterracide
Ich habe keine Installation Ich würde gerne opfern, wenn es nicht funktioniert ... aber wenn Sie den Primärschlüssel auf mysql.user (derzeit Benutzer + Host) ablegen und einen zweiten Datensatz mit einem alternativen Passwort hinzufügen, Sie Möglicherweise finden Sie heraus, wie sie mit der Authentifizierung umgehen. Wenn sie das neue Kennwort hashen und auswählen, wo (Benutzer, Host, Kennwort_Hash) übereinstimmt, funktioniert dies möglicherweise. Wenn sie ein Kennwort auswählen, wo (Benutzer, Host) und Vergleichen Sie dann die Hashes, es wird nicht.
Joe