KK10_16 Zugriffsrechte und Benutzer

advertisement
Datenbanken
16 Zugriffsrechte und Benutzer
Karl Meier
karl.meier@kasec.ch
21.12.2010
Inhalt
Sicherheitskonzept
Benutzer


eröffnen
verwalten
Rechte


erteilen
löschen
21.12.2010
16 Zugriffsrechte und Benutzer
2
1
Grundsätzlich gilt…
Normalerweise ist es nicht erwünscht, dass
jeder alle Datenbankoperationen durchführen
kann.
Es muss einen (oder mehrere) Administratoren
geben, die mit sehr weit reichenden Rechten
ausgestattet sind.
Mit Differenzierung der Zugriffsrechte wird den
verschiedenen Vorschriften Rechnung getragen.
21.12.2010
16 Zugriffsrechte und Benutzer
3
Sicherheitskonzept
Sicherheitskonzept mit Rechteverwaltung
für Objekte der Datenbank ist notwendig
Benutzer- / Benutzergruppenverwaltung
Zugriffsrechte
ACL: Access Control List
21.12.2010
16 Zugriffsrechte und Benutzer
4
2
Benutzerverwaltung
Zweistufige Zugriffskontrolle:
Die Datenbankbenutzer besitzen Systemund Objektprivilegien
Systemprivilegien werden mit Username,
Hostname und Passwort geprüft (MySQL)
Für die Objektprivilegien empfiehlt es sich,
eine CRUD Matrix zu erstellen
21.12.2010
16 Zugriffsrechte und Benutzer
5
CRUD Matrix
21.12.2010
C reate
INSERT
R ead
SELECT
U pdate
UPDATE
D elete
DELETE
16 Zugriffsrechte und Benutzer
6
3
Das DB Sicherheitsmodell
grant
Schema XY
OP
XY.tab1
XY.tab2
erzeugt
XY
grant
S
P
Create session
Create table
S
P
„clients“
Schema ZX
Create SP
erzeugt
DBA
OP
OP
ZX
grant
21.12.2010
16 Zugriffsrechte und Benutzer
7
Datenbankadministrator DBA
Verfügt über die meisten Rechte
Kann anderen Usern Rechte zuweisen
Unterschiedlicher Name je nach RDBMS



MySQL: root / <blank>
MS SQL-Server: sa / <blank>
ORACLE: sys / change_on_install
sysadm / sysadm
21.12.2010
16 Zugriffsrechte und Benutzer
8
4
Rechteverwaltung in MySQL
Administrationsprogramm mit GUI
Tabelle user in Datenbank mysql


(host, benutzer, passwort, rechte)
Direkt mit INSERT und UPDATE ändern
SQL Befehle GRANT und REVOKE
Perl-Script mysql_setpermission.pl
 Zugriff auf Datenbank mysql sehr restriktiv
21.12.2010
16 Zugriffsrechte und Benutzer
9
Datenbankbenutzer
mysql> USE mysql;
Database changed
mysql> DESC user;
+-----------------+---------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host
| char(60)
|
| PRI |
|
|
| User
| char(16)
|
| PRI |
|
|
| Password
| char(41)
|
|
|
|
|
| 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
|
|
| Grant_priv
| enum('N','Y') |
|
| N
|
|
| References_priv | enum('N','Y') |
|
| N
|
|
| Index_priv
| enum('N','Y') |
|
| N
|
|
| Alter_priv
| enum('N','Y') |
|
| N
|
|
...
+-----------------+---------------+------+-----+---------+-------+
37 rows in set (0.04 sec)
21.12.2010
16 Zugriffsrechte und Benutzer
10
5
MySQL-Installation unter
Unix/Linux
root# mysqladmin –u root –h localhost password xxx
root# mysqladmin –u root –h 127.0.0.1 password xxx
root# mysqladmin –u root –h „hostname“ password xxx
root# mysql –p
Enter password: xxx
Welcome to the MySQL monitor. …
mysql> USE mysql;
Database changed
mysql> DELETE FROM user WHERE user=´ ´;
Query OK, 2 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
21.12.2010
16 Zugriffsrechte und Benutzer
11
MySQL-Installation unter Windows
root Passwort für lokalen Zugang
C:\...\bin> mysqladmin –u root –h localhost password xxx
Kein root Zugang von fremden Rechnern
mysql> DELETE From USER where USER=´root´ AND host=´%´;
Weniger Rechte für lokale Benutzer
mysql> REVOKE ALL ON *.* FROM ´´@localhost;
mysql> REVOKE GRANT OPTION ON *.* FROM ´´@localhost;
Kein lokaler Zugang ohne Passwort
mysql> DELETE FROM user WHERE user=´´ AND host=´localhost´;
Kein Zugang ohne Passwort von externen Rechnern
mysql> DELETE FROM user WHERE host=´%´ AND user=´´;
mysql> FLUSH PRIVILEGES;
21.12.2010
16 Zugriffsrechte und Benutzer
12
6
Benutzer anlegen
mysql> USE mysql;
Database changed
mysql> INSERT INTO user
-> SET host="%", user="meier", password=PASSWORD("secret");
Query OK, 1 row affected (0.27 sec)
mysql> INSERT INTO user (host, user, password)
-> VALUES ("localhost", "huber", PASSWORD("geheim"));
Query OK, 1 row affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
21.12.2010
16 Zugriffsrechte und Benutzer
13
Syntax
INSERT INTO user (host, user, password)
VALUES („hostname“, „benutzername“, PASSWORD(„passwort“));
21.12.2010
„hostname“
Erklärung
%
Alle Computer
localhost
Lokaler Computer
db.hsz-t.ch
Computer mit Domainname
%.hsz-t.ch
Alle Rechner der Domain
hostname
Computer mit Netzwerkname
16 Zugriffsrechte und Benutzer
14
7
Benutzer verwalten
SELECT * FROM user;
Benutzer anzeigen
UPDATE user SET spalte=wert, …;
Benutzer ändern
DELETE FROM user
WHERE user=„benutzername“;
Benutzer löschen
21.12.2010
16 Zugriffsrechte und Benutzer
15
Zugriffsrechte
Definiert mit GRANT
DBA hat alle Rechte
Ersteller von Objekten hat Rechte darauf
Weitere Rechte nach Bedarf definiert
Rechtevergabe durch DBA (Standard)
Entziehen mit REVOKE
21.12.2010
16 Zugriffsrechte und Benutzer
16
8
Beispiel
mysql> GRANT ALL ON t_ma_proj TO meier;
Query OK, 0 rows affected (0.35 sec)
mysql> GRANT SELECT, UPDATE ON t_proj TO meier;
Query OK, 0 rows affected (0.07 sec)
mysql> GRANT SELECT ON t_ma TO meier;
Query OK, 0 rows affected (0.02 sec)
21.12.2010
16 Zugriffsrechte und Benutzer
17
Syntax GRANT
GRANT privilegien ON [db.]tabelle TO user@host;
21.12.2010
Privilegien
ALL
CRUD
Erklärung
C, R, U, D
Alle Rechte
INSERT
Create
Einfügerecht (INSERT…)
SELECT
Read
Leserecht (SELECT…)
UPDATE
Update
Änderungsrecht (UPDATE…)
DELETE
Delete
Löschrecht (DELETE…)
16 Zugriffsrechte und Benutzer
18
9
Syntax REVOKE
REVOKE privilegien ON [db.]tabelle FROM user@host;
ON db.*
Alle Tabellen
ON *.*
Globale Privilegien
´´@host
Alle Benutzer auf host
user@´%´
user auf allen Rechnern
21.12.2010
16 Zugriffsrechte und Benutzer
19
MySQL Privilegien
Privilegien
Erklärung
Für Tabellen
Select
Darf Daten lesen
Insert
Darf neue Datensätze einfügen
Update
Darf vorhandene Datensätze ändern
Delete
Darf vorhandene Datensätze löschen
Index
Darf Indizes für Tabellen anlegen/löschen
Alter
Darf Tabellen umbenennen bzw. Struktur verändern
21.12.2010
16 Zugriffsrechte und Benutzer
20
10
Weitere MySQL Privilegien
Privilegien
Erklärung
Für Datenbanken, Tabellen und Indizes
Create
Darf neue Datenbanken bzw. Tabellen anlegen
Drop
Darf vorhandene Datenbanken bzw. Tabellen löschen
Grant
Darf anderen Benutzern die eigenen Rechte geben
References Zur Zeit nicht in Verwendung
Für den Dateizugriff
File
Darf Dateien des lokalen Dateisystems lesen und ändern
Zur MySQL Administration
Process
Darf MySQL Prozesse auflisten / beenden (processlist, kill)
Reload
Darf diverse Kommandos ausführen (reload, refresh, flush)
Shutdown
Darf MySQL herunterfahren
21.12.2010
16 Zugriffsrechte und Benutzer
21
Global vs. Objekt
In MySQL werden Privilegien global oder
objektbezogen vergeben.
Verwaltung von objektbezogenen Privilegien ist
aufwändiger, aber sicherer.
Voraussetzung von objektbezogenen Privilegien
ist aber, dass die entsprechenden globalen
Privilegien nicht gesetzt sind.
Die hierarchische Grundidee gilt auch innerhalb
der Objektprivilegien (DB – Tabelle – Spalte).
21.12.2010
16 Zugriffsrechte und Benutzer
22
11
Vorsicht
Das GRANT-Privileg ist ein oft übersehenes
Sicherheitsrisiko!
Für Testzwecke werden oft alle Privilegien eines
Benutzers für die Testdatenbank auf Y gesetzt.
Jeder, der uneingeschränkt Zugriff hat, kann nun
diese unlimitierten Zugriffsrechte auch auf
andere Datenbanken übertragen!
21.12.2010
16 Zugriffsrechte und Benutzer
23
Testdatenbanken
Unabhängig davon, unter welchem OS MySQL
installiert ist, darf jeder Benutzer, der sich unter
MySQL anmeldet, Testdatenbanken erstellen!
Voraussetzung ist, dass der Name einer solchen
Datenbank mit dem String test_ beginnt.
Jeder Benutzer kann sämtliche Daten darin
lesen, ändern und löschen. Die Daten sind also
vollkommen ungeschützt!
21.12.2010
16 Zugriffsrechte und Benutzer
24
12
Die mysql Datenbank
mysql> USE mysql;
Database changed
mysql> SHOW TABLES;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv
|
| db
|
| func
|
| host
|
| tables_priv
|
| user
|
+-----------------+
6 rows in set (0.00 sec)
21.12.2010
16 Zugriffsrechte und Benutzer
25
Tabellen in mysql
user
db
Username, Hostname, Passwort
Globale Privilegien
Wer darf auf welche DB zugreifen
host
Ergänzt db-Tabelle um zulässigen
hostnamen (falls nicht in db definiert)
tables_priv
Wer darf auf welche Tabellen zugreifen
columns_priv Wer darf auf welche Spalten zugreifen
proc
21.12.2010
Verwaltung von Stored Procedures
16 Zugriffsrechte und Benutzer
26
13
Zugriffsrechte betrachten
Geht der Überblick verloren, welche Privilegien
ein Benutzer hat, hilft SHOW GRANTS weiter:
mysql> SHOW GRANTS FOR meier;
+-----------------------------------------------------------------------------+
| Grants for meier@%
|
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'meier'@'%' IDENTIFIED BY PASSWORD '58982d15048734ee' |
| GRANT SELECT ON mav.t_ma_dt TO 'meier'@'%'
|
| GRANT ALL PRIVILEGES ON mav.t_ma_proj TO 'meier'@'%'
|
| GRANT SELECT, UPDATE ON mav.t_proj TO 'meier'@'%'
|
+-----------------------------------------------------------------------------+
4 rows in set (0.00 sec)
21.12.2010
16 Zugriffsrechte und Benutzer
27
Übersicht Kapitel 16
Begriff
Erklärung
INSERT INTO user (host, user,
password) VALUES („hostname“,
„username“, PASSWORD(„passwort“));
Neuer Benutzer anlegen
GRANT rechte ON DBobjekt TO user;
Einzelne Rechte zuweisen
GRANT ALL ON DBobjekt TO user;
Alle Rechte gewähren
GRANT recht (datenfeldliste) ON …;
Rechte für einzelne
Datenfelder
GRANT rechte ON DBobjekt TO user
WITH GRANT OPTION;
Vergabe von Benutzerrechten
ermöglichen
REVOKE rechte ON DBobjekt FROM
user;
Rechte entziehen
REVOKE ALL ON DBobjekt FROM user;
Alle Rechte entziehen
SHOW GRANTS FOR user;
Privilegien anzeigen
21.12.2010
16 Zugriffsrechte und Benutzer
28
14
Vergessenes root-Passwort
MySQL stoppen (MySQL Server mysqld)
Mit Option --skip-grant-tables neu starten
Passwort für root löschen, bzw. neu setzen
MySQL stoppen
MySQL ohne Option neu starten
Jeder, der unter Unix root-Rechte, bzw. unter
Windows adminstrator-Rechte besitzt, kann
auf diese Weise auf jede MySQL Datenbank
Vollzugriff erlangen!!!
21.12.2010
16 Zugriffsrechte und Benutzer
29
21.12.2010
16 Zugriffsrechte und Benutzer
30
15
Herunterladen