Zugriffs und Rechte Verwaltung unter SQL
Wenn man einen SQL-Server das erste Mal startet, so gibt es schon 2 Datenbanken von Anfang an.
Zum einen die "test" DB, welche leer ist und für uns jetzt keine Verwendung hat.
Zum anderen die "mysql" DB.
Im Gegensatz zu anderen Programmen oder Diensten werden die Einstellungen nicht über eine Konfigurations-Datei geregelt sondern auch in einer Datenbank in Form von 3 Tabellen.
Wichtig ist das die Benutzer von SQL und auch der Administrator vollkommen unabhängig von den Benutzern des Rechners sind. Sprich der Administrator des Rechners muss nicht zwingend Rechte auf dem SQL Server haben.
Nun zum Genaueren Aufbau der MySQL Datenbank.
In ihrem Inneren finden wir 3 relevante Tabellen.
User , Host und DB.
Die User Tabelle ( Primäres Zugriffsrecht )
In der User Tabelle sind alle User mit entsprechenden Hosts gespeichert die die Berechtigung haben sich auf dem MySQL Server anzumelden. Deren Passwörter werden verschlüsselt gespeichert.
Hier können für einzelne Benutzer schon Rechte über Flags vergeben werden. Jedoch ist dies bei großen Datenbanken nicht ratsam, da sich hier gesetzte Rechte auf alle Datenbanken und Tabellen beziehen. Üblich ist, dass Admins oder SuperUser in der User DB Rechte gesetzt bekommen. Hier noch kurz eine Übersicht der Flags die gesetzt werden können:
|
|
|
Um noch mal genau zu zeigen wie die User Tabelle aufgebaut ist hier noch mal die Struktur
Datenfeld Datentyp Schlüssel Standardwert
Host char(60) PRI "" ( z.B.: bla@bal.de Ein leerer Host-Eintrag wird wie ein Eintrag % behandelt. )
User char(16) PRI "" ( z.B.: Bla Der Benutzername nobody ist äquivalent zu % und trifft auf alle Benutzer zu )
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
Etc ... ... N ( alle oberen )
Die DB Tabelle ( Sekundäres Zugriffsrecht )
In der DB Tabelle ist festgelegt welcher User auf welche Tabellen zugreifen darf und welche Rechte er in dieser hat. Somit ist es möglich einem bestimmten User nur bestimmte Tabellen zuzuweisen.Mit der Collums_priv lassen sich die hier eingestellten Rechte nochmals verfeinern und können einen User sogar auf einzelne Spalten beschränken. Die Rechte die hier vergeben werden können, werden in der unteren Tabelle nochmals Dargestellt.
Select_priv |
Daten lesen |
Insert_priv |
neue Daten einfügen |
Update_priv |
Daten verändern |
Delete_priv |
Datensatz löschen |
Create_priv |
Datenbank/Tabelle erzeugen |
Drop_priv |
Datenbank/Tabelle löschen |
Damit Super User oder Admins Ihre Rechte nicht permanent in beiden Tabellen ergänzen müssen werden die Rechte Flags der User Tabelle und die Flags der DB Tabelle "OR" verknüpft. Das heißt Rechte die in der User Tabelle gegeben wurden können durch die DB Tabelle nicht entzogen werden.
Die Struktur der DB Tabelle
Datenfeld Typ Schlüssel Standardwert
Host char(60) PRI "" ( siehe oben )
Db char(64) PRI "" ( zur Angabe einer Datenbank, leeres Feld wird nicht als % interpretiert sondern bewirkt Sprung auf Host Tabelle )
User char(16) PRI "" ( siehe oben )
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
Die Host Tabelle findet nur in großen Netzwerken ihren Einsatz und wird dann benutzt wenn man einem User der von verschiedenen Rechnern zugreift andere Rechte für Tabellen zu geben.
Als Beispiel z.B. in einer Firma kann ein Fließband Arbeiter am Fließband Terminal lediglich die Produktionsdaten eingeben und in seinem Büro nur die Tagesberichte schreiben.
Die Struktur der Host Tabelle
Datenfeld Typ Schlüssel Standardwert
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
In der Regel werden Rechte und Benutzer mit Admin Tools wie PHPMyAdmin verwaltet aber um noch ein Beispiel zu bringen wie das Ganze in der Konsole aussieht:
Es soll der Benutzer Tewi mit dem Passwort Montag angelegt werden. Der Benutzer soll die Möglichkeit haben sich von den Hosts localhost, server.domain und whitehouse.gov anzumelden. Die Datenbank Langeweile möchte er nur von dem Host localhost und die Datenbank Schreibtisch von allen Hosts ansprechen können.
> mysql -u root mysql.
mysql> insert into user (host,user,password)
values(localhost,Tewi,password(Monatg));
mysql> insert into user (host,user,password)
values(server.domain,Tewi,password(Montag));
mysql> insert into user (host,user,password)
values(whitehouse.gov,Tewi,password(Montag));
mysql> insert into db
(host,db,user,Select_priv,Insert_priv,Update_priv,Delete_priv,
Create_priv,Drop_priv)
values
(localhost,langeweile,Tewi,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
(%,Schreibtisch,Tewi,Y,Y,Y,Y,Y,Y);
mysql> quit
> mysqladmin reload