Pełną dokumentacje maja tylko bezużyteczne programy.
DCL - użytkownicy i ich uprawnienia

System uprawnień w MySQL-u pozwala na dokładne zdefiniowanie praw dostępu każdego użytkownika do określonej bazy, tabeli czy kolumny. Oparty jest on na 5 tabelach znajdujących się w bazie mysql:

     mysql> USE mysql
     DATABASE changed
 
     mysql> SHOW TABLES;
     +-----------------+
     | Tables_in_mysql |
     +-----------------+
     | columns_priv    |
     | db              |
     | host            |
     | tables_priv     |
     | user            |
     +-----------------+ 
 

Każda z tych tabel określa uprawnienia użytkownika na innym poziomie dostępu. Tabela db określa dostęp do baz danych, host definiuje dostęp do hostów baz danych, user określa listę wszystkich użytkowników serwera bazy danych, a tabele tables_priv i columns_priv - uprawnienia odpowiednio do tabel i ich kolumn.

Wszelkie zmiany dotyczące tabel w bazie mysql mogą być dokonywane za pomocą poleceń SELECT, INSERT, UPDATE lub DELETE. Wygodniej i sprawniej można jednak zarządzać uprawnieniami za pomocą poleceń GRANT (dodawanie uprawnień) i REVOKE (odbieranie uprawnień).

Zakładanie konta użytkownika - instrukcja CREATE USER

span style="color: #ff0000;">'haso''haso']] ...

Instrukcja służy do założenia nowego konta MySQL. Aby z niej korzystać sam musisz posiadać globalny przywilej CREATE USER lub INSERT w stosunku do bazy mysql. Dla każdego konta instrukcja CREATE USER zakłada nowy rekord w tabeli mysql.user bez nadawania mu żadnych uprawnień (przywilejów). Próba założenia konta o nazwie już istniejącej spowoduje błąd.

Do konta można opcjonalnie przypisać hasło opcjonalną klauzulą IDENTIFIED BY. Nazwa użytkownika i hasło podawane są tak samo, jak w instrukcji GRANT.

Instrukcja CREATE USER została dodana w MySQL 5.0.2. W starszych wersjach konto użytkownika było tworzone automatycznie w momencie nadawania uprawnień dla nieistniejącego dotąd w systemie konta.

Usuwanie konta użytkownika - instrukcja DROP USER

 

Instrukcja służy do usunięcia konta MySQL. Aby z niej korzystać sam musisz posiadać globalny przywilej CREATE USER lub DELETE w stosunku do bazy mysql. Dla każdego konta z listy DROP USER usuwa odpowiedni rekord w tabeli mysql.user. Próba usunięcia konta o nieistniejącej nazwie spowoduje błąd.

Instrukcja DROP USER została dodana w MySQL 4.1. Jest ona równoważna z poleceniami:

     DELETE FROM mysql.user
            WHERE User='nazwa_uytkownika' AND Host='nazwa_hosta';
     FLUSH PRIVILEGES;

Polecenie FLUSH PRIVILEGES przeładowuje uprawnienia. Gdybyśmy tego nie zrobili, to wprowadzone zmiany nie byłyby widoczne.

Nadawanie i odbieranie uprawnień - instrukcje GRANT i REVOKE

span style="color: #ff0000;">'haso''haso'

Polecenia GRANT i REVOKE pozwalają administratorowi systemu na przyznawanie i odbieranie praw użytkownikom MySQL na czterech poziomach uprawnień:

  • poziom globalny - uprawnienia do wszystkich baz danych na serwerze, przechowywane w tabeli mysql.user;
     
  • poziom bazy danych - uprawnienia do wszystkich tabel w danej bazie, przechowywane w tabelach mysql.db i mysql.host;
     
  • poziom tabeli - uprawnienia do wszystkich kolumn w danej tabeli, przechowywane w tabeli mysql.tables_priv;
     
  • poziom kolumny - uprawnienia do pojedynczych kolumn w danej tabeli, przechowywane w tabeli mysql.columns_priv.
     

Uprawnienia nadawane są na podstawie kombinacji nazwa_użytkonika + nazwa_hosta, a nie tylko nazwa_użytkownika.

Aby używać poleceń GRANT lub REVOKE sam musisz posiadać przywilej GRANT OPTION. Listę przywilejów (uprawnień) pokazuje poniższa tabela:

Przywilej Znaczenie
ALL [PRIVILEGES]nadaje wszystkie uprawnienia z wyjątkiem GRANT OPTION
ALTERzezwala na użycie instrukcji ALTER TABLE
CREATEzezwala na użycie instrukcji CREATE TABLE
CREATE TEMPORARY TABLESzezwala na użycie instrukcji CREATE TEMPORARY TABLE
CREATE USERzezwala na użycie instrukcji: CREATE USER, DROP USER, RENAME USER i REVOKE ALL PRIVILEGES
DELETEzezwala na użycie instrukcji DELETE
DROPzezwala na użycie instrukcji DROP TABLE
FILEzezwala na użycie instrukcji SELECT ... INTO OUTFILE i LOAD DATA INFILE
INDEXzezwala na użycie instrukcji CREATE INDEX i DROP INDEX
INSERTzezwala na użycie instrukcji INSERT
LOCK TABLESzezwala na użycie instrukcji LOCK TABLES
RELOADzezwala na użycie instrukcji FLUSH
SELECTzezwala na użycie instrukcji SELECT
SHOW DATABASESinstrukcja SHOW DATABASES wyświetla wszystkie bazy
SHUTDOWNzezwala na zamkniecie serwera mysql
UPDATEzezwala na użycie instrukcji UPDATE
USAGEsynonim dla "brak przywilejów"
GRANT OPTION zezwala na dalsze przekazywanie uprawnień

Możesz przydzielać i odbierać przywileje globalne oraz do baz danych używajac składni ON *.* i baza.*. Jeżeli użyjesz ON * i masz wybranż bazę, to przywilej dotyczy tej bazy, w przeciwnym przypadku dotyczy wszystkich baz.

Do tabel można nadawać jedynie przywileje: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT OPTION, INDEX i ALTER.

Dla kolumn można nadawać jedynie przywileje: SELECT, INSERT i UPDATE. Przywileje dla kolumn muszą być wymienione. nie wolno dla nich użyć opcji ALL.

GRANT ALL nadaje tylko te przywilej, które są dostępne na danym poziomie.

MySQL nie odbiera automatycznie żadnych przywilejów z wyjątkiem sytuacji, gdy usuwasz tabele lub bazy, dla których istnieją jakiekolwiek przywileje.

Nazwę użytkownika należy podawać wraz z hostem, z którego może się logować do systemu w formacie: nazwa_użytkownika@nazwa_hosta. Jeżeli nazwa użytkownika lub hosta zawierają znaki wieloznaczne (_, *) lub znaki specjalne, to muszą być ujęte w apostrofy lub cudzysłowy (znaki wieloznaczne mogą być użyte w nazwie hosta, ale nigdy - w nazwie użytkownika), np.:

     nazwa_uzytkownika@localhost
     'nazwa-uzytkownika'@'test-host'. 
     nazwa_uzytkownika@'144.155.166.%'

Podanie jedynie nazwy uzytkownika jest równoważne z podaniem user_name@'%'.

Jeżeli użytkownik posiada przywileje w różnych kategoriach, to niezbędne w danym momencie uprawnienia wyznaczane są według poniższego algorytmu:

     przywileje_globalne
     OR (przywileje_do_bazy AND przywileje_do_hosta)
     OR przywileje_do_tabeli
     OR przywileje_do_kolumny

Jeżeli podajesz uprawnienia dla nieistniejącego w tabeli mysql.user użytkownika, to jest on automatycznie dodawany do systemu. Oznacza to, że polecenie GRANT może być użyte do tworzenia nowych kont uzytkowników. Jednak poleceni REVOKE nigdy nie usunie użytkownika. Aby to zrobić musisz użyć instrukcji DROP USER lub DELETE.

Dla nowego użytkownika tworzone jest hasło podane w klauzuli IDENTIFIED BY. Jeżeli użytkownik posiadał już hasło, to zostanie ono zmienione. Jeżeli tworzysz nowego użytkownika i nie użyjesz tej klauzuli, to użytkownik może logować się bez hasła (będzie miał puste hasło).

W klauzuli IDENTIFIED BY, hasło powinno być podane jako literał, bez użycia funkcji PASSWORD() koniecznej w instrukcji SET PASSWORD, np.:

     GRANT ... IDENTIFIED BY 'moje_haso';

Jeżeli użytkownik nie posiada żadnych przywilejów do jakiejś tabeli, to ta tabela jest dla niego niewidoczna (np. w poleceniu SHOW TABLES).

Analogicznie dzieję się w przypadku baz danych: użytkownik widzi tylko te, w stosunku do których posiada jakiekolwiek prawa.

Klauzula WITH GRANT OPTION pozwala użytkownikowi na przekazywanie swoich uprawnień innym użytkownikom. Przekazywane mogą być tylko te uprawnienia, które się samemu posiada. Klauzula dotyczy tylko aktualnie nadawanych uprawnień. nie ma wpływu na wcześnie posiadane lub później nadane uprawnienia. Z klauzuli tej należy korzystać z dużą ostrożnością, gdyż użytkownicy posiadający przywilej GRANT OPTION i różne uprawnienia, mogą je łączyć, co nie zawsze jest bezpieczne.

Klauzule MAX_QUERIES_PER_HOUR ilość, MAX_UPDATES_PER_HOUR ilość i MAX_CONNECTIONS_PER_HOUR ilość służy do ustanowienia limitu zapytań kierowanych do bazy, aktualizacji danych i połączeń z bazą wykonywanych w ciągi jednej godziny. Jeżeli ilość jest równa zeru (wartość domyślna), to użytkownika nie obowiązują żadne limity.

Uwagi:

  • Przy uruchamianiu mysqld wszystkie przywileje są wczytywane do pamięci. Zmiana przywilejów poleceniami GRANT lub REVOKE będzie widoczna natychmiast. Jeżeli jednak zmieniasz przywileje poleceniami INSERT, UPDATE, itd., to musisz użyć polecenia FLUSH PRIVILEGES, aby odświeżyć listę przywilejów.
     
  • Jeżeli posiadasz przywilej INSERT tylko do niektórych kolumn tabeli, to możesz wykonywać instrukcję INSERT dla tej tabeli. Pola, do których nie posiadasz uprawnień otrzymają swoja wartość domyślną.
     

Zmiana nazwy użytkownika - instrukcja RENAME USER

   RENAME USER stara_nazwa TO nowa_nazwa
            [, stara_nazwa TO nowa_nazwa] ...

Instrukcja służy do zmiany nazwy konta MySQL. Aby z niej korzystać sam musisz posiadać globalny przywilej CREATE USER lub UPDATE w stosunku do bazy mysql. Próba zmiany nieistniejącego konta lub zmiany na nazwę już istniejącą spowoduje błąd. Stara i nowa nazwa użytkownika podawane są tak samo, jak w instrukcji GRANT.

Instrukcja RENAME USER została dodana w MySQL 5.0.2.

Zmiana hasła użytkownika - instrukcja SET PASSWORD

   SET PASSWORD = PASSWORD('jakie_haso''jakie_haso')

Instrukcja SET PASSWORD służy do nadania lub zmiany hasła użytkownika.

Pierwsza składnia służy do zmiany hasła dla aktualnie zalogowanego użytkownika. Można z niej korzystać, o ile nie jest się zalogowanym anonimowo.

Druga składnia służy do zmiany hasła podanego użytkownika na bieżącym serwerze bazy. Aby z niej skorzystać musisz posiadać przywilej UPDATE do bazy mysql. Nazwa użytkownika powinna być podana w formacie: nazwa_użytkownika@nazwa_hosta, gdzie obie wartości powinny być identyczne z wyświetlanymi kolumnami User i Host bazy mysql.user. Np., jeżeli kolumny User i Host zawierają 'jan' i '%.loc.gov', to instrukcja powinna mieć postac:

     SET PASSWORD FOR 'jan'@'%.loc.gov' = PASSWORD('nowe_haso');

Ten sam efekt mozna osiągnąć koezystając z instrukcji:

     UPDATE mysql.user SET Password=PASSWORD('nowe_haso')
            WHERE User='jan' AND Host='%.loc.gov';
     FLUSH PRIVILEGES;

Polecenie FLUSH PRIVILEGES przeładowuje uprawnienia. Gdybyśmy tego nie zrobili, to wprowadzone zmiany nie byłyby widoczne.

« wstecz   dalej »