Direkt nach der Installation sollte man die Zugriffsrechte auf die MySQL Datenbank einschränken. Hierzu sollte das Einsteigertutorial MySQL für LINUX allen Einsteigern eine solides Verständnis der Materie vermitteln. Wer nun tiefer in die Vergabe derRechte einsteigen möchte, für den sind die folgenden Kapitelvon Interesse: MySQL verwendet ein leistungsstarkes, nicht standardisiertesSicherheits/Zugriffs-System, welches im Folgenden näherdargestellt werden soll. Vorab sei erwähnt, daß nach jeder Änderung der Zugriffsrechteein Reload des DB-Servers durchgeführt werden muß, damitdie Änderungen wirksam werden. Dies wird mittels: mysqladminreload erledigt. Die grundlegende Funktion besteht darin, einem Benutzerauf einem Host Berechtigungen zur Ausführung von SELECT,INSERT, UPDATE und DELETE Befehlenzu erteilen (oder auch nicht). Ferner kann die Verwendungeines Anonymen Benutzer sowie MySQL-Funktionenwie LOAD DATA INFILE geregelt werden. Weiterhin werdenmittels des Berechtigungssystems administrative Rechte andem DB-Server selbst, wie z.B. Reload, vergeben. - Anmerkung: Man sollte
im Folgenden beachten, daß die MySQL Usernamen
und Passwörter nichts mit den UNIX-Usernames und Passwörtern
zu tun haben!
MySQL unterscheidet nicht zwischen einzelnen Benutzern
sondern zwischen der Kombination aus Benutzer und Host.
Diese Kombination ergibt eine eindeutige ID. Das Sicherheitssystem
regelt hierbei genauestens welcher Benutzer von welchem
Host welche Rechte auf welcher Datenbank besitzt.
Diese Einstellungen werden in drei Tabellen abgelegt:
user
host
db
Die jeweiligen Tabellen sind wie folgt aufgebaut:
Beinhaltet alle Host/User Kombinationen, welche den MySQL-Server
connecten dürfen. Alle Berechtigungen die ein Benutzer in
dieser Tabelle enthält gelten für alle Datenbanken, sofern
keine erweiterten Berechtigungen für den jeweiligen Benutzer
in der Tabelle db definiert wurden. Man kann diese
Berechtigungen auch als grundlegende Einstellungen ansehen
und ein datenbankabhängiges Fein-Tunig in der Tabelle db
festlegen.
Der Tabellenaufbau:
Field Type Key Default
---------------------------------------------------------------
Host char(60) PRI
User char(16) PRI
Password char(16) -
Select_priv enum(N,Y) - N
Insert_priv enum(N,Y) - N
Update_priv enum(N,Y) - N
Delete_priv enum(N,Y) - N
Create_priv enum(N,Y) - N
Drop_priv enum(N,Y) - N
Reload_priv enum(N,Y) - N
Shutdown_priv enum(N,Y) - N
Process_priv enum(N,Y) - N
File_priv enum(N,Y) - N
In dieser Tabelle wird definiert welche Datenbank der
jeweilige Host/Benutzer mit welchen Berechtigungen verwenden
darf. Sie stellt wie bereits erwähnt das Fein-Tunig da.
Der Tabellenaufbau:
Field Type Key Default
---------------------------------------------------------------
Host char(60) PRI
Db char(64) PRI
User char(16) PRI
Select_priv enum(N,Y) - N
Insert_priv enum(N,Y) - N
Update_priv enum(N,Y) - N
Delete_priv enum(N,Y) - N
Create_priv enum(N,Y) - N
Drop_priv enum(N,Y) - N
Die host-Tabelle ist in großen Netzwerken als
Nachschlage-Tabelle für leere Host-Einträge in der
db-Tabelle sinnvoll. Möchte man, daß ein Benutzer
von jedem Host in dem Netzwerk auf den DB-Server zugreifen
kann, sollte man den Host-Eintrag in der db-Tabelle
auslassen und alle Host des Netzwerkes in der host-Tabelle
eintragen.
Der Tabellenaufbau:
Field Type Key Default
---------------------------------------------------------------
Host char(60) PRI
Db char(64) PRI
Select_priv enum(N,Y) - N
Insert_priv enum(N,Y) - N
Update_priv enum(N,Y) - N
Delete_priv enum(N,Y) - N
Create_priv enum(N,Y) - N
Drop_priv enum(N,Y) - N
Die HOST und DB Spalten können Strings
mit Wildcards % und _ beinhalten. Wird für
diese Spalten kein Wert eingetragen entspricht dies dem
Wert %.
Ein HOST kann sein:
localhost
ein Hostname
eine IP-Nummer
ein String mit Wildcards
Ein leerer HOST-Eintrag in
der db-Tabelle bedeutet -kein Host- aus der host-Tabelle.
Ein leerer HOST-Eintag in der host- oder user-Tabelle
bedeutet -kein Host-.
Die Spalte DB beinhaltet den Namen einer Datenbank
oder einer SQL Regexp.
Ein leerer Benutzereintrag bedeutet -kein Benutzer-.
In dieser Spalte können keine Wildcards verwendet werden.
Die Berechtigungen der user-Tabelle werden ge-OR-d
mit den Berechtigungen aus der db-Tabelle. Dies Bedeutet,
daß ein Superuser nur in der Tabelle user
mit allen Berechtigungen festgelegt auf Y eingetragen
werden muß.
Wenn man sich nun den Aufbau der Tabellen näher betrachtet,
wird man feststellen, daß die user-Tabelle zusätzlich
zu den Zugriffsberechtigungen auf die jeweilige Datenbank
auch administrative Berechtigungen regelt. Dadurch sollte
klar sein, daß diese Tabelle die grundlegenden Berechtigungen
regelt.
Im folgenden Beispiel soll der Benutzer custom
mit dem Paßwort stupid angelegt werden.Der Benutzer
soll die Möglichkeit haben sich von den Hosts localhost,
server.domain und whitehouse.gov anzumelden.
Die Datenbank bankaccount möchte er nur von dem Host
localhost und die Datenbank customer von allen
Hosts ansprechen können.
> mysql -u root mysql.
mysql> insert into user (host,user,password)
values(localhost,custom,password(stupid));
mysql> insert into user (host,user,password)
values(server.domain,custom,password(stupid));
mysql> insert into user (host,user,password)
values(whitehouse.gov,custom,password(stupid));
mysql> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
(localhost,bankaccount,custom,Y,Y,Y,Y,Y,Y);
mysql> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
(%,customers,custom,Y,Y,Y,Y,Y,Y);
mysql> quit
> mysqladmin reload
|