So sichern Sie MySQL-Kontoinformationen elegant

So sichern Sie MySQL-Kontoinformationen elegant

Vorwort:

Ich bin kürzlich auf das Problem der Instanzmigration gestoßen. Nachdem die Daten migriert wurden, mussten auch die Datenbankbenutzer und -berechtigungen migriert werden. Wenn ich ein logisches Backup durchführe, schließe ich normalerweise die MySQL-Systembibliothek aus, sodass das Backup keine Informationen zu Datenbankbenutzern enthält. Wenn Sie zu diesem Zeitpunkt benutzerbezogene Informationen migrieren möchten, können Sie die folgenden drei Lösungen verwenden. In ähnlicher Weise können wir die folgenden drei Lösungen auch verwenden, um datenbankkontobezogene Informationen zu sichern. (Diese Lösung ist für MySQL 5.7, bei anderen Versionen sind die Unterschiede etwas anders)

1.mysqldump exportiert benutzerbezogene Informationen logisch

Wir wissen, dass das Kennwort und die Berechtigungsinformationen des Datenbankbenutzers in der Systembibliothek MySQL gespeichert sind. Verwenden Sie mysqldump, um die relevanten Tabellendaten zu exportieren. Wenn Benutzer migriert werden müssen, können wir diese Daten bei Bedarf in eine andere Instanz einfügen. Lassen Sie uns dies demonstrieren:

#Exportieren Sie nur die Benutzer-, Datenbank- und Tabellen_priv in der MySQL-Datenbank. #Wenn Sie über die Berechtigungen für die Spalten verfügen, können Sie die Daten der Tabelle „columns_priv“ exportieren. #Wenn GTID in der Datenbank aktiviert ist, fügen Sie beim Exportieren am besten --set-gtid-purged=OFF hinzu.
mysqldump -uroot -proot mysql Benutzer db tables_priv -t --skip-extended-insert > /tmp/user_info.sql

#Spezifische Informationen exportieren--
-- Daten für Tabelle „Benutzer“ ausgeben
--

SPERRT TABELLEN `Benutzer` SCHREIBEN;
/*!40000 ALTER TABLE `Benutzer` DISABLE KEYS */;
INSERT INTO `user` VALUES ('%', 'root', 'Y ...
81F5E21E35407D884A6CD4A731AEBFB6AF209E1B','N','2019-03-06 03:03:15',NULL,'N');
INSERT INTO `user` VALUES ('localhost','mysql.session','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','',_binary '',_binary '',0,0,0,0,'mysql_na
tive_password','*DIES IST KEIN GÜLTIGES PASSWORT, DAS HIER VERWENDET WERDEN KANN','N','2019-03-06 02:57:40',NULL,'Y');
INSERT INTO `user` VALUES ('localhost','mysql.sys','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','_binary '',_binary '',0,0,0,0,'mysql_native
_password','*DIES IST KEIN GÜLTIGES PASSWORT, DAS HIER VERWENDET WERDEN KANN','N','2019-03-06 02:57:40',NULL,'Y');
INSERT INTO `user` VALUES ('%','test','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','',_binary '',_binary '',0,0,0,0,'mysql_native_password','*'
94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29','N','2019-04-19 06:24:54',NULL,'N');
INSERT INTO `user` VALUES ('%', 'lesen', 'J', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', ''', '_binary', '_binary', 0,0,0,0, 'mysql_native_password', '*'
2158DEFBE7B6FC24585930DF63794A2A44F22736','N','2019-04-19 06:27:45',NULL,'N');
INSERT INTO `user` VALUES ('%','test_user','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','_binary '',_binary '',0,0,0,0,'mysql_native_password
d','*8A447777509932F0ED07ADB033562027D95A0F17','N','2019-04-19 06:29:38',NULL,'N');
/*!40000 ALTER TABLE `Benutzer` ENABLE KEYS */;
TABELLEN ENTSPERREN;

--
-- Daten für Tabelle „db“ ausgeben
--

SPERRT TABELLEN `db` SCHREIBEN;
/*!40000 ALTER TABLE `db` SCHLÜSSEL DISABLE */;
EINFÜGEN IN „db“ WERTE ('localhost', 'performance_schema', 'mysql.session', 'J', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N');
EINFÜGEN IN „db“ WERTE ('localhost', 'sys', 'mysql.sys', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y');
EINFÜGEN IN „db“ WERTE ('%', 'test_db', 'test', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'Y', 'N', 'N', 'Y', 'N', 'N', 'Y', 'N', 'N', 'Y', 'N', 'N');
/*!40000 ALTER TABLE `db` SCHLÜSSEL AKTIVIEREN */;
TABELLEN ENTSPERREN;

--
-- Daten für Tabelle „tables_priv“ ausgeben
--

SPERRT TABELLEN `tables_priv` SCHREIBEN;
/*!40000 ALTER TABLE `tables_priv` SCHLÜSSEL DISABLEN */;
INSERT INTO `tables_priv` VALUES ('localhost', 'mysql', 'mysql.session', 'Benutzer', 'boot@connecting host', '0000-00-00 00:00:00', 'Auswählen', '');
INSERT INTO `tables_priv` VALUES ('localhost', 'sys', 'mysql.sys', 'sys_config', 'root@localhost', '2019-03-06 02:57:40', 'Auswählen', ');
INSERT INTO `tables_priv` VALUES ('%','test_db','test_user','t1','root@localhost','0000-00-00 00:00:00','Auswählen,Einfügen,Aktualisieren,Löschen','');
/*!40000 ALTER TABLE `tables_priv` SCHLÜSSEL AKTIVIEREN */;
TABELLEN ENTSPERREN;

#Fügen Sie die erforderlichen Daten in die neue Instanz ein, um denselben Benutzer und dieselben Berechtigungen zu erstellen

2. Benutzerdefinierter Skriptexport

Verketten Sie zunächst die Anweisungen, um einen Benutzer zu erstellen:

WÄHLEN
	KONKAT(
		'Benutzer erstellen \'',
  Benutzer,
  '\'@\'',
  Gastgeber,
  '\''
  ' IDENTIFIZIERT DURCH PASSWORT \'',
  Authentifizierungszeichenfolge,
		'\';'
	) AS CreateUserQuery
AUS
	mysql.`Benutzer`
WO
	`Benutzer` NICHT IN (
		„mysql.sitzung“,
		'mysql.sys'
	);
	
#Ergebnis: Nach der Ausführung in der neuen Instanz kann ein Benutzer mit demselben Passwort erstellt werden mysql> SELECT
  -> CONCAT(
  -> 'Benutzer erstellen \'',
  -> Benutzer,
  -> '\'@\'',
  -> Gastgeber,
  -> '\''
  -> ' IDENTIFIZIERT DURCH PASSWORT \'',
  -> Authentifizierungszeichenfolge,
  -> '\';'
  -> ) AS Benutzerabfrage erstellen
  -> VON
  -> mysql.`Benutzer`
  -> WO
  -> `Benutzer` NICHT IN (
  -> "mysql.sitzung",
  -> 'mysql.sys'
  -> );
+-----------------------------------------------------------------------------------------------------------------+
| Benutzerabfrage erstellen |
+-----------------------------------------------------------------------------------------------------------------+
| Benutzer „root“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B“; |
| Benutzer „Test“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29“; |
| Benutzer „read“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*2158DEFBE7B6FC24585930DF63794A2A44F22736“; |
| Benutzer „test_user“@„%“ erstellen, IDENTIFIZIERT DURCH PASSWORT „*8A447777509932F0ED07ADB033562027D95A0F17“; |
+-----------------------------------------------------------------------------------------------------------------+
4 Zeilen im Satz (0,00 Sek.)

Exportieren Sie dann die Benutzerberechtigungen über das Skript:

#Berechtigungsskript exportieren#!/bin/bash 
#Funktion exportiert Benutzerrechte 
 
pwd=root 
expgrants () 
{ 
 mysql -B -u'root' -p${pwd} -N $@ -e "SELECT CONCAT( 'SHOW GRANTS FOR ''', Benutzer, '''@''', Host, ''';' ) AS Abfrage FROM mysql.user" | \
 mysql -u'root' -p${pwd} $@ | \
 sed 's/\(GRANT .*\)/\1;/;s/^\(Grants für .*\)/-- \1 /;/--/{x;p;x;}' 
} 
 
expgrants > /tmp/grants.sql
echo "Berechtigungen löschen;" >> /tmp/grants.sql

#Ergebnis nach der Ausführung des Skripts-- Berechtigungen zum Lesen@% 
GRANT SELECT ON *.* TO 'lesen'@'%';

-- Zuschüsse für root@% 
Gewähren Sie 'root'@'%' alle Privilegien für *.* mit der Gewährungsoption.

-- Zuschüsse für test@% 
GRANT USAGE ON *.* TO 'test'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW ON `test_db`.* TO 'test'@'%';

-- Zuschüsse für test_user@% 
GRANT USAGE ON *.* TO 'Testbenutzer'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE ON `test_db`.`t1` TO 'test_user'@'%';

-- Zuschüsse für mysql.session@localhost 
GRANT SUPER ON *.* TO 'mysql.session'@'localhost';
GRANT SELECT ON `performance_schema`.* TO 'mysql.session'@'localhost';
GRANT SELECT ON `mysql`.`Benutzer` TO 'mysql.session'@'localhost';

-- Berechtigungen für mysql.sys@localhost 
GRANT USAGE ON *.* TO 'mysql.sys'@'localhost';
GRANT TRIGGER ON `sys`.* TO 'mysql.sys'@'localhost';
GRANT SELECT ON `sys`.`sys_config` TO 'mysql.sys'@'localhost';

3.mysqlpump exportiert Benutzer direkt

mysqlpump ist ein Derivat von mysqldump und ebenfalls ein Tool für logische MySQL-Backups. mysqlpump verfügt über mehr Optionen und kann Anweisungen zum Erstellen von Benutzern und Erteilen von Berechtigungen direkt exportieren. Lassen Sie uns dies demonstrieren:

#exclude-databases schließt Datenbanken aus --users gibt Exportbenutzer an exclude-users schließt which users aus #Sie können auch den Parameter --add-drop-user hinzufügen, um eine Drop-User-Anweisung zu generieren #Wenn für die Datenbank GTID aktiviert ist, müssen Sie beim Exportieren --set-gtid-purged=OFF hinzufügen
mysqlpump -uroot -proot --exclude-databases=% --users --exclude-users=mysql.session,mysql.sys > /tmp/user.sql

#Ergebnisse exportieren – Dump erstellt durch MySQL Pump Utility, Version: 5.7.23, linux-glibc2.12 (x86_64)
-- Dump-Startzeit: Freitag, 19. April 2019, 15:03:02 Uhr
-- Serverversion: 5.7.23

SETZEN Sie @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SETZEN Sie @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SETZEN Sie @OLD_SQL_MODE=@@SQL_MODE;
SETZEN Sie SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SETZEN Sie @@SESSION.SQL_LOG_BIN= 0;
SETZEN Sie @OLD_TIME_ZONE=@@TIME_ZONE;
ZEITZONE EINSTELLEN='+00:00';
SETZEN Sie @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SETZEN SIE @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
SETZEN SIE @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
Namen festlegen utf8mb4;
ERSTELLEN SIE BENUTZER 'read'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*2158DEFBE7B6FC24585930DF63794A2A44F22736'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN.
GRANT SELECT ON *.* TO 'lesen'@'%';
ERSTELLEN SIE BENUTZER 'root'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN.
Gewähren Sie 'root'@'%' alle Privilegien für *.* mit der Gewährungsoption.
ERSTELLEN SIE BENUTZER 'test'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN.
GRANT USAGE ON *.* TO 'test'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE, CREATE VIEW, SHOW VIEW ON `test_db`.* TO 'test'@'%';
ERSTELLEN SIE BENUTZER 'test_user'@'%' IDENTIFIZIERT MIT 'mysql_native_password' ALS '*8A447777509932F0ED07ADB033562027D95A0F17'. KEIN PASSWORT ERFORDERLICH. LÄUFT AB. STANDARDKONTO ENTSPERREN.
GRANT USAGE ON *.* TO 'Testbenutzer'@'%';
GRANT SELECT, INSERT, UPDATE, DELETE ON `test_db`.`t1` TO 'test_user'@'%';
SETZE ZEITZONE=@ALTE_ZEITZONE;
SETZE CHARACTER_SET_CLIENT=@ALTER_CHARACTER_SET_CLIENT;
SETZEN SIE CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS;
SETZEN SIE COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION;
SETZEN SIE FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SETZEN SIE UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SETZEN SIE SQL_MODE=@OLD_SQL_MODE;
-- Dump-Endzeit: Fr., 19. April 2019, 15:03:02

#Es ist ersichtlich, dass die Exportergebnisse nur Anweisungen zum Erstellen von Benutzern und Erteilen von Berechtigungen enthalten, was sehr nützlich ist. #Detaillierte Informationen zur Verwendung von mysqlpump finden Sie unter:
https://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html

Zusammenfassen:

Dieser Artikel stellt drei Lösungen zum Exportieren von Datenbankbenutzerinformationen vor. Jede Lösung wird mit einem Skript versehen und demonstriert. Gleichzeitig können diese drei Lösungen leicht gekapselt und als Skripte zum Sichern von Datenbank-Benutzerberechtigungen verwendet werden. Vielleicht hast du andere Lösungen, wie pt-show-grants usw. Du kannst sie gerne weitergeben. Du kannst sie auch gerne sammeln oder in Skripte umwandeln, die für dich besser geeignet sind. Man weiß nie, wann man sie brauchen wird. Besonders wenn viele Benutzer auf einer Instanz sind, wirst du feststellen, dass das Skript nützlicher ist.

Oben finden Sie detaillierte Informationen zum eleganten Sichern von MySQL-Konten. Weitere Informationen zu MySQL-Sicherungskonten finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • So schreiben Sie ein MySQL-Sicherungsskript
  • Eine kurze Analyse der MySQL-Sicherung und -Wiederherstellung
  • Detaillierte Erläuterung der MySQL-Sicherung und -Wiederherstellung
  • MySQL-Lösung für zeitgesteuerte Backups (mithilfe von Linux crontab)
  • Kurze Analyse der geplanten MySQL-Sicherungsaufgaben
  • So sichern Sie das Skript für Linux-Server automatisch (MySQL, Sicherung von Anhängen)
  • Linux sichert regelmäßig die MySQL-Datenbank und löscht vorherige Sicherungsdateien (empfohlen)
  • So implementieren Sie eine geplante automatische Sicherung von MySQL unter CentOS7
  • Codebeispiele für die Sicherung mehrerer MySQL-Datenbanken

<<:  Detaillierte Erläuterung verschiedener Möglichkeiten zur Installation von CMake unter Ubuntu

>>:  Tab-Effekte mit JS schreiben

Artikel empfehlen

Beispiel einer Nginx-Standortübereinstimmungsregel

1. Grammatik Standort [=|~|~*|^~|@] /uri/ { ... }...

Professionelles und nicht-professionelles Webdesign

Zunächst einmal hängt die Gestaltung des Webseiten...

So speichern Sie Bilder in MySQL

1 Einleitung Beim Gestalten einer Datenbank ist e...

Tutorial zum Bereitstellen von JDK und Tomcat auf CentOS7 ohne Schnittstelle

1. Installieren Sie xshell6 2. Stellen Sie eine S...

So implementieren Sie eine geplante Sicherung der CentOS MySQL-Datenbank

Das folgende Skript wird für die geplante Sicheru...

So verwenden Sie Docker zum Erstellen eines privaten pypi-Repositorys

1. Konstruktion 1. Bereiten Sie die Datei htpassw...

Was Sie über Filter in Vue wissen müssen

Inhaltsverzeichnis Vorwort Was ist ein Filter So ...

Was genau passiert im Hintergrund, wenn Sie eine URL eingeben?

Als Softwareentwickler müssen Sie über ein vollst...

Einführung in MySQL-Isolationsebene, Sperre und MVCC

Ziel dieses Artikels ist es, die Beziehung zwisch...