Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiki:datenbanken

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
wiki:datenbanken [2017/12/11 10:07] – [Benutzer und Passwörter] pulsarwiki:datenbanken [2023/11/03 14:19] (aktuell) – [Benutzer und Passwörter] techguru
Zeile 1: Zeile 1:
 +====== Datenbanken ======
 +
 +Hier habe ich Informationen über die Standard Datenbanken unter Linux zusammen getragen. Hiermit meine ich die Datenbanken Software welche sich out of the Box über die Paketverwaltung installieren lässt.
 +
 +
 +===== MariaDB / MySQL =====
 +
 +MySQL speichert seine Daten im Verzeichnis ''/var/lib/mysql/''.
 +''.mysql_history'' wird im User-Verz. abgelegt.
 +
 +Unter Suse sollte man folgendes Kommando ausführen um die DB in einer produktiven Umgebung abzusichern:
 +
 +  mysql_secure_installation
 +
 +
 +Einige Kommandos unter Debian / SUSE:
 +
 +<code>
 +dpkg-reconfigure mysql-server-5.0 =PW festlegen
 +mysqladmin password                     =PW festlegen (SUSE)
 +mysql_setpermission =PW zurücksetzen
 +mysql -uroot -p =anmelden wenn PW gesetzt
 +mysql_upgrade -p =Optimieren und Reparieren (SUSE)
 +</code>
 +
 +
 +==== Benutzer und Passwörter ====
 +
 +Mit der folgenden Anweisung wird der Datenbank-Benutzer wordpressuser angelegt.
 +Er darf sich mit dem Host localhost verbinden und soll das Kennwort geheim verwenden.
 +Standardmäßig verfügt der Benutzer nach der Einrichtung über keine Datenbank-Berechtigungen.
 +
 +  create user 'wordpressuser'@'localhost' identified by 'geheim';
 +
 +Nun sollen ihm alle Rechte für die Datenbank wordpressdb gewährt werden, was mit folgender Anweisung geschieht:
 +
 +  grant all on wordpressdb.* to 'wordpressuser'@'localhost';
 +
 +Jetzt ist der Benutzer zur Nutzung der Datenbank wordpressdb berechtigt und kann z. B.
 +neue Tabellen anlegen und diese mit Daten füllen. Außerdem darf er seine Datenbank löschen.
 +
 +Den neuen Benutzer könnte man alternativ auch mit folgender Anweisung in einem Schritt anlegen
 +und ihm die Rechte für seine Datenbank gewähren:
 +
 +  
 +  grant all on wordpressdb.* to 'wordpressuser'@'mywordpresspage.lan.de' identified by 'mypasswort';
 +
 +
 +root pw ändern:
 +
 + mysql -u root
 +
 +<code>
 + UPDATE mysql.user SET Password = PASSWORD('newpwd')
 + ->     WHERE User = 'root';
 + FLUSH PRIVILEGES;
 +</code>
 +
 +
 +=== MySQL-Benutzer löschen ===
 +
 +Den gerade angelegten Benutzer kannst du mit folgender Anweisung löschen:
 +
 +  drop user 'simon'@'localhost';
 +
 +
 +Das Verwalten von Benutzern und Rechten ist mit folgenden Befehlen möglich:
 +
 +  GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY 'passwort';
 +
 +Dies legt einen neuen Benutzer an. In unserem Beispiel werden dem Benutzer NeuerUser dabei alle Rechte erteilt.
 +Analog wird ein Benutzer "unbrauchbar" gemacht, indem ihm mit dem REVOKE-Befehl alle Rechte entzogen werden.
 +Der GRANT-Befehl kann auch nachträglich zum Zuweisen von Rechten benutzt werden:
 +
 +  GRANT Recht ON Was TO UserName;
 +
 +Vergibt ein Recht. Dabei kann für Recht eingesetzt werden:
 +
 +  ALL PRIVILEGES, FILE, RELOAD, ALTER, INDEX, SELECT, CREATE,
 +  INSERT, SHUTDOWN, DELETE, PROCESS, UPDATE, DROP, REFERENCES, USAGE
 +
 +Für Was kann ein Tabellenname oder Datenbankname.* (dann gilt das Recht für alle Tabellen dieser Datenbank)
 +eingesetzt werden.
 +
 +Der Zusatz ''WITH GRANT OPTION'' beim GRANT-Befehl bewirkt, dass der Benutzer seine Rechte
 +an andere weitergeben darf.
 +Das Gegenteil von ''GRANT'' ist ''REVOKE''. Mit ''REVOKE'' werden Rechte entzogen:
 +
 +  REVOKE Recht ON Was FROM UserName;
 +
 +Ansonsten gilt für ''REVOKE'' das gleiche wie für ''GRANT''.
 +In mySQL kann man einem User zunächst alle Rechte entziehen:
 +
 +  REVOKE ALL PRIVILEGES ON * FROM UserName;
 +
 +um ihm dann gezielt wieder bestimmte Rechte zu erteilen. Um sich anzeigen zu lassen,
 +welche Rechte jemand hat, gibt man den Befehl ein:
 +
 +  SHOW GRANTS FOR Benutzer;
 +
 +Nach Änderungen an den Benutzern und Rechten wird der folgende Befehl ausgeführt:
 +
 +  flush privilegs;
 +
 +
 +=== Welche MySQL Benutzer gibt es? ===
 +
 +Dies steht in der mysql DB in der Tabelle ''user'', welche immer vorhanden ist.
 +
 +  SELECT user, host, IF(LENGTH(password)>0, password, authentication_string) AS password FROM mysql.user;
 +===== DB Backup =====
 +
 +Log dich als root in MYSQL ein und lass dir die Tabellen anzeigen.
 +
 +  SHOW DATABASES;
 +  SHOW TABLES;
 +
 +Ein Dump über die alle Datenbanken:
 +
 +  mysqldump -uroot -p<passwort> --all-databases > backup_komplett.sql
 +
 +
 +==== automatisierte Backups ====
 +
 +Bei automatisierten Backups per Shell Skript möchte man kein Passwort eingeben. Dies erreicht man indem man das Passwort mit dem Schalter ''-p'' übergibt. Hier sollte dann das Passwort ohne Leerzeichen direkt am ''-p'' mit dran hängen.
 +Manchmal kommt es vor das ein MySQLdump den folgenden Fehler zurück gibt:
 +
 +  mysqldump: Got error: 1045: "Access denied for user 'icingaweb@idoicinga2'@'localhost' (using password: YES)" when trying to connect
 +
 +Hier hilft es den Schalter --single-transaction mit anzugeben damit das Backup-Skript den MySQL Dump zieht.
 +
 +  mysqldump -uicingaweb -pgeheim --databases icinga2 --single-transaction  > icinga2_ido.sql
 +
 +
 +
 +=== Export: ===
 +
 +Dazu nutzen wir ''mysqldump'':
 +
 +  mysqldump -uUSER -pPASSWD --allow-keywords --opt DB > DB.sql
 +
 +Verfeinerung: direkt mit ''gzip'' packen:
 +
 +  mysqldump -uUSER -pPASSWD --allow-keywords --opt DB | gzip > DB.sql.gz
 +
 +
 +
 +== bei anschließenden Fehlern beim exportieren ==
 +
 +Find your debian-sys-maint password in /etc/mysql/debian.cnf.
 +
 +Einloggen in mysql und dann nutze:
 +
 +<code>
 +GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '<password>' WITH GRANT OPTION;
 +Replace <password> with your debian-sys-maint password.
 +SHOW GRANTS for 'debian-sys-maint'@'localhost';
 +</code>
 +
 +bei weiteren Fehlern:
 +
 +  dpkg-reconfigure mysql-server-5.0
 +
 +
 +=== Import: ===
 +
 +Die exportierte Datei liegt nun auf dem neuen Server / Webspace.
 +Dazu nutzen wir mysql:
 +
 +  mysql -uUSER -pPASSWD DB < DB.sql
 +
 +Verfeinerung: direkt mit gzip entpacken:
 +
 +  gzip -dc DB.sql.gz | mysql -uUSER -pPASSWD DB
 +
 +Falls das Backup / dump nicht einzuspielen geht, sollte die betreffende DATABASE nochmal mit ''DROP'' richtig
 +entfernt werden. Dann mit ''CREATE'' nochmal neu erstellen und ein weiteres mal einspielen.
 +
 +kompletten dump einspielen mit mehreren DB's:
 +
 +  mysql -uroot < allDBs01.sql
 +
 +Auf mysql promt(shell)
 +
 +  show DATABASES;
 +
 +Wenn tilab nicht vorhanden, dann erstelle sie:
 +
 +  create database tilab;
 +
 +erst dann kann man die neue DB einspielen:
 +
 +  mysql -uroot tilab < tilab.sql
 +
 +
 +
 +
 +==== Datenbanken und Tabellen erstellen ====
 +
 +Um Tabellen in MySQL zu erstellen wird der SQL-Befehl CREATE TABLE verwendet.
 +Dabei wird zuerst ein Tabellenname angegeben. Hierbei darf der Tabellennamen nicht aus einem
 +MySQL Schlüsselwort  bestehen. Danach folgt in Klammern eine Aufzählen von Spalten,
 +die untereinander mit einem Kommata getrennt sind. Jede Spaltenangabe besteht dabei aus den Namen
 +und den Typ der Spalte, kann aber auch zusätzliche Optionen wie NOT NULL, PRIMARY KEY
 +und AUTO_INCREMENT besitzen. Wie jeder SQL-Befehl muss auch ein CREATE TABLE mit einem Semikolon
 +abgeschlossen werden. Ein Beispielquery für das erstellen einer Tabelle könnte wie folgt aussehen.
 +
 +CREATE TABLE News (
 +    ID INT AUTO_INCREMENT PRIMARY KEY,
 +    Autor VARCHAR(30) NOT NULL,
 +    Titel VARCHAR(50) NOT NULL,
 +    Inhalt TEXT NOT NULL,
 +    Datum DATETIME NOT NULL
 +);
 +
 +
 +=== Anzeigen ===
 +
 +Tabellen von DB tilab:
 +
 +  use tilab;
 +  show tables;
 +
 +den Inhalt der Tabellen kann man sich nun mit:
 +
 +  select * from personal;
 +
 +anzeigen lassen. Hier wird mit * der komplette Inhalt der Tabelle personal angezeigt. 
 +
 +Genauere Auswahl aus einer Tabelle
 +
 +  select 3 from personal where name = "Hafer";
 +
 +
 +=== Entfernen von Einträgen ===
 +
 +eine Datenbank kann mit ''drop'' gelöscht werden:
 +
 +  DROP DATABASE tilabalr;
 +  CREATE DATABASE tilab;
 +
 +eine Tabelle kann genauso gelöscht werden, vorher Datenbank auswählen:
 +
 +  use tilab;
 +  DROP TABLE mlist_0;
 +  CREATE TABLE mlist_0;
 +
 +==== MySQL DB optimieren =====
 +
 +<code>
 +mysqlcheck --auto-repair icinga -uroot -p
 +mysqlcheck --auto-repair --all-databases -uroot -p
 +mysqlcheck [options] db_name [tables]
 +mysqlcheck [options] --databases db_name1 [db_name2 db_name3...]
 +mysqlcheck [options] --all-databases
 +</code>
 +
 +Wenn Sie auf db_name folgend keine Tabellen aufführen oder die Optionen ''--databases'' oder ''--all-databases'' verwenden, dann werden ganze Datenbanken überprüft.
 +
 +
 +===== Uhrzeit und Timezone =====
 +
 +Die Zeitzone innerhalt der DB abfragen, unten wird gezeigt das die Systemzeit verwendet wird, es sollte also gleich der Zeit sein die ''date'' auf der Bash zurück liefert.
 +<code>
 +MariaDB [(none)]> SELECT @@global.time_zone, @@session.time_zone;
 ++--------------------+---------------------+
 +| @@global.time_zone | @@session.time_zone |
 ++--------------------+---------------------+
 +| SYSTEM             | SYSTEM              |
 ++--------------------+---------------------+
 +1 row in set (0.00 sec)
 +</code>
 +
 +Das aktuelle Datum und Uhrzeit auf der MariaDB Shell abfragen:
 +
 +<code>
 +MariaDB [(none)]> select now();
 ++---------------------+
 +| now()               |
 ++---------------------+
 +| 2019-10-29 14:30:41 |
 ++---------------------+
 +1 row in set (0.00 sec)
 +</code>
 +
 +
 +===== PostgreSQL =====
 +
 +Pfad zur Datenbank:
 +
 +  /var/lib/pgsql/data
 +
 +Login auf DB-shell mit:
 +
 +  psql -U admin -d zenworks
 +
 +