GRANTpriv_type
[(column_list
)] [,priv_type
[(column_list
)]] ... ON [object_type
] {tbl_name
| * | *.* |db_name
.*} TOuser
[IDENTIFIED BY [PASSWORD] 'password
'] [,user
[IDENTIFIED BY [PASSWORD] 'password
']] ... [REQUIRE NONE | [{SSL| X509}] [CIPHER 'cipher
' [AND]] [ISSUER 'issuer
' [AND]] [SUBJECT 'subject
']] [WITHwith_option
[with_option
] ...]object_type
= TABLE | FUNCTION | PROCEDUREwith_option
= GRANT OPTION | MAX_QUERIES_PER_HOURcount
| MAX_UPDATES_PER_HOURcount
| MAX_CONNECTIONS_PER_HOURcount
| MAX_USER_CONNECTIONScount
Die GRANT
-Anweisung erlaubt
Systemadministratoren die Erstellung von MySQL-Benutzerkonten
und die Vergabe von Rechten an diese Konten. Um
GRANT
verwenden zu können, benötigen Sie
die Berechtigung GRANT OPTION
sowie alle
Berechtigungen, die Sie selbst gewähren. Die
REVOKE
-Anweisung ist in diesem Zusammenhang
ebenfalls zu nennen: Sie gestattet Administratoren das
Entfernen von Kontenberechtigungen. Siehe auch
Abschnitt 13.5.1.5, „REVOKE
“.
MySQL-Kontendaten sind in Tabellen der Datenbank
mysql
gespeichert. Diese Datenbank und das
Zugriffssteuerungssystem sind in
Kapitel 5, Datenbankverwaltung, ausführlich
beschrieben. Sie finden dort weitere Informationen.
Wichtig: Einige Releases von MySQL enthalten Änderungen an der Struktur der Grant-Tabellen, damit neue Berechtigungen oder Funktionen hinzugefügt werden können. Wenn Sie ein Upgrade auf eine neue MySQL-Version durchführen, sollten Sie Ihre Grant-Tabellen aktualisieren, damit sichergestellt ist, dass diese auf der aktuellen Struktur basieren und auf diese Weise neue Funktionalitäten nutzen können. Siehe auch Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“.
Wenn in den Grant-Tabellen Berechtigungsdatensätze vorhanden
sind, die Datenbank- oder Tabellennamen mit gemischter
Groß-/Kleinschreibung enthalten, und die Systemvariable
lower_case_table_names
auf einen
Nicht-Null-Wert gesetzt ist, dann können diese Berechtigungen
nicht mit REVOKE
widerrufen werden. Es ist
dann erforderlich, die Grant-Tabellen direkt zu manipulieren.
(GRANT
erstellt solche Datensätze zwar
nicht, wenn lower_case_table_names
eingestellt ist, aber unter Umständen wurden derartige
Datensätze bereits vor Einstellen der Variablen erstellt.)
Berechtigungen können auf unterschiedlichen Ebenen gewährt werden:
Globale Ebene
Globale Berechtigungen gelten für alle Datenbanken auf
einem gegebenen Server. Sie werden in der Tabelle
mysql.user
gespeichert. GRANT
ALL ON *.*
und REVOKE ALL ON
*.*
gewähren bzw. widerrufen nur globale
Berechtigungen.
Datenbankebene
Datenbankberechtigungen gelten für alle Objekte in einer
gegebenen Datenbank. Sie werden in den Tabellen
mysql.db
und
mysql.host
gespeichert. GRANT
ALL ON
und
db_name
.*REVOKE ALL ON
gewähren
bzw. widerrufen nur Datenbankberechtigungen.
db_name
.*
Tabellenebene
Tabellenberechtigungen gelten für alle Spalten in einer
gegebenen Tabelle. Sie werden in der Tabelle
mysql.tables_priv
gespeichert.
GRANT ALL ON
und
db_name.tbl_name
REVOKE ALL ON
gewähren bzw. widerrufen nur Tabellenberechtigungen.
db_name.tbl_name
Spaltenebene
Spaltenberechtigungen gelten für einzelne Spalten in
einer gegebenen Tabelle. Sie werden in der Tabelle
mysql.columns_priv
gespeichert. Wenn
Sie REVOKE
verwenden, müssen Sie
dieselben Spalten angeben, denen die Berechtigungen zuvor
gewährt wurden.
Routinenebene
Die Berechtigungen CREATE ROUTINE
,
ALTER ROUTINE
,
EXECUTE
und GRANT
gelten für gespeicherte Routinen (Funktionen und
Prozeduren). Sie können auf der globalen und der
Datenbankebene gewährt werden. Ferner lassen sich diese
Berechtigungen mit Ausnahme von CREATE
ROUTINE
auf Routinenebene für einzelne Routinen
gewähren und werden in der Tabelle
mysql.procs_priv
gespeichert.
Die Klausel object_type
sollte als
TABLE
, FUNCTION
bzw. als
PROCEDURE
angegeben werden, wenn das
nachfolgende Objekt eine Tabelle, eine gespeicherte Funktion
oder eine gespeicherte Prozedur ist.
Für die Anweisungen GRANT
und
REVOKE
kann
priv_type
wie folgt angegeben
werden:
Berechtigung | Bedeutung |
ALL [PRIVILEGES] |
Setzt alle einfachen Berechtigungen außer GRANT
OPTION . |
ALTER |
Erlaubt die Verwendung von ALTER TABLE . |
ALTER ROUTINE |
Erlaubt die Änderung oder Löschung gespeicherter Routinen. |
CREATE |
Erlaubt die Verwendung von CREATE TABLE . |
CREATE ROUTINE |
Erlaubt die Erstellung gespeicherter Routinen. |
CREATE TEMPORARY TABLES |
Erlaubt die Verwendung von CREATE TEMPORARY TABLE . |
CREATE USER |
Erlaubt die Verwendung von CREATE USER , DROP
USER , RENAME USER und
REVOKE ALL PRIVILEGES . |
CREATE VIEW |
Erlaubt die Verwendung von CREATE VIEW . |
DELETE |
Erlaubt die Verwendung von DELETE . |
DROP |
Erlaubt die Verwendung von DROP TABLE . |
EVENT |
Erlaubt die Erstellung von Ereignissen für den Ereignisplaner. |
EXECUTE |
Erlaubt dem Benutzer die Ausführung gespeicherter Routinen. |
FILE |
Erlaubt die Verwendung von SELECT ... INTO OUTFILE
und LOAD DATA INFILE . |
INDEX |
Erlaubt die Verwendung von CREATE INDEX und
DROP INDEX . |
INSERT |
Erlaubt die Verwendung von INSERT . |
LOCK TABLES |
Erlaubt die Verwendung von LOCK TABLES für Tabellen,
für die Sie die Berechtigung
SELECT haben. |
PROCESS |
Erlaubt die Verwendung von SHOW FULL PROCESSLIST . |
REFERENCES |
Nicht implementiert. |
RELOAD |
Erlaubt die Verwendung von FLUSH . |
REPLICATION CLIENT |
Erlaubt dem Benutzer, die Positionen von Slave- oder Master-Servern zu erfragen. |
REPLICATION SLAVE |
Für Replikationsslaves erforderlich (zum Lesen von Binärlogeinträgen auf dem Master). |
SELECT |
Erlaubt die Verwendung von SELECT . |
SHOW DATABASES |
SHOW DATABASES zeigt alle Datenbanken. |
SHOW VIEW |
Erlaubt die Verwendung von SHOW CREATE VIEW . |
SHUTDOWN |
Erlaubt die Verwendung von mysqladmin shutdown. |
SUPER |
Erlaubt die Verwendung der Anweisungen CHANGE MASTER ,
KILL , PURGE MASTER
LOGS und SET GLOBAL und
des Befehls mysqladmin debug.
Erlaubt ferner die (einmalige) Verbindungsherstellung
auch in dem Fall, dass der Wert für
max_connections erreicht wurde. |
TRIGGER |
Erlaubt dem Benutzer das Erstellen und Löschen von Triggern. |
UPDATE |
Erlaubt die Verwendung von UPDATE . |
USAGE |
Synonym für „keine Berechtigungen“ |
GRANT OPTION |
Erlaubt die Gewährung von Berechtigungen. |
Die Berechtigungen EVENT
und
TRIGGER
wurden in MySQL 5.1.6 hinzugefügt.
Ein Trigger ist mit einer Tabelle verknüpft, d. h., um einen
Trigger zu erstellen oder zu löschen, benötigen Sie die
Berechtigung TRIGGER
für die Tabelle,
nicht für den Trigger. (Vor MySQL 5.1.6 war für das
Erstellen und Löschen von Triggern die Berechtigung
SUPER
erforderlich.)
Die Berechtigung REFERENCES
wird derzeit
nicht benutzt.
USAGE
kann angegeben werden, wenn Sie einen
Benutzer ohne Berechtigungen erstellen wollen.
Verwenden Sie SHOW GRANTS
, um zu bestimmen,
welche Berechtigungen ein Konto hat. Siehe auch
Abschnitt 13.5.4.11, „SHOW GRANTS
“.
Sie können globale Berechtigungen mit der Syntax ON
*.*
oder Berechtigungen auf Datenbankebene mit der
Syntax ON
konfigurieren.
Wenn Sie db_name
.*ON *
angeben und eine
Standarddatenbank festgelegt haben, werden die Berechtigungen
in dieser Datenbank gewährt.
(Warnung: Wenn Sie
ON *
angeben und keine
Standarddatenbank ausgewählt haben, werden die Berechtigungen
global gewährt.)
Die Berechtigungen FILE
,
PROCESS
, RELOAD
,
REPLICATION CLIENT
, REPLICATION
SLAVE
, SHOW DATABASES
,
SHUTDOWN
und SUPER
sind
administrative Berechtigungen, die nur global gewährt werden
können (hierzu wird die Syntax ON *.*
verwendet).
Andere Berechtigungen können wahlweise global oder auf individuellen Ebenen festgelegt werden.
Die priv_type
-Werte, die Sie für
eine Tabelle angeben können, sind SELECT
,
INSERT
, UPDATE
,
DELETE
, CREATE
,
DROP
, GRANT OPTION
,
INDEX
, ALTER
,
CREATE VIEW
, SHOW VIEW
und TRIGGER
.
Die priv_type
-Werte, die Sie (bei
Verwendung einer
column_list
-Klausel) für eine
Spalte angeben können, sind SELECT
,
INSERT
und UPDATE
.
Die priv_type
-Werte, die Sie auf
der Routinenebene angeben können, sind ALTER
ROUTINE
, EXECUTE
und
GRANT OPTION
. CREATE
ROUTINE
ist keine Berechtigung auf Routinenebene,
weil Sie diese Berechtigung bereits zur Erstellung einer
Routine benötigen.
Auf der globalen, der Datenbank-, der Tabellen- und der
Routinenebene weist GRANT ALL
nur
diejenigen Berechtigungen zu, die auf der gewährten Ebene
vorhanden sind. So ist beispielsweise GRANT ALL ON
eine Anweisung
auf Datenbankebene, d. h., es lassen sich hiermit keine nur
auf globaler Ebene vorhandenen Berechtigungen (wie z. B.
db_name
.*FILE
) gewähren.
MySQL gestattet die Konfiguration von Berechtigungen auch für
Datenbankobjekte, die nicht existieren. In diesen Fällen muss
zu den zu gewährenden Berechtigungen auch die Berechtigung
CREATE
gehören. Dies ist bewusst
so implementiert und soll es dem
Datenbankadministrator gestatten, Benutzerkonten und
Berechtigungen für Datenbankobjekte vorzubereiten, die erst
später erstellt werden.
Wichtig: Wenn Sie eine Tabelle oder Datenbank löschen, widerruft MySQL Berechtigungen nicht automatisch. Wenn Sie allerdings eine Routine löschen, werden alle Berechtigungen auf Routinenebene widerrufen, die für diese Routine gewährt wurden.
Hinweis: Die Jokerzeichen
‘_
’ und
‘%
’ sind bei der Angabe von
Datenbanknamen in GRANT
-Anweisungen, die
Berechtigungen auf der globalen und der Datenbankebene
gewähren, zulässig. Das bedeutet beispielsweise, dass Sie,
wenn Sie das Zeichen ‘_
’ als
Bestandteil eines Datenbanknamens verwenden wollen, dieses
Zeichen als ‘\_
’ in der
GRANT
-Anweisung angeben müssen, damit der
Benutzer nicht auf weitere Datenbanken zugreifen kann, die dem
entstandenen Muster entsprechen (z. B. GRANT ... ON
`foo\_bar`.* TO ...
).
Um das Gewähren von Rechten an Benutzer über beliebige Hosts
zu gestatten, unterstützt MySQL die Angabe des
user
-Werts in der Form
.
Wenn ein user_name
@host_name
user_name
- oder
host_name
-Wert als vorzeichenloser
Bezeichner zulässig ist, müssen Sie ihn nicht in
Anführungszeichen setzen. Allerdings sind Anführungszeichen
erforderlich, um einen
user_name
-String mit Sonderzeichen
(z. B. ‘-
’) oder einen
host_name
-String mit Sonder- oder
Jokerzeichen (wie ‘%
’)
anzugeben. Ein Beispiel hierfür wäre
'test-user'@'test-hostname'
. Setzen Sie
Benutzer- und Hostnamen separat in Anführungszeichen.
Sie können Jokerzeichen im Hostnamen verwenden. So bezeichnet
etwa
jeden user_name
@'%.loc.gov'user_name
auf einem
beliebigen Host in der Domäne loc.gov
, und
bezeichnet user_name
@'144.155.166.%'user_name
auf einem
beliebigen Host im Klasse-C-Subnetz
144.155.166
.
Die einfache Form user_name
ist ein
Synonym für
.
user_name
@'%'
MySQL unterstützt keine Jokerzeichen in
Benutzernamen. Anonyme Benutzer werden durch
Einfügen von Einträgen mit User=''
in die
Tabelle mysql.user
oder durch Erstellen
eines Benutzers mit einem leeren Namen mit der
GRANT
-Anweisung definiert:
GRANT ALL ON test.* TO ''@'localhost' ...
Wenn Sie Werte in Anführungszeichen angeben, setzen Sie
Datenbank-, Tabellen-, Spalten- und Routinenamen als
Bezeichner in Backticks (‘`
’).
Host- und Benutzernamen sowie Passwörter werden als Strings
in einfache Anführungszeichen
(‘'
’) gesetzt.
Warnung: Wenn Sie anonymen
Benutzern eine Verbindung zum MySQL Server gestatten wollen,
sollten Sie auch allen lokalen Benutzern als
Berechtigungen gewähren. Andernfalls wird das anonyme
Benutzerkonto für user_name
@localhostlocalhost
in der Tabelle
mysql.user
verwendet, wenn benannte
Benutzer versuchen, sich über das lokale System am MySQL
Server anzumelden (die Tabelle wird bei der Installation von
MySQL erstellt). Detaillierte Informationen finden Sie in
Abschnitt 5.8.5, „Zugriffskontrolle, Phase 1: Verbindungsüberprüfung“.
Sie können feststellen, ob dies für Sie zutrifft, indem Sie die folgende Abfrage ausführen, die alle ggf. vorhandenen anonymen Benutzer auflistet:
SELECT Host, User FROM mysql.user WHERE User='';
Wenn Sie das lokale anonyme Benutzerkonto löschen wollen, um das beschriebene Problem zu umgehen, dann verwenden Sie folgende Anweisungen:
DELETE FROM mysql.user WHERE Host='localhost' AND User=''; FLUSH PRIVILEGES;
GRANT
unterstützt Hostnamen mit einer
Länge von bis zu 60 Zeichen. Die Namen von Datenbanken,
Tabellen, Spalten und Routinen dürfen bis zu 64 Zeichen lang
sein. Benutzernamen können bis zu 16 Zeichen umfassen.
Hinweis: Die
zulässige Länge für Benutzernamen kann nicht durch
Änderungen an der Tabelle mysql.user
modifiziert werden. Wenn Sie dies dennoch versuchen, kann dies
zu unvorhersehbaren Folgen führen, die schlimmstenfalls sogar
ein Anmelden von Benutzern am MySQL Server verhindern
können. Sie sollten die Tabellen in der
mysql
-Datenbank grundsätzlich nicht auf
eine andere als die von MySQL AB vorgeschriebene, in
Abschnitt 5.6, „mysql_fix_privilege_tables — Upgrade von MySQL-Systemtabellen“, geschilderte
Weise ändern.
Die Berechtigungen für eine Tabelle, eine Spalte oder eine
Routine werden kumulativ über ein logisches
OR
der Berechtigungen auf jeder der
einzelnen Ebenen gebildet. Wenn die Tabelle
mysql.user
beispielsweise angibt, dass ein
Benutzer die globale Berechtigung SELECT
hat, kann ihm diese Berechtigung nicht auf der Datenbank-, der
Tabellen- oder der Spaltenebene verweigert werden.
Die Berechtigungen für eine Spalte lassen sich wie folgt berechnen:
global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges OR routine privileges
In den meisten Fällen gewähren Sie einem Benutzer nur auf einer dieser Berechtigungsebenen Rechte – das Leben ist also normalerweise nicht so kompliziert. Ausführlich beschrieben wird die Überprüfung von Berechtigungen in Abschnitt 5.8, „Allgemeine Sicherheitsaspekte und das MySQL-Zugriffsberechtigungssystem“.
Wenn Sie Berechtigungen für eine Kombination aus Benutzer-
und Hostnamen gewähren, die nicht in der Tabelle
mysql.user
vorhanden ist, wird ein Eintrag
hinzugefügt und verbleibt dort, bis er mit einer
DELETE
-Anweisung gelöscht wird. Anders
gesagt, GRANT
kann Einträge in der Tabelle
user
erstellen; diese lassen sich aber
nicht mit REVOKE
entfernen, sondern müssen
explizit mit DROP USER
oder
DELETE
gelöscht werden.
Warnung: Wenn Sie einen neuen
Benutzer ohne IDENTIFIED BY
-Klausel
erstellen, hat der Benutzer kein Passwort. Dies ist sehr
unsicher. Sie können jedoch den SQL-Modus
NO_AUTO_CREATE_USER
aktivieren: Hierbei
wird verhindert, dass GRANT
Benutzer
automatisch erstellt, wenn diesem nicht mit der
IDENTIFIED BY
-Klausel ein nichtleeres
Passwort zugewiesen wird.
Wenn ein neuer Benutzer erstellt wird oder Sie globale
Gewährungsberechtigungen haben, dann wird das Passwort des
Benutzers auf das in der IDENTIFIED
BY
-Klausel gewählte Passwort gesetzt (sofern
vorhanden). Hat der Benutzer bereits ein Passwort, so wird
dieses durch das neue Passwort ersetzt.
Passwörter können auch mit der Anweisung SET
PASSWORD
eingestellt werden. Siehe auch
Abschnitt 13.5.1.6, „SET PASSWORD
“.
In der IDENTIFIED BY
-Klausel sollte das
Passwort als literaler Passwortwert übergeben werden. Es ist
– anders als bei der SET
PASSWORD
-Anweisung – nicht erforderlich, die
Funktion PASSWORD()
zu verwenden. Zum
Beispiel:
GRANT ... IDENTIFIED BY 'mypass';
Wenn Sie das Passwort nicht unverschlüsselt senden wollen und
den Hash-Wert kennen, den PASSWORD()
für
das Passwort zurückgeben würde, dann können Sie diesen
Hash-Wert nach dem Schlüsselwort PASSWORD
angeben:
GRANT ... IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';
In einem C-Programm können Sie den Hash-Wert mit der
C-API-Funktion make_scrambled_password()
ermitteln.
Wenn Sie Berechtigungen für eine Datenbank gewähren, wird
bei Bedarf ein Eintrag in der Tabelle
mysql.db
erstellt. Wenn alle Berechtigungen
für die Datenbank mit REVOKE
entfernt
werden, wird dieser Eintrag gelöscht.
Die Berechtigung SHOW DATABASES
ermöglicht
dem Konto die Anzeige von Datenbanknamen durch Absetzen einer
SHOW DATABASE
-Anweisung. Konten, die diese
Berechtigung nicht haben, sehen nur solche Datenbanken, für
die sie Berechtigungen haben; wurde der Server mit der Option
--skip-show-database
gestartet, dann kann die
Anweisung überhaupt nicht verwendet werden.
Wenn ein Benutzer keine Berechtigungen für eine Tabelle hat,
wird, wenn er (z. B. mit SHOW TABLES
) eine
Liste der Tabellen anfordert, der Name der betreffenden
Tabelle nicht angezeigt.
Die WITH GRANT OPTION
-Klausel gibt dem
Benutzer die Möglichkeit, anderen Benutzern beliebige
Berechtigungen zu gewähren, die der Benutzer selbst auf einer
bestimmten Berechtigungsebene hat. Sie sollten bei der Vergabe
der Berechtigung GRANT OPTION
mit Umsicht
vorgehen, weil zwei Benutzer mit unterschiedlichen
Berechtigungen sich diese unter Umständen gegenseitig
gewähren können!
Sie können einem anderen Benutzer keine Berechtigung
gewähren, die Sie selbst nicht haben – mit GRANT
OPTION
können Sie nur solche Berechtigungen
vergeben, über die Sie selbst auch verfügen.
Beachten Sie, dass, wenn Sie einem Benutzer die Berechtigung
GRANT OPTION
für eine bestimmte
Berechtigungsebene gewähren, dieser Benutzer alle
Berechtigungen, die er für diese Ebene hat (oder in Zukunft
erhält), beliebig anderen Benutzern zuweisen kann.
Angenommen, Sie gewähren einem Benutzer die Berechtigung
INSERT
für eine Datenbank. Wenn Sie
nachfolgend die Berechtigung SELECT
für
die Datenbank gewähren und WITH GRANT
OPTION
angeben, dann kann dieser Benutzer anderen
Benutzern nicht nur die Berechtigung SELECT
gewähren, sondern auch die Berechtigung
INSERT
. Wenn Sie dann dem Benutzer die
Berechtigung UPDATE
für die Datenbank
gewähren, kann der Benutzer die Berechtigungen
INSERT
, SELECT
und
UPDATE
gewähren.
Einem nichtadministrativen Benutzer sollten Sie die
Berechtigung ALTER
weder global noch für
die Datenbank mysql
gewähren. Andernfalls
kann der Benutzer das Berechtigungssystem unterlaufen, indem
er Tabellen umbenennt!
Die Optionen MAX_QUERIES_PER_HOUR
,
count
MAX_UPDATES_PER_HOUR
und
count
MAX_CONNECTIONS_PER_HOUR
begrenzen die
Anzahl der Abfrage-, Update- und Anmeldevorgänge, die ein
Benutzer im Verlauf einer Stunde ausführen kann. Wenn
count
count
0
ist
(Standardeinstellung), dann heißt das, dass für den Benutzer
keine Beschränkung gilt.
Die Option MAX_USER_CONNECTIONS
schränkt die
maximale Anzahl gleichzeitiger Verbindungen ein, die das Konto
herstellen kann. Wenn count
count
0
ist (Standardeinstellung), dann bestimmt
die Systemvariable max_user_connections
die
Anzahl gleichzeitiger Verbindungen für das Konto.
Hinweis: Um für einen vorhandenen Benutzer eine solche Option
zur Ressourcenbeschränkung anzugeben, ohne vorhandene
Berechtigungen einzuschränken, verwenden Sie GRANT
USAGE ON *.* ... WITH MAX_...
.
Siehe auch Abschnitt 5.9.4, „Begrenzen von Benutzer-Ressourcen“.
MySQL kann zusätzlich zur normalen, auf Benutzernamen und
Passwörtern basierenden Authentifizierung Attribute von
X509-Zertifikaten überprüfen. Um SSL-spezifische Optionen
für ein MySQL-Konto anzugeben, verwenden Sie die
REQUIRE
-Klausel der
GRANT
-Anweisung. (Hintergrundinformationen
zur Verwendung von SSL mit MySQL finden Sie in
Abschnitt 5.9.7, „Verwendung sicherer Verbindungen“.)
Es gibt mehrere verschiedene Gründe zur Beschränkung der Verbindungstypen für ein gegebenes Konto:
Wenn für das Konto keine SSL- oder X509-Anforderungen vorhanden sind, sind unverschlüsselte Verbindungen zulässig, sofern Benutzername und Passwort gültig sind. Allerdings können nach Maßgabe des Clients auch verschlüsselte Verbindungen benutzt werden, sofern der Client über die entsprechenden Zertifikats- und Schlüsseldateien verfügt.
Die Option REQUIRE SSL
weist den Server
an, nur SSL-verschlüsselte Verbindungen für das Konto
zuzulassen. Beachten Sie, dass diese Option weggelassen
werden kann, wenn Zugriffssteuerungs-Datensätze vorhanden
sind, die Nicht-SSL-Verbindungen zulassen.
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE SSL;
REQUIRE X509
bedeutet, dass der Client
ein gültiges Zertifikat vorweisen muss, dass aber das
Zertifikat selbst, der Aussteller und der Zweck keine
Rolle spielen. Erforderlich ist einzig und allein, dass
die Signatur bei einem Zertifikat geprüft werden können
muss.
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE X509;
REQUIRE ISSUER
'
schränkt
Verbindungsversuche dahingehend ein, dass der Client ein
gültiges X509-Zertifikat vorweisen muss, welches von der
Zertifizierungsstelle
issuer
''
ausgestellt wurde. Wenn der Client ein Zertifikat
vorweist, das zwar gültig ist, aber von einem anderen
Anbieter stammt, dann weist der Server die Verbindung ab.
Die Verwendung von X509-Zertifikaten impliziert immer auch
eine Verschlüsselung, d. h., die Option
issuer
'SSL
wird in diesem Fall nicht
benötigt.
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE ISSUER '/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com';
Beachten Sie, dass die
'
-Werte
als einzelner String eingegeben werden sollten.
issuer
'
REQUIRE SUBJECT
'
schränkt
Verbindungsversuche dahingehend ein, dass der Client ein
gültiges X509-Zertifikat vorweisen muss, bei dem als
Zweck subject
'subject
angegeben ist.
Wenn der Client ein Zertifikat vorweist, das zwar gültig
ist, aber einen anderen Zweck angibt, dann weist der
Server die Verbindung ab.
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com';
Beachten Sie, dass die
'
-Werte
als einzelner String eingegeben werden sollten.
subject
'
REQUIRE CIPHER
'
ist
erforderlich, um sicherzustellen, dass Chiffren und
Schlüssellängen ausreichender Stärke verwendet werden.
SSL selbst kann schwach sein, wenn alte Algorithmen kurze
Schlüssel zur Verschlüsselung einsetzen. Mit dieser
Option können Sie die Verwendung einer bestimmten
Chiffriermethode vorsehen, damit die Verbindung zulässig
ist.
cipher
'
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
Die Optionen SUBJECT
,
ISSUER
und CIPHER
können in der REQUIRE
-Klausel wie folgt
kombiniert werden:
GRANT ALL PRIVILEGES ON test.* TO 'root'@'localhost' IDENTIFIED BY 'goodsecret' REQUIRE SUBJECT '/C=EE/ST=Some-State/L=Tallinn/ O=MySQL demo client certificate/ CN=Tonu Samuel/Email=tonu@example.com' AND ISSUER '/C=FI/ST=Some-State/L=Helsinki/ O=MySQL Finland AB/CN=Tonu Samuel/Email=tonu@example.com' AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
Das Schlüsselwort AND
zwischen den
REQUIRE
-Optionen ist optional.
Die Reihenfolge der Optionen ist unerheblich, allerdings darf keine Option zweimal angegeben werden.
Wenn mysqld startet, werden alle Berechtigungen in den Speicher eingelesen. Detaillierte Informationen finden Sie in Abschnitt 5.8.7, „Wann Berechtigungsänderungen wirksam werden“.
Beachten Sie, dass, wenn Sie Tabellen-, Spalten- oder Routineberechtigungen auch für nur einen einzigen Benutzer verwenden, der Server die Tabellen-, Spalten- und Routineberechtigungen für alle Benutzer prüft. Dies kann MySQL ein wenig verlangsamen. Analog muss der Server, wenn Sie die Anzahl von Abfragen, Updates oder Verbindungen für Benutzer beschränken wollen, auch diese Werte überwachen.
Die wesentlichsten Unterschiede zwischen dem SQL-Standard und
den MySQL-Versionen von GRANT
sind die
folgenden:
In MySQL werden Berechtigungen mit einer Kombination aus Host- und Benutzernamen (und nicht nur mit einem Benutzernamen) verknüpft.
Der SQL-Standard bietet keine Berechtigungen auf globaler oder Datenbankebene und unterstützt auch nicht alle von MySQL unterstützten Berechtigungstypen.
MySQL unterstützt die Berechtigungen
TRIGGER
und UNDER
des SQL-Standards nicht.
Berechtigungen nach SQL-Standard sind hierarchisch
strukturiert. Wenn Sie einen Benutzer entfernen, werden
alle Berechtigungen widerrufen, die dieser Benutzer hatte.
Dies gilt auch für MySQL, wenn Sie DROP
USER
verwenden. Siehe auch
Abschnitt 13.5.1.2, „DROP USER
“.
Wenn Sie in Standard-SQL eine Tabelle löschen, werden
alle Berechtigungen für die Tabelle widerrufen. Wenn Sie
in Standard-SQL eine Berechtigung widerrufen, werden alle
Berechtigungen, die basierend auf dieser Berechtigung
gewährt wurden, ebenfalls widerrufen. In MySQL können
Berechtigungen nur mit expliziten
REVOKE
-Anweisungen oder durch
Manipulation der in den MySQL-Grant-Tabellen gespeicherten
Werte gelöscht werden.
In MySQL können INSERT
-Berechtigungen
auch für nur einige der Spalten in einer Tabelle gewährt
werden. In diesem Fall können Sie
INSERT
-Anweisungen für die Tabelle
trotzdem ausführen, sofern Sie diejenigen Spalten
weglassen, für die Sie keine
INSERT
-Berechtigung haben. Die
übergangenen Spalten können auf ihre impliziten
Vorgabewerte gesetzt werden, sofern der strikte SQL-Modus
nicht aktiviert ist. Im strikten Modus wird die Anweisung
abgewiesen, wenn eine der übergangenen Spalten keinen
Vorgabewert hat. (Der SQL-Standard sieht vor, dass Sie die
INSERT
-Berechtigung für alle Spalten
benötigen.) Abschnitt 5.2.5, „Der SQL-Modus des Servers“, beschreibt
den strikten Modus. Abschnitt 11.1.4, „Vorgabewerte von Datentypen“,
erläutert implizite Vorgabewerte.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.