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) selectinsert
 db Db char(64) selectinsert
 db User char(32) selectinsert
 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) selectinsert
 user User char(32) selectinsert
 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 selectinsert
 user x509_issuer blob selectinsert
 user x509_subject blob selectinsert
 user max_questions int(11) unsigned selectinsert
 user max_updates int(11) unsigned selectinsert
 user max_connections int(11) unsigned selectinsert
 user max_user_connections int(11) unsigned selectinsert
 user plugin char(64) selectinsert
 user authentication_string text selectinsert
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