MySQL Datenbank und Benutzer anlegen mit Rust
Dieses Programm erstellt eine MySQL-Datenbank und einen Benutzer mit Zugriff ausschließlich auf diese Datenbank, ohne globale Rechte.
Falls Benutzer oder Datenbank bereits existieren, werden sie gelöscht und neu erstellt.
Cargo.toml
[dependencies]
mysql = "24.0"
main.rs
// Importiere notwendige Bibliotheken
use mysql::prelude::*;
use mysql::{Opts, OptsBuilder, Pool};
// Hauptfunktion
fn main() -> Result<(), Box<dyn std::error::Error>> {
// Sammle die Befehlszeilenargumente
let args: Vec<String> = std::env::args().collect();
// Überprüfe, ob die richtige Anzahl von Argumenten vorhanden ist
if args.len() != 4 {
// Zeige eine Nachricht zur korrekten Verwendung an
eprintln!("Verwendung: {} <BENUTZERNAME> <DATENBANKNAME> <PASSWORT>\n\n\
Dieses Programm erstellt eine MySQL-Datenbank und einen Benutzer mit\n\
Zugriff ausschließlich auf diese Datenbank, ohne globale Rechte.\n\n\
Falls Benutzer oder Datenbank bereits existieren, werden sie gelöscht und neu erstellt.", args[0]);
// Beende das Programm mit einem Fehlercode
std::process::exit(1);
}
// Extrahiere die Befehlszeilenargumente für Benutzername, Datenbankname und Passwort
let benutzername = &args[1];
let datenbankname = &args[2];
let passwort = &args[3];
// Setze das Root-Passwort für MySQL (Anpassen notwendig)
let root_passwort = "mysql-root-passwort"; // Hier das Root-Passwort eintragen
// Konstruiere die Optionen für die Verbindung zum MySQL-Server
let builder = OptsBuilder::new()
.user(Some("root"))
.pass(Some(root_passwort))
.ip_or_hostname(Some("localhost"))
.tcp_port(3306) // MySQL-Port
.db_name(Some("")); // Leerer Datenbankname
// Erstelle eine Pool-Verbindung zum MySQL-Server
let pool = Pool::new(Opts::from(builder))?;
// Verbindung zur Datenbank herstellen, um Benutzer und Datenbank zu verwalten
let mut conn = pool.get_conn()?;
// Lösche den Benutzer, falls er bereits existiert
conn.query_drop(format!("DROP USER IF EXISTS '{}'", benutzername))?;
// Lösche die Datenbank, falls sie bereits existiert
conn.query_drop(format!("DROP DATABASE IF EXISTS `{}`", datenbankname))?;
// Erstelle die Datenbank mit der richtigen Zeichensatz-Codierung
conn.query_drop(format!(
"CREATE DATABASE {} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci",
datenbankname
))?;
// Erstelle einen Benutzer mit Zugriffsrechten auf die Datenbank
let grant_query = format!(
"GRANT ALL PRIVILEGES ON `{}`.* TO '{}'@'localhost' IDENTIFIED BY '{}'",
datenbankname, benutzername, passwort
);
conn.query_drop(grant_query)?;
// Gebe eine Erfolgsmeldung aus
println!("Aktion erfolgreich abgeschlossen.");
// Rückgabewert für die Hauptfunktion
Ok(())
}