Aprobat de cei mai buni programatori ruși


REVOKE priv_type [(column_list)] [, priv_type [(list_coloane]]. ] ON de la numele utilizatorului [nume utilizator]. ]

GRANT este inclus în MySQL de la versiunea 3.22.11 și mai mult. În versiunile anterioare ale MySQL, instrucțiunea GRANT nu face nimic.







Comenzile GRANT și REVOKE permit administratorilor de sistem să creeze utilizatori MySQL, precum și să le acorde drepturi utilizatorilor sau să lege drepturile pe patru nivele de privilegii:

Nivelul global Privilegiile globale se aplică tuturor bazelor de date de pe serverul specificat. Aceste privilegii sunt stocate în tabela mysql.user. Baza de date Baza de date privilegiile de bază se aplică tuturor tabelelor din baza de date specificată. Aceste privilegii sunt stocate în tabelele mysql.db și mysql.host. Preferințele tablei la nivel de tabel se aplică tuturor coloanelor din tabelul specificat. Aceste privilegii sunt stocate în tabela mysql.tables_priv. Nivelul coloanei Privilegiile coloanei se aplică coloanelor individuale din tabelul specificat. Aceste privilegii sunt stocate în tabela mysql.columns_priv.

Tabelul prezintă valorile posibile ale parametrului priv_type pentru instrucțiunile GRANT și REVOKE.

Setează toate privilegiile simple, cu excepția opțiunii WITH GRANT OPTION

Un sinonim pentru `` no privilegii ''.

Puteți seta valoarea USAGE dacă doriți să creați un utilizator fără privilegii.

CREAȚI privilegii TABLURI TEMPORARE. EXECUTE. TABLURI DE BLOCARE. REPLICARE. SHOW DATABASES și SUPER sunt noi pentru versiunea 4.0.2. Pentru a utiliza aceste noi privilegii după trecerea la versiunea 4.0.2, trebuie să executați scriptul mysql_fix_privilege_tables.

În versiunile mai vechi ale MySQL, privilegiul PROCESS acordă aceleași drepturi ca și noul privilegiu SUPER.

Pentru a refuza utilizatorului privilegiile acordate prin comanda GRANT. utilizați valoarea priv_type în opțiunea GRANT.

Pentru tabel, puteți specifica numai următoarele valori priv_type. SELECT. INSERT. UPDATE. DELETE. CREATE. DROP. GRANT. I NDEX și ALTER.

Pentru o coloană, puteți specifica numai următoarele valori priv_type (atunci când utilizați operatorul listă column_): SELECT. INSERT și UPDATE.

Privilegiile globale pot fi specificate utilizând sintaxa ON *. *. și privilegiile bazei de date - utilizând sintaxa ON db_name. *. Dacă specificați ON * când baza de date curentă este deschisă, vor fi setate privilegii pentru această bază de date. (Atenție: dacă specificați ON * în absența unei baze de date curente deschise, aceasta va afecta privilegiile globale!)

Pentru a putea determina drepturile utilizatorilor de pe anumite computere, MySQL oferă posibilitatea de a specifica un nume de utilizator (user_name) în formularul user @ host. Dacă doriți să specificați utilizatorul șir. care conține caractere speciale (cum ar fi `- ') sau șirul gazdă. care conține caractere speciale sau wildcards (cum ar fi "%"), puteți include în ghilimele numele computerului sau al utilizatorului la distanță (de exemplu, "test-user" @ "test-hostname").

În numele computerului la distanță, puteți specifica și metacaractere. De exemplu, utilizatorul @ "% .loc.gov" se referă la utilizatorul tuturor computerelor la distanță ale domeniului loc.gov. și utilizatorul @ "144.155.166.%" se referă la utilizatorul tuturor computerelor la distanță de pe subrețeaua 144.155.166 clasa C.

O formă simplă de utilizator este un sinonim pentru utilizatorul @ "%".

MySQL nu acceptă metacaractere în numele utilizatorilor. Utilizatorii anonimi sunt definiți prin inserarea înregistrărilor User = '' în tabela mysql.user sau crearea unui utilizator cu un nume gol folosind comanda GRANT.

Notă. Dacă utilizatorii anonimi au permisiunea de a se conecta la serverul MySQL, trebuie să acordați privilegii tuturor utilizatorilor locali ca user @ localhost. pentru că în caz contrar, atunci când încercați să vă conectați la MySQL de la computerul local din tabela mysql.user, va fi utilizată intrarea pentru utilizatorul anonim!

Pentru a verifica dacă se întâmplă așa ceva pe computer, executați următoarea interogare:

În momentul de față, comanda GRANT acceptă numele computerelor, tabelelor, bazelor de date și coloanelor la distanță, cu o lungime maximă de 60 de caractere. Numele de utilizator nu poate depăși 16 caractere.

Privilegiile pentru o tabelă sau o coloană se formează utilizând operatorul logic OR din privilegiile fiecăruia dintre cele patru nivele. De exemplu, dacă tabela mysql.user indică faptul că utilizatorul are un privilegiu global SELECT. Acest privilegiu nu este anulat la nivelul bazei de date, al tabelului sau al coloanei.







Privilegiile pentru o coloană pot fi calculate după cum urmează:

În cele mai multe cazuri, drepturile utilizatorilor sunt definite numai la un nivel de privilegiu, deci această procedură nu este de obicei atât de complexă ca cea descrisă mai sus. Pentru informații detaliate despre secvența acțiunilor de verificare a privilegiilor, consultați secțiunea 4.2 Probleme generale de securitate și sistemul de privilegii de acces MySQL.

Dacă privilegiile sunt furnizate de o combinație a utilizatorului / computerului la distanță care nu este prezent în tabela mysql.user. apoi se adaugă o intrare la ultima intrare, care rămâne în tabel până când este șters cu comanda DELETE. Cu alte cuvinte, comanda GRANT poate crea înregistrări utilizator în tabel, dar comanda REVOKE nu le poate șterge. Acest lucru trebuie făcut cu comanda DELETE.

Dacă un utilizator nou este creat în versiunile MySQL 3.22.12 și sunt acordate privilegii globale sau globale, parola utilizatorului va fi atribuită de operatorul IDENTIFIED by. dacă este specificat. Dacă utilizatorul are deja o parolă, atunci această parolă va fi înlocuită cu una nouă.

Dacă nu doriți să trimiteți parola în text clar, puteți utiliza parametrul PASSWORD parola criptată obținută prin utilizarea parolei SQL () funcția sau make_scrambled_password C API (char * la, const char * parola).

Avertizare. dacă nu specificați o instrucțiune IDENTIFIED BY la crearea unui nou utilizator. un utilizator va fi creat fără o parolă. Este nesigur din punct de vedere al securității.

Parolele pot fi de asemenea setate utilizând comanda SET PASSWORD. Vezi secțiunea 5.5.6 Sintaxă pentru comanda SET.

Dacă aveți privilegii de bază de date, în tabela mysql.db este creată o intrare, dacă este necesar. Această intrare este ștearsă după ce toate privilegiile pentru această bază de date au fost șterse de comanda REVOKE.

Dacă utilizatorul nu are niciun privilegiu pentru tabel, tabela nu este afișată atunci când utilizatorul solicită o listă de tabele (de exemplu, folosind operatorul SHOW TABLES).

Operatorul WITH GRANT OPTION permite utilizatorului să acorde altor utilizatori orice privilegii pe care el însuși le are la nivelul de privilegii specificat. Atunci când acordați privilegiul GRANT, este necesar să fiți precaut, deoarece doi utilizatori cu privilegii diferite pot combina privilegiile lor!

Parametrii MAX_QUERIES_PER_HOUR #. MAX_UPDATES_PER_HOUR # și MAX_CONNECTIONS_PER_HOUR # sunt noi în MySQL versiunea 4.0.2. Acești parametri limitează numărul de solicitări, actualizări și conectări pe care un utilizator le poate efectua în decurs de o oră. Dacă este setat la 0 (implicit), înseamnă că nu există restricții pentru acest utilizator. Vezi secțiunea 4.3.6 Restricționarea resurselor utilizatorilor.

Nu puteți da altui utilizator un privilegiu pe care nu îl dețineți. Privilegiul GRANT vă permite să acordați numai acele privilegii pe care le aveți.

Rețineți că, dacă utilizatorul are privilegiul GRANT la un anumit nivel de privilegiu, orice privilegii utilizatorul are deja (sau care va fi dat în viitor!) La acest nivel sunt, de asemenea, grantable de acel utilizator. Să presupunem că utilizatorul are privilegiul INSERT în baza de date. Dacă apoi atribuiți un privilegiu SELECT bazei de date și specificați WITH OPTION GRANT. utilizatorul poate atribui nu numai privilegiul SELECT. dar, de asemenea, INSERT. Dacă acordați utilizatorului privilegiul UPDATE din baza de date. utilizatorul poate atribui INSERT. SELECT și UPDATE.

Nu trebuie să alocați privilegii ALTER la utilizatorii obișnuiți. Acest lucru oferă utilizatorului posibilitatea de a distruge sistemul de privilegii prin redenumirea tabelelor!

Rețineți că dacă utilizați privilegii pe o masă sau o coloană pentru un singur utilizator, serverul verifică privilegiile tabelelor și coloanelor pentru toți utilizatorii și acest lucru încetinește puțin MySQL.

Când începe mysqld-ul, toate privilegiile sunt citite în memorie. Franciza bazei de date, masă și coloana va intra în vigoare imediat, iar nivelul de privilegii de utilizator - data viitoare când utilizatorul se conectează. Modificări ale tabelelor de atribuire a privilegiilor care sunt efectuate utilizând comenzile GRANT și REVOKE. prelucrate de server imediat. Dacă modificați tabelele de grant manual (folosind comanda INSERT. UPDATE, etc), trebuie să rulați declarația PRIVILEGII flush sau un mysqladmin flush-uri privilegiu, pentru a spune server pentru a reîncărca tabelele de grant. Vezi secțiunea 4.3.3 Atunci când schimbările de privilegii au efect.

Cele mai semnificative diferențe dintre comanda GRANT a versiunilor ANSI SQL și MySQL sunt următoarele:

  • În MySQL, privilegiile sunt atribuite unei combinații de un nume de utilizator + un computer la distanță și nu doar un nume de utilizator.
  • ANSI SQL nu are privilegii globale și privilegii la nivel de bază de date, iar ANSI SQL nu acceptă toate tipurile de privilegii MySQL. La rândul său, MySQL nu acceptă privilegiile ANSI SQL TRIGGER. EXECUTE sau UNDER.
  • Structura privilegiilor ANSI SQL este ierarhică. Dacă ștergeți un utilizator, toate privilegiile atribuite acestui utilizator vor fi anulate. În MySQL, privilegiile atribuite nu sunt anulate automat, trebuie șterse dacă este necesar.
  • În MySQL, un utilizator poate aplica o declarație INSERT în tabel dacă are privilegiul INSERT pentru doar câteva coloane din acest tabel. Coloanele pentru care privilegiul INSERT nu este disponibil. vor fi setate la valorile lor implicite. ANSI SQL necesită un privilegiu INSERT pentru toate coloanele.
  • Când ștergeți o tabelă în ANSI SQL, toate privilegiile pentru acel tabel sunt anulate. Dacă anulați un privilegiu în ANSI SQL, toate privilegiile care au fost atribuite pe baza acestui privilegiu vor fi, de asemenea, anulate. În MySQL, privilegiile pot fi șterse numai cu ajutorul comenzii REVOKE sau prin schimbarea tabelelor de atribuire a privilegiilor MySQL.

Pentru o descriere a utilizării REQUIRE. consultați secțiunea 4.3.9 Utilizarea conexiunilor securizate.

MySQL.RU. Aprobat de cei mai buni programatori ruși






  • Articole similare

    Trimiteți-le prietenilor: