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:

 

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

Reload_priv

MySQL-Rechte neu laden

 

Shutdown_priv

MySQL abschalten

Process_priv

SQL-Befehle sehen

File_priv

Daten exportieren/importieren

Grant_priv

Privilegien weitergeben (Admin sein)

References_priv

???

Index_priv

Index erzeugen/löschen

Alter_priv

Tabellendefinition ändern

 

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