Sunteți pe pagina 1din 19

Utilizare MySQL din linia de comandă.

Limbajul de Control al Datelor


Conectarea la MySQL
Există mai multe posbilități de interacțiune cu serverul de baze de date MySQL.
Astfel, există posibilitatea conectării directe la serverul MySQL din linia de comandă.
De altfel, acesta este cel mai facil mod de conectare la serverul MySQL, deoarece
nu avem nevoie de alte aplicații de tip client MySQL instalate pe calculatoare pentru
a ne conecta la serverul de baze de date MySQL.

Însă, deși conectarea din linia de comandă este foarte ușoară, lucrul cu instrucțiuni
SQL în acest mediu este mai dificil. Mult mai ușor este să utilizăm programe de tip
client MySQL care permit conectarea la serverul de baze de date MySQL și, în
plus, oferă o interfață care permite vizualizarea elementelor componente ale bazei
de date (tabele, tabele virtuale, proceduri stocate, etc.).

De asemenea, aceste programe client permit vizualizarea datelor din tabele, a


constrângerilor definite pe tabele, precum și definițiile acestora (instrucțiunile de
creare).

Modul prietenos pe care îl prezintă aceste aplicații prin interfața grafică care este
pusă la dispoziția utilizatorului, fac ca aceste programe să fie preferate pentru
utilizare atunci când se interacționează cu baze de date MySQL.

De altfel, și în primul modul al cursului nostru am discutat despre astfel de programe


de tip client MySQL și am și utilizat de-a lungul cursului un astfel de program (este
vorba despre HeidiSQL). Un alt program de tip client MySQL extrem de răspândit și
de utilizat pentru interacțiunea cu bazele de date MySQL este MySQL Workbench.
Evident, mai sunt și alte programe de același fel.

Și în cadrul acestui modul vom utiliza un program de tip client MySQL, și anume, tot
HeidiSQL, dar vom aloca spațiu în cadrul acestui capitol prezentării posibilității
conexiunii la serverul MySQL din linia de comandă și a rulării de instrucțiuni SQL
tot din linia de comandă.

Clientul mysql.exe
Clientul de tip linie de comandă face parte din kit-ul de instalare MySQL. El se
numește mysql.exe și permite conectarea atât la un server local (localhost) cât și la
un server la distanță.

Pornirea clientului mysql.exe se realizează, în general, din linia de comandă oferită


de sistemul de operare (în cazul sistemului de operare Windows – Command
Prompt, iar în cazul sistemelor de operare Linux/Unix – consola sau emulatorul
de terminal).

Pentru accesarea acestei aplicații (mysql.exe), în cazul folosirii sistemului de


operare Windows, deci, dacă serverul de baze de date MySQL este instalat pe un
sistem Windows, este necesară deschiderea utilitarului Command Prompt care se
găsește în Start – All Programs – Accesories – Command Prompt pe un sistem
de operare Windows 7.
O altă variantă de accesare a utilitarului Command Prompt, care reprezintă, de
fapt, aplicația cmd.exe, este de a accesa Start – Run și în fereastra deschisă se va
tasta cmd.exe sau, direct se tastează cmd.exe în search-ul oferit de Windows la
apăsarea pe butonul Start.

Aplicația cmd.exe poate fi pornită și direct din locația în care se află pe disc, și
anume: C:\Windows\System32\cmd.exe

Lansarea în execuție a liniei de comandă Command Prompt va produce următorul


efect:

După lansarea Command Prompt trebuie pornită aplicația mysql.exe care se


găsește în locația unde este instalat serverul MySQL pe disc. În cazul utilizării unui
programului WAMP, care instalează, pe lângă serverul de baze de date MySQL, și
server de Apache, precum și interpretor de PHP, toate aceste componente ale
aplicației sunt localizate în C:\wamp\bin\mysql\mysql5.6.17\bin

Evident, dacă este instalat un alt program care, printre componentele instalate are și
un server de baze de date MySQL (de exemplu: XAMPP, EasyPHP, etc.) sau dacă
este instalat direct serverul MySQL, atunci locația în care se găsește aplicația client
mysql.exe se va afla într-o altă locație pe disc, decât cea indicată aici pentru
WAMP.

De asemenea, în funcție de versiunea de program instalată care conține versiuni


diferite ale serverului de baze de date MySQL, numele folderului ce contine clientul
mysql.exe, poate să difere puțin. De exemplu, pe versiunea prezentată, folderul este
mysql5.6.17, dar poate fi și o altă versiune.
Avem nevoie de această cale în care se află clientul linie de comandă (mysql.exe)
pentru a putea fi lansat în execuție.

După pornirea serverului de MySQl va trebui lansat clientul linie de comandă


(mysql.exe). Pentru aceasta va trebui accesată locația lui prin comanda:
cd C:\wamp\bin\mysql\mysql5.6.17\bin

Comanda anterioară va produce următorul efect:

Comanda mysql va conduce la conectarea la serverul de baze de date MySQL și la


lansarea în execuție a clientului linie de comandă:

Mai există o variantă mai rapidă care constă în adâugarea acestei căi în care este
localizat clientul mysql.exe, în variabila de sistem PATH a sistemului de operare
Windows care va permite, apoi accesarea clientului, direct prin comanda mysql în
Command Prompt (cmd.exe).

Variabila de sistem poate fi modificată de la următoarea locație:


Control Panel\All Control Panel Items\System

Din fereastra System se va alege opțiunea Advanced System Settings, care va


deschide o fereastră care este prezentată în continuare:

Din fereastra deschisă se va alege opțiunea Environment Variables care va duce


la deschiderea unei noi ferestre ce conține două secțiuni (fereastră care este redată
în continuare):

Dintre cele două tipuri de variabile (User variables și System variables), trebuie
selectată din secțiunea System variables, variabila de sistem PATH și apăsat
butonul Edit.
Se va deschide următoarea fereastră:

La finalul căilor care sunt deja specificate în această variabilă se va adăuga


(delimitarea față de precedenta cale specificată se face prin caracterul „;”)și calea
către locația mysql.exe, în cazul prezentat aici, calea către această aplicație este:
C:\wamp\bin\mysql\mysql5.6.17\bin

După completarea acestei variabile se va apăsa butonul OK, iar, dacă serviciul de
MySQL este pornit, va trebui restartat. În acest moment nu mai este necesară
schimbarea directorului în Command Prompt cu ajutorul comenzii cd, ci poate fi
executată direct comanda mysql ca în imaginea următoare:

Instrucțiunea mysql mai are însă și alți parametri care permit specificarea serverului
unde se realizează conexiunea, a userului care se va conecta și a parolei de
conectare, dacă userul are setată o parolă.

Sintaxa de apel este următoarea:

mysql –h host –u nume_utilizator -p

Semnificația parametrilor de apel este următoarea:


· -h sau –host după care se va specifica numele serverului sau adresa IP a serverului
pe care rulează serverul de baze de date MySQL;
· -u sau –user după care se specifică username-ul folosit pentru autentificarea
clientului la serverul de baze de date MySQL;
· -p sau –password – forțează citirea unei parole la conectare; poate lipsi dacă
utilizatorul respectiv nu are stabilită o parolă la conectare.

Dacă la lansarea în execuție nu se specifică valori pentru anumite opțiuni, atunci,


acele opțiuni vor primi automat valorile implicite.

Clientul mysql.exe (deci, linia de comandă) poate fi utilizat și pentru rularea unui
fișier text ce conține comenzi SQL (cu extensia .sql).

Sintaxa folosită pentru rularea unui astfel de fișier este următoarea:

mysql –h host –u nume_utilizator –p < [cale/]nume_fișier.sql

Dacă fișierul .sql nu se găsește în calea curentă, atunci, în fața numelui fișierului
trebuie trecută calea către fișier. Executarea acestei comenzi va duce la rularea
instrucțiunilor SQL ce se găsesc în fișier.

Totodată, direct în linia de comandă pot fi folosite toate instrucțiunile SQL cunoscute:
creare de baze de date, creare de tabele, ștergere, instrucțiuni de manipulare a
datelor, etc.

Alți clienți utilizați pentru interacțiunea cu baze de


date MySQL
De asemenea, mai există și utilitarul phpmyadmin utilizat în special în realizarea
aplicațiilor web. Acest utilitar care se instalează împreună cu serverul de baze de
date MySQL (este disponibil și în programre care instalează local servere MySQL
cum ar fi WAMP, XAMPP, EasyPHP, etc.) facilitează interacțiunea cu bazele de
date MySQL având o interfață ușor de înțeles și de utilizat și punând la dispoziție și
fereastră pentru executarea manuală a instrucțiunilor SQL, dar permite și realizarea
mult mai ușoară, din mediu vizual, a anumitor instrucțiuni, cum ar fi crearea de
tabele, inserarea de înregistrări, definirea de constrângeri pe coloane, etc.

O linie de comandă poate fi încheiată cu caracterul „;”. Deconectarea clientului de la


server se realizează prin execuția instrucțiunii quit sau \q.

Atunci când este utilizat clientul linie de comandă sunt foarte utile comenzile de
afișare a bazelor de date de pe server, a tabelor din bazele de date, a structurii
tabelelor, a rutinelor stocate, etc. Aceste instrucțiuni, foarte simple, de altfel, sunt mai
puțin utilizate atunci când interacțiunea cu baza de date se realizează printr-un client
ce prezintă o interfață vizuală, cum este cazul HeidiSQL sau MySQL Workbench.

Instrucțiuni utile în linia de comandă


Comenzi de vizualizare
Astfel, vizualizarea bazelor de date la care are acces un utilizator pe server se face
prin executarea instrucțiunii:

SHOW DATABASES;

În urma execuției acestei instrucțiuni, vor fi listate bazele de date existente pe server
la care are acces utilizatorul conectat. Pe lângă bazele de date create de utilizator se
mai află și baze de date esențiale pentru funcționarea serverului.

Este vorba despre baza de date mysql, cea în care serverul memorează privilegiile
diferiților clienți asupra informațiilor memorate în baza de date și despre baza de
date information_schema ce conține informații despre celelate baze de date
stocate pe server (meta-informație). Instrucțiunea suportă și clauza LIKE care
permite impunerea unor condiții pentru a afișa doar anumite baze de date.
Sintaxa instrucțiunii cu adăugarea clauzei LIKE va fi:

SHOW DATABASES LIKE 'pattern';

În instrucțiune, pattern reprezintă șirul de caractere căutat. Pot fi utilizate și


caractere de înlocuire pentru a căuta baze de date al căror nume are un anumit
format, indicat în acest pattern. Un exemplu este prezentat în continuare:

SHOW DATABSES LIKE 'a%';


Instrucțiunea aceasta va afișa toate bazele de date stocate pe server și la care
utilizatorul conectat are acces și care îndeplinesc criteriul specificat ca pattern, adică
al căror nume începe cu litera a, după care poate să urmeze orice caracter și oricâte
caractere.

De asemenea, o bază de date mai este denumită și schemă, așa că, mai există un
cuvânt cheie în MySQL, SCHEMA, care este echivalent cu DATABASE. Deci,
instrucțiunea de vizualizare a bazlor de date (schemelor) de pe serverul la care s-a
realizat conexiunea poate să fie și următoarea:

SHOW SCHEMAS LIKE 'pattern';

În cazul utilizării clientului linie de comandă devine obligatorie folosirea instrucțiunii


USE care setează una din bazele de date de pe server ca fiind bază de date în uz
(curentă) la un moment dat, adică specifică serverului faptul că toate instrucțiunile ce
vor urma se aplică obeictelor din baza de date indicată. Astfel, comanda
corespunzătoare stabilirii unei baze de date ca fiind bază de date în uz (pe care se
lucrează) este:

USE nume_bază_de_date;

Instrucțiunea care va afișa comanda de creare a unei baze de date cu parametri


stabiliți pentru baza de date indicată în instrucțiune este prezentată în continuare:

SHOW CREATE DATABASE | SCHEMA nume_bază_de_date;

Comanda care returnează toate tabelele conținute de o bază de date MySQL la care
utilizatorul conectat are acces este următoarea:

SHOW TABLES;

Comanda care permite vizualizarea structurii unei tabele stocată în baza de date
MySQL curentă are mai multe forme pe care le prezentăm în continuare:

DESCRIBE nume_tabelă;

O altă formă de afișare a coloanelor unei tabele și a proprietăților acestora este


aceasta:

SHOW COLUMNS FROM nume_tabelă;


De asemenea, comenzile care permit vizualizarea instrucțiunilor de creare a unei
tabelei și care, implicit, va afișa definițiile (proprietățile) coloanelor, precum și cea de
creare a unei tabele virtuale, sunt următoarele:

SHOW CREATE TABLE nume_tabelă;


SHOW CREATE VIEW nume_tabelă_virtuală;

Instrucțiunea anterioară poate fi utilizată pentru a crea o tabelă identică cu cea


specificată. Este ușor de dedus că, în cazul unui alt client, ce prezintă interfață
grafică de administrare, aceste comenzi sunt puțin folosite, deoarece toate aceste
obiecte de pe server sau dintr-o bază de date pot fi vizualizate, deoarece ele sunt
disponibile în cadrul diverselor ferestre puse la dispoziție de aplicația grafică de tip
client de baze de date.

Totuși, este important să trecem în revistă și aceste comenzi, altfel, simple,


deoarece într-un client de tip linie de comandă ele se folosesc frecvent și este
important ca un utilizator de baze de date (administrator, programator, etc.) să se
poată descurca și într-o astfel de aplicație fără interfață grafică.

Vizualizarea rutinelor stocate pe server se face prin executarea comenzii:


SHOW PROCEDURE | FUNCTION STATUS;

Există și comenzi care permit vizualizarea instrucțiunile de creare a rutinelor


(proceduri, funcții definite de utilizator, triggere) ce sunt stocate pe server.
Sintaxa folosită pentru a obține aceste informații este următoarea:

SHOW CREATE FUNCTION nume_funcție;


SHOW CREATE PROCEDURE nume_procedură;
SHOW CREATE TRIGGER nume_trigger;

Afișarea declanșatorilor (triggeri) ce sunt stocați pe server se realizează prin


executarea comenzii:

SHOW TRIGGERS;

Toate instrucțiunile, atât cele aparținând limbajului de descriere (definire) a datelor –


DDL (Data Description (Definition) Language) – cât și cele aparținând celor de
manipulare a datelor – DML (Data Manipulation Language) – se folosesc în același
mod, deja cunoscut, și din linia de comandă.

Comenzi de creare
Recapitulăm câteva comenzi din Limbajul de Definire a Datelor, la care vom
introduce și câteva clauze noi, dar nu vom mai prezenta instrucțiunile din Limbajul
de Manipulare a Datelor, a căror sintaxă este bine cunoscută și asupta cărora s-a
insistat pe parcursul capitolelor din primul modul al acestui curs.

Pe un server pot fi găzduite una sau mai multe baze de date, fiecare bază de date
conținând tabele. Pentru crearea unei baze de date (scheme), dacă utilizatorul
conectat are această permisiune, poate fi utilizată una din următoarele comenzi:

CREATE DATABASE nume_bază_de_date;


CREATE SCHEMA nume_schemă;

Există o restricție de a crea mai multe baze de date cu același nume. Tentativa de a
executa o instrucțiune SQL de creare a unei baze de date cu un nume care există
deja pe serverul respectiv va genera o eroare. Astfel că, pentru a determina crearea
unei baze de date doar în cazul în care aceasta nu există se poate utiliza o clauză
care verifică existența bazei respective, este vorba de clauza condițională IF NOT
EXISTS. Deci, prin introducerea acestei clazue în cadrul instrucțiunii de creare, se
va obține următoarea comandă:

CREATE DATABASE IF NOT EXISTS nume_bază_de_date;


CREATE SCHEMA IF NOT EXISTS nume_schemă;

Dacă baza de date cu numele indicat există pe server, sistemul nu va mai genera o
eroare ca în cazul instrucțiunii precedente, ci un warning, un avertisment. Aceste
avertismente (warning-uri) pot fi, la rândul lor, afișate prin executarea următoarei
instrucțiuni:

SHOW WARNINGS;

La crearea unei scheme (baze de date) se pot stabili setul de caractere


(CHARACTER SET) și un set de reguli pentru compararea caracterelor
(COLLATION) ce vor fi utilizate la stocarea datelor din tabelele ce se vor crea în
baza de date respectivă.

Aceste două proprietăți determină caracterele ce sunt disponibile pentru valorile de


tip șir de caractere din tabele și felul în care se face compararea și ordonarea
șirurilor de caractere.
Am prezentat instrucțiunea care stabilește o bază de date ca fiind curentă, adică pe
care se lucrează la un moment dat. Este vorba despre instrucțiunea USE urmată de
numele bazei de date pe care se va lucra în continuare. Această instrucțiune este
utilă în cazul utilizării MySQL din linia de comandă.

Conectarea la o singură bază de date


Setarea unei baze de date curente se poate face, în cazul utilizării liniei de comandă,
încă de la lansarea în execuție a clientului mysql.exe, prin trecerea ca argument al
instrucțiunii mysql a bazei de date ce va deveni implicită. Astfel, se va utiliza
următoarea instrucțiune de conectare:
mysql –u nume_user nume_bază_de_date

Dacă se realizează în felul acesta conexiunea, direct la o bază de date de pe server,


ci nu doar la server, urmând ca apoi să se aleagă o bază de date pentru lucru, nu
mai trebuie executată instrucțiunea USE.

Comenzi de ștergere
Comanda utilizată pentru ștergerea unei baze de date (scheme) de pe server, în
cazul în care utilizatorul conectat, are această permisiune, este prezentată în
continuare:
DROP DATABASE nume_bază_de_date;
DROP SCHEMA nume_bază_de_date;
Atenție, dacă baza de date conține tabele populate cu informații, ștergerea unei
scheme (baze de date) va duce la ștergerea tuturor obiectelor (tabele, tabele
virtuale, proceduri stocate, etc.) și a informațiilor (înregistrărilor) conținute de baza de
date respectivă.

Dacă se încearcă ștergerea unei baze de date care nu există pe server, atunci,
sistemul va genera o eroare care va semnala acest aspect.

Pentru a evita apariția unei erori, la fel ca în cazul creării schemei, se poate și la
ștergere adăuga la instrucțiunea DROP o clauză condițională ce verifică existența
bazei de date ce apare în instrucțiunea de ștergere. Este vorba despre clauza IF
EXISTS. Astfel, instrucțiunea de ștergere a unei baze de date devine, prin
adăugarea acestei clauze, următoarea:
DROP DATABASE IF EXISTS nume_bază_de_date;
DROP SCHEMA IF EXISTS nume_bază_de_date;
Dacă este executată această instrucțiune, iar baza de date a cărei ștergere se
încearcă nu se găsește pe server, sistemul nu va mai genera o eroare, ci un
avertisment (warning).

În MySQL există și comenzi care permit modificarea parametrilor unei baze de date.
Astfel, se poate modifica setul de caractere utilizat la un moment dat într-o bază de
date sau setul de reguli impuse pentru compararea caracterelor dintr-un set și pentru
ordonarea lor (collation).

Comenzi de modificare
Instrucțiunea utilizată în acest sens este ALTER DATABASE sau ALTER SCHEMA
și poate fi executată pentru modificarea ambilor parametri simultan, sau doar pentru
modificarea unuia dintre ei.

În continuare vom prezenta cele trei variante care permit modificarea, pe rând a
setului de caractere, a collation, dar și modificarea simultană a celor doi parametri.

Sintaxa instrucțiunii ALTER DATABASE ce va produce aceste modificări enunțate


anterior este:
ALTER DATABASE nume_bază_de_date CHARACTER SET set_caractere;
ALTER DATABASE nume_bază_de_date COLLATE collation_utilizat;
ALTER DATABASE nume_bază_de_date CHARACTER SET set_caractere
COLLATE colaltion_utilizat;

În locul instrucțiunii ALTER DATABASE poate fi utilizată, în același mod, comanda


ALTER SCHEMA.

Iată, în continuare, un exemplu concret în care unei baze de date cu numele


bd_test i se stabilește setul de caractere utf8 și collation-ul utf8_romanian_ci.
Vor fi prezentate toate cele trei variante de comenzi, atât pentru modificarea pe rând
a fiecărui parametru, cât și a ambilor parametri simultan:
ALTER DATABASE bd_test CHARACTER SET utf8;
ALTER DATABASE bd_test COLLATE utf8_romanian_ci;
ALTER DATABASE bd_test CHARACTER SET utf8 COLLATE utf8_romanian_ci;
De reținut faptul că nu există și o instrucțiune de redenumire, de modificare a
numelui bazei de date.

Poate fi utilizată instrucțiunea ALTER DATABASE sau ALTER SCHEMA pentru a


modifica parametrii unei baze de date și fără a specifica numele bazei de date. În
acest caz se vor modifica parametrii bazei de date curente, care se consideră bază
de date implicită.

Back-up și restore
În continuare vom expune modalități de realizare a back-up-ului, respectiv, restore-
ului bazelor de date din linia de comandă. Practic, în urma operației de back-up se
va salva un fișier într-o anumită locație de pe disc de unde poate fi restaurată o bază
de date (sau mai multe baze de date de pe server) în cazul în care intervin
probleme.
Back-up
Back-up-ul bazei de date se face prin comanda mysqldump urmată de numele
bazei de date și de fișierul în care se face salvarea. Este posibilă și o opțiune ce
specifică salvarea tuturor bazelor de date de pe server. Comanda are următoarea
sintaxă și se execută din directorul bin al mysql, așadar înainte de conectarea la
mysql:

mysqldump nume_bază_de_date > cale\nume_fișier.sql

Comanda următoare este utilizată pentru salvarea în fișier și a instrucțiunilor de


creare a bazei de date. În primul exemplu nu se salvează instrucțiunea de creare a
bazei de date, iar dacă baza de date nu există pe server, ea trebuie creată înainte
de executarea instrucțiunilor din fișierul de back-up.

mysqldump --databases nume_bază_de_date > cale\nume_fișier.sql

Comanda următoare va realiza un fișier de back-up pentru toate bazele de date


aflate pe serverul la care s-a realizat conectarea.

mysqldump --all-databases > cale\nume_fișier.sql

Restore
Comanda prin care se realizează restaurarea unei baze de date este cea de
încărcare și de executare a unui fișier extern de la o anumită locație de pe disc.
Comanda se va executa din directorul bin al mysql și are următoarele forme (fără
numele bazei de date dacă există instrucțiunea de creare în fișier sau conține și
numele bazei de date când baza de date există pe server și se refac doar anumite
tabele):

mysql < cale\nume_fișier.sql


mysql nume_bază_de_date < cale\nume_fișier.sql

Comanda următoare este folosită pentru a crea o bază de date dacă instrucțiunea
de creare nu se regăsește în fișierul .sql ce va fi executat:
mysqladmin create nume_bază_de_date

Limbajul de Control al Datelor


Introducere
Limbajul de Control al Datelor (DCL – Data Control Language) se referă la
anumite elemente ale limbajului SQL care sunt utilizate pentru asigurarea accesului
controlat la date.

Acest limbaj conține instrucțiuni pentru crearea utilizatorilor, definirea de parole de


acces pentru utilizatori și acordarea, respectiv, eliminarea de drepturi de acces la
obiecte din baza de date pentru acești utilizatori. Evident, avem și instrucțiuni pentru
ștergerea utilizatorilor din baza de date. Când spunem drepturi de acces la obiectele
din baza de date, ne referim la ceea ce este permis de către administrator unui
utilizator să facă în baza de date. Astfel, un utilizator poate să primească drepturi
pentru modificarea datelor, pentru introducere, pentru ștergere, etc.

Administrarea utilizatorilor
Crearea de utilizatori noi
Pentru crearea unui utilizator se folosește instrucțiunea CREATE USER care are
următoarea sintaxă:
CREATE USER specificație_utilizator [, specificație_utilizator ...];
În instrucțiune, specificație_utilizator este de forma:
nume_utilizator@host [IDENTIFIED BY [PASSWORD] 'parola']
Crearea unui utilizator fără parolă se face astfel:
CREATE USER 'bogdan'@localhost;
Utilizatorul bogdan se va conecta la baza de date fără parolă. Conectarea este
realizată la localhost, deci, la serverul instalat pe calculatorul propriu. O conexiune
la baza de date fără parolă este nesigură. Pentru a fi sigură o conexiune, utilizatorul
trebuie să aibă definită și o parolă:
CREATE USER 'bogdan'@localhost IDENTIFIED BY 'qwe1234';

Setarea unei parole pentru un utilizator


Dacă un utilizator există deja în baza de date, instrucțiunea prin care se adaugă o
parolă acelui utilizator este SET PASSWORD care are următoarea sintaxă:
SET PASSWORD FOR user = PASSWORD('parolă');
Iată și un exemplu de atribuire a unei parole userului bogdan, care a fost creat
anterior:
SET PASSWORD FOR USER 'bogdan'@localhost = PASSWORD('qwe1234');
Adăugarea parolei cu ajutorul funcției PASSWORD va cripta parola. Astfel, parola nu
va stocată în clar în baza de date, ci ca un șir de caractere care reprezintă
codificarea (criptarea) șirului care a fost stabilit ca parolă pentru fiecare utilizator
(user). În urma criptării parolei se va obține un șir de caractere în format
hexazecimal (deci, conține cifre și litere de la A la F) de lungime 41 de caractere și
începe cu caracterul „*”.

Parola setată pentru un utilizator este criptată printr-un algoritm unidirecțional de


criptare, deci, nu există posibilitatea de a decripta aceste parole. Atunci cînd un
utilizator are stabilită o parolă pentru conectare, în momentul autentificării aceasta va
fi solicitată.

Utilizatorii (userii) vor fi stocați, în momentul creării în tabela user, care este o tabelă
aflate în schemele implicte ale MySQL, care vin direct instalate pe server. Mai
precis, tabela user se află în schema (baza de date) mysql. După cum observăm la
crearea userului se specifică numele utilizatorului între ghilimele, fiind șir de
caractere, după care urmează simbolul „@”, care delimitează numele utilizatorului
de host-ul (serverul) la care se conectează. Host-ul este stocat în tabelă tot ca un șir
de caractere, de aceea este plasat tot între ghilimele.

Se poate crea un utilizator și fără specificarea host-ului, în acest caz, userul astfel
creat se poate conecta la orice host.

Tabela ce conține utilizatorii


Pentru vizualizarea userilor se poate interoga tabela user din baza de date mysql,
printr-o instrucțiune simplă SELECT:
SELECT host, user, password FROM mysql.user;
Setarea unei parole pentru un utilizator se mai poate realiza și prin actualizarea
tabelei user din baza de date mysql prin executarea unei operații UPDATE,
operație care are forma următoarea:
UPDATE mysql.user SET password = PASSWORD('parolă')
WHERE user = 'nume_utilizator'
AND host = 'nume_host';

Redenumirea unui utilizator


Redenumirea unui utilizator se realizează prin comanda RENAME, care va înlocui
numele de utilizator cu unul nou, fără a afecta celelalte coloane ale userului
respectiv, și care are forma:
RENAME USER 'nume_utilizator'@'host' TO 'nume_nou_utilizator'@'host';

Ștergerea unui utilizator


Pentru ștergerea unui utilizator avem comanda DROP USER care are sintaxa
următoarea:
DROP USER 'nume_utilizator'@'host';
Observăm astfel că instrucțiunile de creare, respectiv, de ștergere utilizatori în baza
de date sunt CREATE, respectiv, DROP, instrucțiuni deja cunoscute care aparțin
Limbajul de Definire (Descriere) a Datelor.

Toate aceste operații asupra utilizatorilor (creare, stabilire parolă, redenumire user și
ștergere) sunt realizate de către utilizatorul root, care are toate aceste drepturi
implicite.

Acest utilizator, root, folosit la conectarea la serverul MySQL (fără parolă pe


conexiunile locale) este un super user sau un user cu drepturi de administrare
(admin).

Sistemul de privilegii MySQL


Termenul de privilegiu se referă la un drept al unui utilizator de a acționa într-un
anumit fel asupra unui obiect al unei baze de date (tabelă, coloană, etc. ). Funcția
principală a sistemului de privilegii MySQL este aceea de a autentifica și autoriza
utilizatori conectați la serverul de baze de date MySQL. Autorizarea se referă la
permisiunea de a executa diverse instrucțiuni în baza de date.

La instalarea MySQL este creat implicit un utilizator numit root care are toate
drepturile activate. Din motive de securitate, acest utilizator este recomdat să fie
utilizat doar pentru administrare. Deci, el va acorda drepturi celorlalți utilizatori.

Pentru fiecare utilizator care va interacționa cu baza de date trebuie creat un user
nou, iar fiecare user creat va primi o serie de drepturi (privilegii) pe care le poate
utiliza pentru a interacționa cu obiectele din baza de date.

La crearea de utilizatori nu este obligatorie stabilirea unei parole pentru autentificare,


este permisă crearea unui utilizator fără parolă, astfel că acest utilizator se poate
autentifica doar prin introducerea numelui de utilizator (user). Totuși, din motive de
securitate, recomandarea este ca fiecărui utilizator creat să-i fie asociată o parolă.

Recomandarea este ca un utilizator să primească doar drepturile ce îi sunt necesare


pentru îndeplinirea sarcinilor ce i-au fost alocate, aceasta înseamnă ca un utilizator
să primească cel mai scăzut nivel de privilegii care-i permit acest lucru. Acest
principiu poartă numele de principiul minimului de privilegii necesare.

Privilegiile puse la dispoziție de MySQL


Stocarea informațiilor despre privilegiile puse la dispoziție de MySQL se face în
tabelele user, db, host, tables_prv și columns_priv din baza de date implicită
mysql. Serverul citește conținutul acestor tabele atunci când sistemul de privilegii
trebuie să acționeze.

Astfel, se face o verificare automată dacă utilizatorul care încearcă să efectueze o


anumită operație asupra bazei de date are acest drept.

Tabelul următor conține informații despre sistemul de privilegii, împreună cu


contextul și semnificația lor:

Privilegiu Denumire Context Semnificație


coloană

CREATE Create_priv Baza de date, Permite crearea unei baze de


tabele, date și a tabelelor
indecși

ALTER Alter_priv Tabele Permite redenumirea sau


modificarea structurii
tabelelor

DROP Drop_priv Baza de date, Permite ștergerea unei baze


tabele de date sau a tabelelor

INSERT Insert_priv Tabele Permite adăugarea


înregistrărilor

UPDATE Update_priv Tabele Pemite modificarea


înregistrărilor

DELETE Delete_priv Tabele Permite ștergerea


înregistrărilor

SELECT Select_priv Tabele Permite selectarea datelor

INDEX Index_priv Tabele Permite crearea și ștergerea


indecșilor

GRANT Grant_priv Baza de date, Permite delegarea privilegiilor


tabele către un alt utilizator

SHUTDOWN Shutdown_priv Administrare Permite oprirea serverului din


server programul client

PROCESS Process_priv Administrare Permite vizualizarea și


server oprirea proceselor aflate în
execuție

FILE File_priv Acces la Permite schimbul de date


fișiere externe între tabele și fișiere

Câteva dintre aceste privilegii necesită o atenție sporită, deoarece prin acordarea
acestor drepturi pot fi realizate modificăr substanțiale în baza de date.

Privilegiul GRANT permite utilizatoril să dea mai departe privilegiile lor și altor
utilizatori. Astfel, doi utilizatori cu privilegii diferite și le pot combina.

Privilegiul ALTER permite, printre altele, redenumirea tabelelor, modifcând astfel


baza de date și putând duce la inutilizarea unor programe ce foloseau numele
anterioare ale tabelelor respective.

Privilegiul FILE poate fi utilizat pentru a citi informații sensibile de pe server.


Privilegiul SHUTDOWN să posibilitatea opririi serverul de la distanță, în timp ce
privilegiul PROCESS poate fi folosit pentru vizualizarea conținutului interogărilor ce
se execută în acel moment, inclusiv cele de setare a parolei, oferind și posibilitatea
de oprire forțată a conexiunii altor utilizatori.

Administrarea privilegiilor
Adăugarea de drepturi sau privilegii pentru utilizatori se realizează prin utilizarea
instrucțiunii GRANT, iar eliminarea de privilegii (drepturi) pe care anumiți utilizatori le
dețin se realizează prin utilizarea instrucțiunii REVOKE. Comanda pentru eliminarea
sau retragerea privielgiilor (permisunilor, drepturilor), REVOKE, este, practic inversa
comenzii GRANT.

Niveluri de privilegii
Comanda GRANT permite crearea utilizatorilor și/sau stabilirea, respectiv,
modificarea drepturilor acestora pe patru nivele de privilegii:
· GLOBAL – se aplică tuturor bazelor de date de pe server;
· DATABASE – se aplică tuturor tabelelor dintr-o bază de date;
· TABLE – se aplică tuturor coloanelor dintr-o tabelă;
· COLUMN – se aplică doar coloanelor specificate explicit.

Acordarea de privilegii
Sintaxa generală a comenzii de acordare de privilegii (GRANT) este următoarea:
GRANT
tip_privilegiu [(listă_coloane)] [,tip_privilegiu [(listă_coloane)]] …
ON [tip_obiect] nivel_privilegiu
TO nume_utilizator [IDENTIFIED BY 'parola']
[WITH GRANT OPTION | opțiuni_resurse];

Semnificația clauzelor comenzii GRANT este următoarea:


· tip_privilegiu – reprezintă comenzile pe care utilizatorul are dreptul să le execute;
lista de privilegii pe care le va primi un utilizator se separă prin virgulă; privilegiile pot
fi dintre cele prezentate anterior (INSERT, UPDATE, SELECT, etc.) sau poate fi
specificată clauza specială ALL PRIVILEGES (sau este suficient și simplu, ALL)
care acordă toate privilegiile posibile. Pentru a crea doar utilizator fără a i se acorda
nici un privilegiu, se va specifica clauza USAGE.
· listă_coloane – reprezintă o listă formată din una sau mai multe coloane pe care se
acordă privilegiul specificat anterior. Astfel, privilegiile sunt acordate la nivel de
coloană. Clauza este opțională.
· tip_obiect nivel_privilegiu – reprezintă obiectul asupra căruia au fost stabilite
privilegiile (numele unei baze de date, al unei tabele). Pentru acordarea de drepturi
pe toate bazele de date se va specifica *.*, acesta fiind nivelul GLOBAL de privilegii.
Poate fi folosit și doar semnul * pentru acordarea privilegiilor la nivel global, dar, în
acest caz, nu trebuie să fie selectată nici o bază de date pentru că, dacă este o bază
de date selectată, privilegiile se vor acorda doar pe acea bază de date (ar
corespunde nivelului DATABASE). Nivelul DATABASE se specifică, explicit, prin
nume_bază_de_date.*, în timp ce nivelul TABLE se specifică prin
nume_bază_de_date.nume_tabelă. Dacă se precizează doar nume_tabelă, atunci
se consideră că este vorba despre tabela din baza de date selectată. Nivelul
COLUMN se va obține prin specificarea unei liste de coloane. Privilegiile pot fi
acordate și asupra altor obiecte din baza de date (de exemplu, rutine) sub forma
nume_bază_de_date.nume_rutină.
· nume_utilizator – este numele utilizatorului care va primi permisiunile (privilegiile)
descrise anterior. Numele utilizatorului poate conține și adresa serverului la care se
va conecta. Prin această specificare a adresei serverului se poate și restricționa,
practic, pentru un utilizator, accesul la anumite stații. Un grup de stații poate fi
desemnat prin folosirea caracterului „%”. De exemplu, '%.ro' reprezintă conectarea
utilizatorului indicat la toate stațiile de pe domeniul .ro.
· parola – reprezintă parola cu care utilizatorul indicat se va conecta la server; dacă
lipsește opțiunea IDENTIFIED BY, atunci utilizatorul se va conecta fără parolă, ceea
ce reprezintă o problemă de securitate, ce ar trebui evitată.
· WITH GRANT OPTION – va permite utilizatorului să dea privilegii echivalente cu ale
sale altor utilizatori. Opțiunea poate fi utilizată pentru a delega dreptul de
administrare altor useri.
· WITH opțiuni_resurse – va reprezenta opțiunile de resurse ce sunt alocate, se pot
preciza diverse limitări pentru anumite operații efectuate de un user.
Valorile care se pot întâlni la opțiuni_resurse sunt:
· MAX_QUERY_PER_HOUR contor – numărul maxim de interogări permise pe oră;
· MAX_UPDATES_PER_HOUR contor – numărul maxim de comenzi UPDATE pe
oră;
· MAX_CONNECTIONS_PER_HOUR contor – numărul maxim de conexiuni pe oră;
· MAX_USER_CONNECTIONS contor – numărul maxim de conexiuni permise.

Conectarea la server folosind parola


Parola se poate adăuga unui utilizator creat fără parolă, în cadrul comenzii GRANT,
prin instrucțiunea prezentată anterior, SET PASSWORD FOR. Conectarea la server
din clientul linie de comandă, cu solicitarea parolei pentru userul care realizează
conexiunea este:
mysql –h host –u nume_utilizator –p
După lansarea acestei comenzi, clientul va solicita parola de conectare:
ENTER PASSWORD: ******

Vizualizarea privilegiilor
Pentru a consulta privilegiile acordate prin comanda GRANT, sau, implicit, la
definirea unui utilizator (user) nou se va executa utmătoarea instrucțiune:
SHOW GRANTS [FOR nume_utilizator];
Dacă un utilizator va rula instrucțiuni pentru care nu a primit drepturi (privilegii),
atunci sistemul va genera o eroare care va semnala acest lucru, adică o eroare care
va informa asupra faptului că utilizatorul respectiv nu are privilegii pentru a efectua
respectiva operație.

Revocarea (eliminarea) privilegiilor


Revocarea sau eliminarea privilegiilor acordate unui utilizator se poate realiza prin
instrucțiunea REVOKE. Sintaxa generală a comenzii de eliminare a privilegiilor este
următoarea:
REVOKE
tip_privilegiu [(listă_coloane)] [,tip_privilegiu [(listă_coloane)]] …
ON [tip_obiect] nivel_privilegiu
FROM nume_utilizator1 [, nume_utilizator2] …;
Revocarea tuturor privilegiilor anumitor utilizatori se poate realiza printr-o singură
comandă REVOKE, comandă ce are forma următoare:
REVOKE
ALL PRIVILEGES, GRANT OPTION
FROM nume_utilizator1 [, nume_utilizator2] …;
Eliminarea privilegiilor ce au fost acordate prin clauza WITH GRANT OPTIONS a
comenzii GRANT, adică permisunea ca un utilizator să poată acorda la rândul lui
privilegii altora, se va face prin următoarea comandă:
REVOKE
GRANT OPTION
ON [tip_obiect] nivel_privilegiu
FROM nume_utilizator1 [, nume_utilizator2] …;
Comanda FLUSH PRIVILEGES este utilizată pentru a reîncărca permisiunile unui
utilizator după ce s-au efectuat modificări asupra lui. Altfel, dacă nu se execută
această comandă, modificările făcute manual asupra tabelelor de privilegii (drepturi)
nu au efect dacă nu se restartează serverul MySQL.

Securitatea bazelor de date


Fundamentul oricărui sistem de securitate este reprezentat de autentificarea și
autorizarea utilizatorilor. Așadar, partea aceasta de gestiune a privilegiilor este foarte
importantă. Acordarea de privilegii pentru anumite operații sensibile trebuie
gestionată cu foarte mare atenție, deoarece se pot aduce prejudicii grave bazei de
date prin alterarea datelor stocate sau ștergerea anumitor obiecte din baza de date.

Autentificarea înseamnă procesul prin care un utilizator este confirmat pentru a


exista certitudinea că are identitatea pe care o asumă. Autentiticarea se realizează
prin introducerea de user și parolă.

De aceea, repetăm, este foarte important ca un administrator de baze de date,


atunci când creează utilizatori să seteze și parole pentru aceștia. Crearea de
utilizatori fără parolă prezintă riscuri mari de securitate.

Autorizarea înseamnă procesul prin care se verifică dacă un utilizator are


permisiunea de a executa operația pe care dorește să o execute. Operațiile pe care
un utilizator este autorizat să le execute sunt cele pentru care administratorul bazei
de date a alocat privilegii userului respectiv.

Printre operațiile ce sunt frecvent securizate amintim:


· Accesul la caracteristicile de administrare a bazelor de date (creare de tabele,
modificarea structurii tabelelor, ștergerea tabelelor existente, etc.);
· Accesul la anumite baze de date sau tabele;
· Tipul de acces (doar pentru citire, acces la anumite coloane, etc.);
· Accesul la tabele doar prin intermediul tabelelor virtuale sau al procedurilor
stocate;
· Limitarea capacității de gestionare a conturilor de utilizator.

S-ar putea să vă placă și