Gentoo Logo

MySQL Einführung

Inhalt:

1.  Mit MySQL zu arbeiten beginnen

Hintergrund

MySQL ist ein populärer Datenbankserver, der in verschiedensten Anwendungengebieten verwendet wird. SQL steht für (S)tructured (Q)uery (L)anguage, welche MySQL verwendet, um mit anderen Programmen zu kommunizieren. Darüber hinaus hat MySQL eigene erweiterte SQL Funktionen, um dem Benutzer weitere Funktionalität zu bieten. In diesem Dokument werfen wir einen Blick auf die initiale MySQL-Installation, das Einrichten der Datenbanken und Tabellen und erzeugen neuer Benutzer. Lassen Sie uns mit der Installation beginnen.

Installation von MySQL

Als erstes stellen Sie sicher, dass sie MySQL auf Ihrem System installiert haben. Für den Fall, dass Sie spezielle Funktionen benötigen, stellen Sie ebenfalls sicher, dass Sie die nötigen USE-Flags aktiviert haben, da diese Ihnen bei der Feinabstimmung Ihrer Installation helfen.

Befehlsauflistung 1.1: MySQL installieren

(Anzeigen verfügbarer USE-Flags)
# emerge --pretend --verbose mysql
(MySQL installieren)
# emerge mysql

Nach erfolgter Installation, werden Sie folgenden Hinweis sehen:

Befehlsauflistung 1.2: Nachricht von einfo zu MySQL

You might want to run:
"emerge --config =dev-db/mysql-[version]"
if this is a new install.

Da dies eine neue Installation ist, führen wir den Befehl aus. Sie müssen ENTER drücken, wenn Sie während der Konfiguration der MySQL-Datenbank danach gefragt werden. Die Konfiguration richtet die Haupt-MySQL-Datenbank ein, welche administrative Informationen wie Datenbanken, Tabellen, Benutzer, Zugriffsrechte und mehr beinhaltet. Die Konfiguration empfiehlt, dass Sie Ihr root-Passwort so früh wie möglich ändern. Wir werden das definitiv tun, andernfalls könnte jemand die Gelegenheit nutzen und unsere Standardinstallation des MySQL-Servers hacken.

Befehlsauflistung 1.3: Konfiguration von MySQL

(Ersetzen Sie [version] mit der Versionsnummer, die sie installiert haben.)
# emerge --config =dev-db/mysql-[version]
 * MySQL DATADIR is /var/lib/mysql
 * Press ENTER to create the mysql database and set proper
 * permissions on it, or Control-C to abort now...

   Preparing db table
   Preparing host table
   Preparing user table
   Preparing func table
   Preparing tables_priv table
   Preparing columns_priv table
   Installing all prepared tables

   To start mysqld at boot time you have to copy support-files/mysql.server
   to the right place for your system

   PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
   To do so, issue the following commands to start the server
   and change the applicable passwords:
(Beachten Sie die nächsten 3 Zeilen)
   /etc/init.d/mysql start
   /usr/bin/mysqladmin -u root -h pegasos password 'new-password'
   /usr/bin/mysqladmin -u root password 'new-password'
   Depending on your configuration, a -p option may be needed
   in the last command. See the manual for more details.

(Einige spezifische MySQL-Informationen, die nicht zum Ebuild gehören,
wurden entfernt um dieses Dokument so konsistent wie möglich zu halten)

   * For security reasons you should set your MySQL root
   * password as soon as possible.

Wichtig: Seit mysql-4.0.24-r2 wird das root-Passwort während der Konfigurationsphase gesetzt, um dieses sicherer zu machen.

Das Konfigurationsskript hat die Befehle, die wir ausführen müssen um das Passwort zu setzen, bereits ausgegeben, daher führen wir diese jetzt aus.

Befehlsauflistung 1.4: Einrichten Ihres root-Passworts für MySQL

# /etc/init.d/mysql start
 * Re-caching dependency info (mtimes differ)...
 * Starting mysqld (/etc/mysql/my.cnf) ...        [ ok ]
(Ersetzen Sie new-password durch Ihr gewünschtes Passwort)
# /usr/bin/mysqladmin -u root -h localhost password 'new-password'

Sie können das erfolgreiche Setzen des root-Passworts durch das Einloggen in Ihren MySQL-Server testen:

Befehlsauflistung 1.5: Einloggen in den MySQ-Server durch Verwenden von mysql

$ mysql -u root -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Der -u Schalter setzt den Benutzer, der sich einloggen wird. Der -h Schalter setzt den Host. Das ist üblicherweise localhost solange Sie keinen Remote-Server einrichten. Schließlich sagt -p dem MySQL-Client, dass Sie ein Passwort eingeben werden, um Zugriff zu Ihren Datenbanken zu erhalten. Beachten Sie die mysql> Eingabeaufforderung. Das ist, wo Sie all Ihre Befehle eingeben. Nachdem wir als root in der MySQL-Eingabeaufforderung sind, können wir beginnen unsere Datenbanken einzurichten.

2.  Einrichten der Datenbanken

Erzeugen einer Datenbank

Wir sind eingeloggt und eine MySQL-Eingabeaufforderung wird angezeigt. Lassen Sie uns zuerst einen Blick auf die vorhandenen Datenbanken werfen. Um das zu tun, verwenden wir den SHOW DATABASES Befehl.

Befehlsauflistung 2.1: Anzeigen der MySQL-Datenbanken

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.09 sec)

Wichtig: Bitte beachten Sie, dass MySQL Befehle mit einem Semikolon -- ; -- enden müssen.

Ungeachtet der Tatsache, dass eine Testdatenbank schon existiert, werden wir unsere eigene erzeugen. Datenbanken werden mit dem CREATE DATABASE Befehl erzeugt. Wir werden eine mit dem Namen "gentoo" erzeugen.

Befehlsauflistung 2.2: Erzeugen der gentoo Datenbank

mysql> CREATE DATABASE gentoo;
Query OK, 1 row affected (0.08 sec)

Diese Ausgabe lässt uns wissen, dass der Befehl ohne Fehler ausgeführt wurde. In diesem Fall wurde 1 Zeile modifiziert. Das ist eine Referenz zur Haupt-MySQL-Datenbank, welche eine Liste aller Datenbanken beinhaltet. Sie müssen sich über die Hintergründe nicht all zu viel Gedanken machen. Die letzte Zahl zeigt, wie schnell die Abfrage durchgeführt wurde. Wir können sichergehen, dass die Datenbank erstellt wurde, indem wir SHOW DATABASES erneut ausführen.

Befehlsauflistung 2.3: Sicherstellen, dass die Datenbank erstellt wurde

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| gentoo   |
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)

Unsere Datenbank wurde natürlich erstellt. Um Tabellen in unserer neuen gentoo Datenbank zu erstellen, müssen wir diese als unsere aktuelle Datenbank auswählen. Um das zu tun, verwenden wir den USE Befehl. Der USE Befehl nimmt als Argument den Namen der Datenbank, die Sie aktuell verwenden möchten. Eine andere Möglichkeit ist, sie auf der Kommandozeile durch Setzen nach dem -D Schalter auszuwählen. Fahren wir fort und wechseln zur gentoo Datenbank.

Befehlsauflistung 2.4: Wechseln unserer Datenbank

mysql> USE gentoo;
Database changed

Unsere derzeitige Datenbank ist nun die vorher von uns erstellte gentoo Datenbank. Nachdem wir diese jetzt benutzen, können wir damit beginnen, Tabellen zu erstellen und diese mit Informationen zu füllen.

3.  Arbeiten mit Tabellen in MySQL

Erzeugen einer Tabelle

In der Struktur von MySQL gibt es Datenbanken, Tabellen, Einträge und Felder. Datenbanken beinhalten Tabellen, Tabellen beinhalten Einträge, Einträge beinhalten Felder, welche die eigentlichen Informationen beinhalten. Diese Struktur ermöglicht Anwendern auszuwählen, wie sie auf die Informationen zugreifen möchten. Bis jetzt haben wir uns mit Datenbanken beschäftigt, lassen Sie uns nun mit Tabellen arbeiten. Zunächst können Tabellen, ähnlich wie Datenbanken, durch den SHOW TABLES Befehl angezeigt werden. Derzeit gibts es keine Tabellen in unserer gentoo Datenbank, wie uns das Ausführen des Befehls zeigen wird:

Befehlsauflistung 3.1: Leere gentoo Datenbank

mysql> SHOW TABLES;
Empty set (0.00 sec)

Das bedeutet, wir müssen Tabellen erstellen. Um das zu tun, verwenden wir den CREATE TABLE Befehl. Allerdings unterscheidet sich dieser Befehl relativ stark von dem einfachen CREATE DATABASE Befehl. Dieser Befehl verwendet eine Liste von Argumenten. Die Form ist wie folgt:

Befehlsauflistung 3.2: CREATE TABLE Syntax

CREATE TABLE [table_name] ([field_name] [field_data_type]([size]));

table_name ist der Name der Tabelle, die wir erstellen möchten. In diesem Fall erstellen wir eine Tabelle genannt developers. Diese Tabelle wird den Namen, E-Mail und Beruf beinhalten. field_name beinhaltet den Namen des Feldes. In diesem Fall haben wir 3 benötigte Namen: name, email und job. Der field_data_type gibt an, welche Art von Informationen darin gespeichert werden. Die verschiedenen verfügbaren Formate sind auf der MySQL-Spaltentypen Seite zu finden. Für unsere Zwecke verwenden wir den VARCHAR Datentyp für alle Felder. VARCHAR ist einer der einfachsten Datentypen beim Arbeiten mit Strings. size ist wieviel Daten ein einzelnes Feld speichern kann. In diesem Fall verwenden wir 128. Das bedeutet, dass das Feld 128 Bytes VARCHAR Daten beinhalten kann. Sie können das als 128 Zeichen sehen, eine technischere Erklärung stellt die oben genannte Seite zur Verfügung. Nachdem wir jetzt wissen, wie man eine Tabelle erstellt, werden wir das auch tun.

Befehlsauflistung 3.3: Erzeugen unserer Tabelle

mysql> CREATE TABLE developers ( name VARCHAR(128), email VARCHAR(128), job VARCHAR(128));
Query OK, 0 rows affected (0.11 sec)

Sieht so aus, als ob unsere Tabelle erfolgreich erstellt wurde. Lassen Sie uns das mit dem SHOW TABLES Befehl überprüfen:

Befehlsauflistung 3.4: Überprüfen unserer Tabelle

mysql> SHOW TABLES;
+------------------+
| Tables_in_gentoo |
+------------------+
| developers       |
+------------------+
1 row in set (0.00 sec)

Ja, da ist unsere Tabelle. Allerdings sieht es so aus, als ob diese keine Informationen über die Art der Felder hat, die wir eingerichtet haben. Dafür verwenden wir den DESCRIBE Befehl (oder kurz DESC), welches den Tabellennamen als Argument verwendet. Sehen wir nach, was uns das für die developer Tabelle ausgibt.

Befehlsauflistung 3.5: Beschreibung unserer developer Tabelle

mysql> DESCRIBE developers;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name  | varchar(128) | YES  |     | NULL    |       |
| email | varchar(128) | YES  |     | NULL    |       |
| job   | varchar(128) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Das zeigt die verschiedenen Felder und deren Typ. Es zeigt auch einige weitere Attribute, welche über das Ziel dieses Howtos hinausgehen. Für mehr Informationen besuchen Sie das MySQL-Referenzhandbuch. Wir haben eine Tabelle mit der wir arbeiten können, lassen Sie uns fortfahren und diese füllen.

Befüllen unserer MySQL Datenbank

Wir befüllen eine Tabelle (oder fügen Daten hinzu) mit dem INSERT Befehl. Wie der CREATE TABLE Befehl, hat es ebenfalls ein spezifisches Format:

Befehlsauflistung 3.6: INSERT Syntax

INSERT INTO table (col1, col2, ...) VALUES('value1', 'value2', ...);

Dieser Befehl wird verwendet, um Einträge in eine Tabelle zu schreiben. table beinhaltet die MySQL-Tabelle, in die wir die Informationen einfügen möchten. Dem Tabellennamen folgt eventuell eine Liste der Spalten, in die Daten eingefügt werden sollten, und VALUES() beinhaltet die in die Felder einzufügenden Daten. Sie können die Liste der Spalten weglassen, wenn Sie in jedes Feld etwas einfügen und wenn Sie die Daten in der gleichen Reihenfolge eintragen, wie Sie in der Tabelle definiert sind. In diesem Fall, wollen wir Daten in die developers Tabelle einfügen. Lassen Sie uns einige Beispieleinträge einfügen:

Befehlsauflistung 3.7: Einfügen von Informationen in unsere developers Tabelle

mysql> INSERT INTO developers VALUES('Joe Smith', 'joesmith@gentoo.org', 'toolchain');
Query OK, 1 row affected (0.06 sec)
(Falls Sie die Reihenfolge der Spalten nicht wissen, oder einen unvollständigen Eintrag machen möchten)
mysql> INSERT INTO developers (job, name) VALUES('outsourced', 'Jane Doe');
Query OK, 1 row affected (0.01 sec)

Entsprechend unsere Ausgabe, sieht es so aus, dass die Einträge korrekt eingefügt wurden. Was ist, wenn wir mehr Informationen als nur einen Eintrag einfügen möchten? Das ist der Moment, wo der LOAD DATA Befehl ins Spiel kommt. Das lädt Daten aus einer Tab getrennten Datei. Probieren wir das durch Editieren einer Datei in unserem Homeverzeichnis mit Einträgen. Wir nennen diese Datei records.txt. Hier ist ein Beispiel:

Befehlsauflistung 3.8: ~/records.txt

John Doe  johndoe@gentoo.org  portage
Chris White  chriswhite@gentoo.org  documentation
Sam Smith  samsmith@gentoo.org  amd64

Wichtig: Stellen Sie sicher, dass sie wissen, mit welchen Daten Sie arbeiten. Es ist sehr unsicher LOAD DATA zu verwenden, wenn Sie sich über den Dateiinhalt nicht im Klaren sind!

Jetzt hat der LOAD DATA Befehl eine längere Definition, wir verwenden hier aber die einfachste Form.

Befehlsauflistung 3.9: LOAD DATA Syntax

LOAD DATA LOCAL INFILE '/path/to/filename' INTO TABLE table;

/path/to/filename ist das zu verwendete Verzeichnis und der Dateiname, table ist der Name unserer Tabelle. In diesem Fall ist ~/records.txt die Datei und die Tabelle ist developers.

Befehlsauflistung 3.10: Hereinladen unserer Daten

mysql> LOAD DATA LOCAL INFILE '~/records.txt' INTO TABLE developers;
Query OK, 3 rows affected (0.00 sec)
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

Wichtig: Sollten Sie mit einem seltsamen Verhalten konfrontiert werden, stellen Sie sicher, dass die Felder durch Tabs getrennt sind. Falls Sie Informationen aus einer anderen Quelle in Ihre Eingabedatei kopieren, kann es sein, dass die Tabs in Leerzeichen konvertiert werden.

Das hat gut funktioniert. Wie auch immer, das fügt einfach nur Einträge ein, aber gibt Ihnen keine Kontrolle über MySQL. Viele Web-Anwendungen verwenden SQL-Skripte um MySQL schnell und einfach einzurichten. Falls Sie ein scr-Skript verwenden möchten, müssen Sie MySQL im Batch-Modus starten oder die Datei sourcen. Hier ist ein Beispiel um MySQL im Batch-Modus laufen zu lassen:

Befehlsauflistung 3.11: MySQL im Batch-Modus

$ mysql -u root -h localhost -p < sqlfile

Wie beim LOAD DATA Befehl sollten Sie sicherstellen, dass Sie wissen was sqlfile tut. Das nicht zu tun, kann Ihre Datenbank gefährden! Ein anderer Weg das zu tun, ist den source Befehl zu verwenden. Dieser Befehl startet MySQL-Befehle aus einer SQL-Datei aus dem interaktiven Modus. Hier sehen Sie, wie Sie eine SQL-Datei sourcen:

Befehlsauflistung 3.12: Sourcen einer sql Date

mysql> source sqlfile;

Falls Sie eine Web-Anwendung haben, die möchte, dass Sie eine SQL-Datei ausführen, können die beiden oben genannten Befehle verwendet werden, um das zu erledigen. Wir haben unsere Tabellen eingerichtet, wie überprüfen wir jetzt unsere Felder? Wir tun das, indem wir in unseren Tabellen mit Abfragen suchen.

Durchsuchen von MySQL Tabellen mit Abfragen

Abfragen sind eine der Hauptfunktionen von SQL-Datenbanken. Sie helfen uns, die Daten in unseren Tabellen in etwas Brauchbares zu verwandeln. Die meisten Abfragen werden mit dem SELECT Befehl ausgeführt. Der SELECT Befehl ist recht komplex, daher werden wir uns in diesem Dokument nur die drei Hauptformen ansehen.

Befehlsauflistung 3.13: SELECT Formen

(Auswählen aller Einträge in einer Tabelle)
SELECT * FROM table;
(Auswählen spezieller Einträge in einer Tabelle)
SELECT * FROM table WHERE field=value;
(Auswählen spezieller Felder)
SELECT field1,field2,field3 FROM table [WHERE field=value];

Werfen wir einen kurzen Blick auf die erste Form. Diese ist recht einfach und gibt ihnen einen Überblick über Ihre Tabelle. Wir machen weiter und führen es aus, um zu sehen, welche Daten wir bis jetzt haben.

Befehlsauflistung 3.14: Inhalt unserer Tabelle

mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name        | email                 | job            |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)

Wir sehen die Daten, die wir mit INSERT und jene, die wir mit LOAD DATA eingefügt haben. Jetzt sagen wir, wir möchten nur den Eintrag für Chris White ansehen. Das können wir mit der zweiten Form von select wie unten gezeigt erreichen.

Befehlsauflistung 3.15: Auswählen eines speziellen Eintrags mit SELECT

mysql> SELECT * FROM developers WHERE name = 'Chris White';
+-------------+-----------------------+---------------+
| name        | email                 | job           |
+-------------+-----------------------+---------------+
| Chris White | chriswhite@gentoo.org | documentation |
+-------------+-----------------------+---------------+
1 row in set (0.08 sec)

Wie vermutet, wurde der spezielle Eintrag nach dem wir suchen ausgewählt. Jetzt sagen wir, wir möchten nur den Beruf und die E-Mail-Adresse, nicht aber den Namen der Person wissen. Wir können das mit der dritten Form des SELECT Befehls erreichen, wie hier gezeigt wird.

Befehlsauflistung 3.16: Auswählen eines speziellen Eintrags und Feldes mit SELECT

mysql> SELECT email,job FROM developers WHERE name = 'Chris White';
+-----------------------+---------------+
| email                 | job           |
+-----------------------+---------------+
| chriswhite@gentoo.org | documentation |
+-----------------------+---------------+
1 row in set (0.04 sec)

Diese Methode der Auswahl ist viel einfacher zu handhaben, speziell mit größeren Datenmengen, wie wir später noch sehen werden. Als root Benutzer haben wir mit uneingeschränkten Rechten die Möglichkeit, alles mit der MySQL-Datenbank zu tun, was wir möchten. In einem Serverumfeld, kann ein Benutzer mit solchen Rechten sehr problematisch sein. Um zu kontrollieren, wer was mit der Datenbank tut, richten wir Zugriffsrechte ein.

4.  MySQL-Zugriffsrechte

Zugriffsrechte gewähren mit GRANT

Zugriffsrechte legen fest, welche Art von Zugriff Benutzer auf die Datenbanken, Tabellen oder einfach alles haben. Im Moment hat nur der root Account durch seine Berechtigung Zugriff auf die gentoo Datenbank. Lassen Sie uns jetzt zwei gewöhnliche Benutzer erstellen, guest und admin, die die gentoo Datenbank betreten und damit arbeiten dürfen. Der guest Account wird ein eingeschränkter Account sein. Alles was er tun kann, ist Informationen abzufagen und nicht mehr. admin wird die selbe Kontrolle wie root haben, allerdings nur für die gentoo Datenbank (nicht für die Haupt-MySQL-Datenbank). Bevor wir damit weitermachen, lassen Sie uns einen Blick auf eine einfache Form des GRANT Befehls werfen.

Befehlsauflistung 4.1: GRANT Syntax

GRANT [privileges] ON database.* TO '[user]'@'[host]' IDENTIFIED BY '[password]';

Notiz: GRANT ist der empfohlende Weg, um Benutzer anzulegen. Spätere Versionen von MySQL enthalten zwar eine CREATE_USER Funktion, GRANT ist allerdings nach wie vor bevorzugt.

Zuerst haben wir die Rechte, die wir vergeben möchten. Mit dem was wir bis jetzt gelernt haben, hier sind einige Rechte, die Sie setzen können:

  • ALL - gibt alle Rechte für die Datenbank
  • CREATE - erlaubt Benutzern, Tabellen zu erzeugen
  • SELECT - erlaubt Benutzern, Tabellen zu durchsuchen
  • INSERT - erlaubt Benutzern, Daten in eine Tabelle einzufügen
  • SHOW DATABASES - erlaubt Benutzern, eine Liste der Datenbanken anzuzeigen
  • USAGE - Benutzer hat keine Rechte
  • GRANT OPTION - erlaubt Benutzern, Rechte zu vergeben

Notiz: Falls Sie MySQL mit einer Web-Anwendung kommunizieren lassen, sind CREATE, SELECT, INSERT (hier besprochen), DELETE und UPDATE (für weitere Informationen sehen Sie sich den MySQL Reference Manual - GRANT and REVOKE Syntax Abschnitt an) die einzigen Rechte die Sie brauchen werden. Viele Leute machen den Fehler, alle Rechte zu vergeben, auch wenn es nicht notwendig ist. Überprüfen Sie mit den Entwicklern der Anwendung, ob solche Rechte Probleme bei normalen Operationen verursachen können.

Für unseren admin Benutzer, verwenden wir ALL. Für den guest Benutzer reicht SELECT für den Nur-Lese-Zugriff. database ist die Datenbank, für die wir die Rechte des Benutzers festlegen möchten. In diesem Beispiel ist gentoo die Datenbank. Das .* steht für alle Tabellen. Falls Sie wünschen, können Sie auch tabellenspezifische Rechte vergeben. user ist der Name des Benutzers und host ist der Hostname, von dem aus der Benutzer auf die Datenbank zugreift. In den meisten Fällen wird das localhost sein. password ist das Passwort des Benutzers. Lassen Sie uns fortfahren und anhand dieser Informationen unsere Benutzer erstellen.

Befehlsauflistung 4.2: Erzeugen des admin und guest Benutzers

(admin)
mysql> GRANT ALL ON gentoo.* TO 'admin'@'localhost' IDENTIFIED BY 'password';
(guest)
mysql> GRANT SELECT ON gentoo.* TO 'guest'@'localhost' IDENTIFIED BY 'password';

Nachdem wir unsere Benutzer eingerichtet haben, lassen Sie sie uns ausprobieren. Zuerst beenden wir MySQL durch Eingabe von quit in der Eingabeaufforderung:

Befehlsauflistung 4.3: MySQL beenden

mysql> quit

Wir sind jetzt zurück in der Konsole. Nachdem wir unsere Benutzer eingerichtet haben, lassen Sie uns fortfahren und sehen, was diese tun dürfen.

Benutzerrechte ausprobieren

Wir versuchen uns jetzt als guest Benutzer einzuloggen. Der guest Benutzer hat nur SELECT Rechte. Das bedeutet, nur Suchen und sonst nichts zu können. Fahren Sie fort und loggen Sie sich mit dem guest Benutzer ein.

Befehlsauflistung 4.4: Einloggen mit dem guest Account

$ mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Jetzt sollten wir die Rechte unseres Benutzers überprüfen. Wechseln wir zur gentoo Datenbank:

Befehlsauflistung 4.5: Wechseln zur gentoo Datenbank

mysql> USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Lassen Sie uns versuchen, etwas zu tun, dass wir nicht dürfen. Wir versuchen, eine Tabelle zu erzeugen.

Befehlsauflistung 4.6: Versuchen eine Datenbank mit dem guest Benutzer zu erstellen

mysql> CREATE TABLE test (test VARCHAR(20), foobar VARCHAR(2));
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

Wie Sie sehen können, funktioniert das nicht, da unser Benutzer nicht die erforderlichen Rechte hat. Wir haben aber Zugriff auf die SELECT Anweisung. Fahren wir fort und probieren das aus:

Befehlsauflistung 4.7: Ausprobieren der SELECT Anweisung

mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name        | email                 | job            |
+-------------+-----------------------+----------------+
| Joe Smith   | joesmith@gentoo.org   | toolchain      |
| John Doe    | johndoe@gentoo.org    | portage        |
| Chris White | chriswhite@gentoo.org | documentation  |
| Sam Smith   | samsmith@gentoo.org   | amd64          |
| Jane Doe    | NULL                  | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)

Der Befehl war erfolgreich und wir haben einen flüchtigen Blick darauf erhalten, was Benutzerrechte tun können. Wir haben aber auch einen admin Account erzeugt. Das war um zu zeigen, dass auch Benutzer mit ALL Zugriffsrechten Einschränkungen haben können. Fahren Sie fort, schließen Sie MySQL und loggen Sie sich anschließend als admin ein.

Befehlsauflistung 4.8: Einloggen als admin

mysql> quit
Bye
$ mysql -u admin -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Zu Beginn versuchen wir, eine neue Datenbank mit unserem admin Benutzer zu erstellen. Dieser admin hat den gleichen Zugriff wie der root Benutzer und kann jegliche Änderungen in der gentoo Datenbank durchführen, die er möchte. Das wird den Zugriff auf die Haupt-MySQL-Datenbank testen. Erinnern Sie sich daran, dass wir früher nur Zugriff auf eine spezielle Datenbank erlaubt haben.

Befehlsauflistung 4.9: Versuch eine neue Datenbank zu erstellen

mysql> CREATE DATABASE gentoo2;
ERROR 1044: Access denied for user: 'admin@localhost' to database 'gentoo2'

Natürlich kann der admin Benutzer keine Datenbank erzeugen, trotz seiner Rechte in der gentoo Datenbank. Wie auch immer, wir können nach wie vor den admin Account dazu benutzen, um die gentoo Datenbank zu modifizieren, wie durch das folgende beispielhafte Einfügen von Daten gezeigt wird.

Befehlsauflistung 4.10: admin Rechte in der gentoo Datenbank

mysql> USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python');
Query OK, 1 row affected (0.08 sec)

Der admin Benutzer kann auf die Datenbank zugreifen, wie es ihm gefällt. Manchmal möchten wir auch Benutzerrechte entziehen. Das kann alles, angefangen von einem problematischen Benutzer bis zu einem pensionierten Angestellen sein. Werfen wir einen Blick darauf, wie man Benutzerrechte mit dem REVOKE Befehl deaktiviert.

Sperren eines Benutzerzugriffs mit dem REVOKE Befehl

Der REVOKE Befehl lässt uns den Zugriff eines Benutzers verweigern. Wir können den gesamten oder nur speziellen Zugriff verweigern. Tatsächlich ist das Format sehr ähnlich zu dem von GRANT.

Befehlsauflistung 4.11: REVOKE Syntax

REVOKE [privileges] ON database.* FROM '[user]'@'[host]';

Die Optionen sind in dem GRANT Abschnitt erklärt. In diesem Abschnitt werden wir jeden Zugriff eines Benutzers verweigern. Sagen wir, wir haben herausgefunden, dass der guest Account in irgendeiner Weise Sicherheitsprobleme hervorruft. Wir entscheiden uns dazu, alle Rechte zu widerrufen. Wir melden uns als root an und tun das Nötige.

Befehlsauflistung 4.12: Widerrufen von Benutzerrechten

mysql> REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';
Query OK, 0 rows affected (0.00 sec)

Notiz: In diesem Fall ist der Benutzerzugriff recht einfach, daher ist das datenbankspezifische Widerrufen kein Problem. In größeren Fällen werden Sie wahrscheinlich *.* anstatt gentoo.* verwenden, um alle Rechte von allen Datenbanken zu löschen.

Beenden wir jetzt und versuchen uns als guest Benutzer einzuloggen.

Befehlsauflistung 4.13: Versuch sich als guest Benutzer einzuloggen

$ mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 4.0.25

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Wir können uns zwar einloggen, allerdings haben wir keinen Zugriff mehr zur gentoo Datenbank.

Befehlsauflistung 4.14: Zugriff des guest Accounts verweigert.

mysql> USE gentoo;
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

Unser problematischer Benutzer kann auf die gentoo Datenbank nicht länger zugreifen. Bitte beachten Sie, dass sich der Benutzer noch immer einloggen kann. Dies ist so, da er nach wie vor in der Haupt-MySQL-Datenbank vorhanden ist. Werfen wir einen Blick darauf, wie man einen Account komplett mit dem DELETE und der MySQL Benutzertabelle löscht.

Löschen von Accounts mit DELETE

Die MySQL Benutzertabelle ist eine Liste mit allen Benutzer und Informationen über diese. Stellen Sie sicher, dass Sie als root eingeloggt sind. Danach fahren Sie fort und verwenden die Haupt-MySQL-Datenbank.

Befehlsauflistung 4.15: Verwenden der Haupt-MySQL-Datenbank

mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

Lassen Sie uns jetzt nachsehen, welche Tabellen die mysql Datenbank hat.

Befehlsauflistung 4.16: mysql Datenbank Tabellenauflistung

mysql> SHOW TABLES;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+
6 rows in set (0.00 sec)

Die user Tabelle ist die Tabelle, die wir suchen. Diese Tabelle beinhaltet 30 verschieden Felder, was das Lesen etwas erschwert. Um die Dinge zum Lesen zu vereinfachen, werden wir die dritte Version der SELECT Anweisung verwenden. Die Felder, die wir suchen, sind Host und User.

Befehlsauflistung 4.17: Finden unseres guest Benutzers in der user Tabelle

mysql> SELECT Host,User FROM user WHERE User = 'guest';
+-----------+-------+
| Host      | User  |
+-----------+-------+
| localhost | guest |
+-----------+-------+
1 row in set (0.00 sec)

Nachdem wir unsere Informationen haben, können wir unseren guest Benutzer loswerden. Das wird durch den DELETE Befehl erledigt, die Syntax wird unten gezeigt.

Befehlsauflistung 4.18: DELETE Syntax

DELETE FROM table WHERE field='value';

Sie werden feststellen, dass DELETE der SELECT Anweisung recht ähnlich ist. In diesem Fall ist das Feld User und der Wert guest. Das wird den Eintrag, wo der Benutzer guest ist, erfolgreich aus der Benutzertabelle löschen. Fahren wir fort und erledigen das:

Befehlsauflistung 4.19: Löschen des guest Aaccounts

mysql> DELETE FROM user WHERE User='guest';
Query OK, 1 row affected (0.07 sec)
(FLUSH PRIVILEGES wird benötigt um die Benutzerrechte zu aktualisieren)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

Es sieht so aus, als ob es funktioniert hat. Lassen Sie uns das testen, indem wir uns ausloggen und versuchen uns als guest Benutzer wieder einzuloggen.

Befehlsauflistung 4.20: Versuchen als guest Benutzer einzuloggen

mysql> quit
Bye
$ mysql -u guest -h localhost -p
Enter password:
ERROR 1045: Access denied for user: 'guest@localhost' (Using password: YES)

Unser Benutzer ist jetzt erfolgreich gelöscht!

Abschluss

Während sich diese Anleitung auf das Einrichten von MySQL über die Kommandozeile spezialisiert, gibt es einige Alternativen in GUI Form:

Das beendet die einführende MySQL-Anleitung. Ich hoffe, das gibt Ihnen ein besseres Verständnis der Grundlagen hinter MySQL und dem Einrichten einer Datenbank. Bitte mailen Sie mir an Chris White falls Sie irgendwelche Kommentare dazu haben.



Drucken

Seite aktualisiert 8. August 2006

Die Originalversion dieser Übersetzung wird nicht länger gepflegt

Zusammenfassung: Dieses Dokument hilft Anwendern MySQL einzurichten und zu verwenden.

Chris White
Autor

Shyam Mani
Bearbeiter

Xavier Neys
Bearbeiter

Stefan Kienzl
Übersetzer

Jan Hendrik Grahl
Korrektor

Tobias Heinlein
Übersetzer

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.