

MySQL wordt geleverd met een geavanceerde toegangscontrole en privilege
systeem om
te voorkomen dat onbevoegde cliënten toegang krijgen tot het systeem. Dit
systeem,
geïmplementeerd als een hiërarchie, maakt het mogelijk om veelomvattende en
uitgebreide toegangsregels te creëren die MySQL gebruikt om te beslissen hoe het
met een bepaalde gebruikershandeling moet omgaan.
In dit hoofdstuk wordt ingegaan op het MySQL toegangscontrole systeem en
geeft een zicht op de MySQL toekenningstabellen (grant tables). Deze tabellen,
die integraal deel uitmaken van het beveiligingssysteem van de server, bieden
database administrators een groot deel van de kracht en flexibiliteit bij het
bepalen van de regels die de toegang tot het systeem regelt. Daarnaast wordt in
de dit hoofdstuk ingegaan op het beheer van gebruikersaccounts en wachtwoorden
in het MySQL toegangscontrole systeem, waarin wordt uitgelegd hoe wachtwoorden
(In het bijzonder het zeer belangrijke 'root' password) kan worden gewijzigd en
hoe een verloren superuser wachtwoord opnieuw ingesteld kan worden.
De gebruikelijke MySQL server installatie bestaat uit twee niveaus van
beveiliging:
Verbinding met de server is slechts toegestaan indien deze overeenkomt
met de toegangsregels bepaald aan de hand van een account, bijvoorbeeld:
gebruiker, host (specifiek subnetwerk, IP range), wachtwoord.
Zodra een verbinding tot stand is gebracht, controleert MySQL elke actie
die door een gebruiker wordt uitgevoerd om te controleren of de gebruiker
voldoende rechten heeft om het te mogen uitvoeren. Een gebruiker kan worden
beperkt tot het uitvoeren van specifieke bewerkingen: SELECT, INSERT,
DELETE, UPDATE, ... of bepaalde databanken, tabellen, velden of opgeslagen
procedures/functies.
De beveiliging van het systeem is verder verbeterd door gebruik te maken van
een eenrichtings encryptieschema voor gebruikerswachtwoorden. Nieuwere versies
van MySQL ondersteunen ook SSL die gebruikt kan worden om, voor een betere
beveiliging, de gegevens te gecodeerd te verzenden over de MySQL client-server
verbinding (zoals resultaten van queries).
Als MySQL voor het eerst wordt geïnstalleerd, zorgt MySQL-installer
automatisch voor de aanmaak van een databank, de MySQL database,
die zes MySQL toekennings tabellen bevat, zoals:
user: Gebruikersaccounts, globale
privileges, niet-priviligeerde kolommen.
db: Database-niveau privileges.
tables_priv: Tabel-niveau privileges.
columns_priv: Kolom-niveau privileges.
procs_priv: Privilegen met betrekking tot
opgeslagen procedures en functies.
proxies_priv: Proxy-gebruiker privileges.
Elk van deze tabellen heeft een andere rol bij de beslissing of een gebruiker
toegang heeft tot een bepaalde database, tabelveld of opgeslagen procedure.
Toegangsregels kunnen worden ingesteld op basis van de gebruikersnaam,
verbindende gastheer, of opgevraagde database. In de volgende paragrafen wordt
elk van deze tabellen in meer detail besproken.
MySQL |
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='mysql' and TABLE_NAME = 'user';
(67 row(s) returned)
|
TABLE_NAME |
COLUMN_NAME |
COLUMN_TYPE |
PRIVILEGES |
COLUMN_COMMENT |
db |
Host |
char(60) |
select |
insert |
db |
Db |
char(64) |
select |
insert |
db |
User |
char(32) |
select |
insert |
db |
Select_priv |
enum('N' |
|
select |
db |
Insert_priv |
enum('N' |
|
select |
db |
Update_priv |
enum('N' |
|
select |
db |
Delete_priv |
enum('N' |
|
select |
db |
Create_priv |
enum('N' |
|
select |
db |
Drop_priv |
enum('N' |
|
select |
db |
Grant_priv |
enum('N' |
|
select |
db |
References_priv |
enum('N' |
|
select |
db |
Index_priv |
enum('N' |
|
select |
db |
Alter_priv |
enum('N' |
|
select |
db |
Create_tmp_table_priv |
enum('N' |
|
select |
db |
Lock_tables_priv |
enum('N' |
|
select |
db |
Create_view_priv |
enum('N' |
|
select |
db |
Show_view_priv |
enum('N' |
|
select |
db |
Create_routine_priv |
enum('N' |
|
select |
db |
Alter_routine_priv |
enum('N' |
|
select |
db |
Execute_priv |
enum('N' |
|
select |
db |
Event_priv |
enum('N' |
|
select |
db |
Trigger_priv |
enum('N' |
|
select |
user |
Host |
char(60) |
select |
insert |
user |
User |
char(32) |
select |
insert |
user |
Select_priv |
enum('N' |
|
select |
user |
Insert_priv |
enum('N' |
|
select |
user |
Update_priv |
enum('N' |
|
select |
user |
Delete_priv |
enum('N' |
|
select |
user |
Create_priv |
enum('N' |
|
select |
user |
Drop_priv |
enum('N' |
|
select |
user |
Reload_priv |
enum('N' |
|
select |
user |
Shutdown_priv |
enum('N' |
|
select |
user |
Process_priv |
enum('N' |
|
select |
user |
File_priv |
enum('N' |
|
select |
user |
Grant_priv |
enum('N' |
|
select |
user |
References_priv |
enum('N' |
|
select |
user |
Index_priv |
enum('N' |
|
select |
user |
Alter_priv |
enum('N' |
|
select |
user |
Show_db_priv |
enum('N' |
|
select |
user |
Super_priv |
enum('N' |
|
select |
user |
Create_tmp_table_priv |
enum('N' |
|
select |
user |
Lock_tables_priv |
enum('N' |
|
select |
user |
Execute_priv |
enum('N' |
|
select |
user |
Repl_slave_priv |
enum('N' |
|
select |
user |
Repl_client_priv |
enum('N' |
|
select |
user |
Create_view_priv |
enum('N' |
|
select |
user |
Show_view_priv |
enum('N' |
|
select |
user |
Create_routine_priv |
enum('N' |
|
select |
user |
Alter_routine_priv |
enum('N' |
|
select |
user |
Create_user_priv |
enum('N' |
|
select |
user |
Event_priv |
enum('N' |
|
select |
user |
Trigger_priv |
enum('N' |
|
select |
user |
Create_tablespace_priv |
enum('N' |
|
select |
user |
ssl_type |
enum('' |
'SPECIFIED') |
|
user |
ssl_cipher |
blob |
select |
insert |
user |
x509_issuer |
blob |
select |
insert |
user |
x509_subject |
blob |
select |
insert |
user |
max_questions |
int(11) unsigned |
select |
insert |
user |
max_updates |
int(11) unsigned |
select |
insert |
user |
max_connections |
int(11) unsigned |
select |
insert |
user |
max_user_connections |
int(11) unsigned |
select |
insert |
user |
plugin |
char(64) |
select |
insert |
user |
authentication_string |
text |
select |
insert |
def |
user |
password_expired |
enum('N' |
|
def |
user |
password_last_changed |
timestamp |
select |
def |
user |
password_lifetime |
|
smallint(5) unsigned |
def |
user |
account_locked |
enum |
|
|

Het gebruikerstabel kolommen
vast te stellen of te weigeren of toestaan inkomende verbindingen. Voor
toegestane aansluitingen, geen privileges in de tabel user verleende geven
wereldwijde rechten van de gebruiker.
Voorrechten in deze tabel toegekend voor alle databases op de server.