Elementarne podstawy MySQL — podgląd uprawnień, ustawianie i zamiana haseł, listowanie i tworzenie baz, tworzenie użytkowników i nadawanie im uprawnień

Poniżej przedstawiam kilka podstawowych zagadnień dotyczących MySQL — tworzenie nowych baz, użytkowników, nadawanie użytkownikom uprawnień, różne metody ustawiania i zmiany haseł, podgląd istniejących w klastrze baz oraz użytkowników i ich uprawnień.

Przegląd użytkowników i uprawnień dostępu do klastra baz MySQL

Informacje o użytkownikach, hasłach i hostach z jakich jest dostęp do klastra MySQL oraz jego zakresie są przechowywane w tabeli user w bazie administracyjnej tzn. mysql.

  1. A wiec aby przejrzeć uprawnienia do klastra MySQL wystarczy się do niej zalogować:
    mysql -u root mysql
    Jeśli jest już ustawione niepuste hasło root’a do to należy skorzystać dodatkowo z opcji -p.
  2. Wydajemy zapytanie SQL:
    mysql> SELECT * FROM user;

Jak widać funkcjonalność tabeli userMySQL w znacznym stopniu odpowiada funkcjonalności oferowanej przez plik konfiguracyjyny pg_hba.conf w PostgreSQL.

Ustawienie lub zmiana hasła za pomocą mysqladmin (nie zalaecane)

  1. Ustawiamy lub zmieniamy hasło bazy MySQL:
    mysqladmin -u USER_NAME password HASLO_MYSQL_USER_NAME
    Jeśli dane hasło było już ustawione i jest niepuste to oczywiście należy dodatkowo użyć opcji -p.
  2. Czasami może okazać się potrzebne odświeżenie/przeładowanie uprawnień klastra MySQL:
    mysqladmin -u root flush-privileges

Należy zaznaczyć że powyższa procedura zmieni/ustawi hasło tylko dostępu z hosta/kanału z którego obecnie korzystamy, a więc najprawdopodobniej localhost, natomiast nie ma wpływu na hasło dostępu poprzez inne kanały, nawet te równoważne – np. 127.0.0.1. Łatwo się o tym przekonać zaglądając do tabeli user w bazie mysql(patrz poprzedni akapit), dlatego lepiej wykorzystać metodę przedstawioną w następnym paragrafie która nie ma tej wady.

Ustawienie lub zmiana hasła użytkownika bezpośrednio w bazie danych MySQL za pomocą SQL (zalecane)

Poniższa procedura ma tą przewagę nad poprzednią że ustawia/zmienia hasło dostępu poprzez wszystkie kanały/hosty przez jakie dany użytkownik ma w danej chwili dostęp.

  1. Logujemy się do serwera MySQL i bazy administracyjnej — ‚mysql’:
    mysql -u root mysql
    Analogicznie jak poprzednio — jeśli hasło root’a jest niepuste to należy dodatkowo użyć dodatkowo opcji -p.
  2. Wykonujemy update (zmiana hasła):
    mysql> UPDATE user SET password=PASSWORD('HASŁO') WHERE User='USER_NAME';
    Query OK, 4 rows affected (0.00 sec)
    Rows matched: 4 Changed: 4 Warnings: 0

    Jak widać hasło zostało zmienione w 4 rekordach (liczba rekordów u Ciebie może być inna).
  3. Może być jeszcze konieczne zaktualizowanie informacji o uprawnieniach:
    mysql> flush privileges;
  4. Opuszczamy bazę MySQL:
    mysql>\q

Oczywiście zamiast logować się do bazy z konsoli przy pomocy mysql, powyższe czynności możemy wykonać analogicznie za pośrednictwem phpMyAdmin’a lub wykonując zapytania SQL do bazy za pośrednictwem jakiegoś języka programowania — np. Bash/Python/PHP/C++.

Listowanie baz danych w danym klastrze MySQL i tworzenie nowych baz MySQL

  1. Logujemy się do serwera MySQL i bazy administracyjnej — mysql:
    mysql -u root -p mysql
  2. Listowanie istniejących baz danych MySQL:
    mysql> SHOW DATABASES;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    +--------------------+
  3. Tworzenie nowych baz danych MySQL:
    mysql> CREATE DATABASE nazwa_bazy;

Dodawanie/tworzenie nowych użytkowników bazy MySQL

  1. Logujemy się do serwera MySQL i bazy administracyjnej — mysql:
    mysql -u root -p mysql
  2. Tworzymy użytkownika i ustawiamy hasło dostępu do bazy:
    • Dla dostępu z hosta o określonej nazwie, np. localhost:
      CREATE USER 'USER_NAME'@'HOST_NAME' IDENTIFIED BY 'HASŁO';
    • Dla dostępu z hosta o określonej domenie, np. arkadiuszcwiek.pl:
      CREATE USER 'USER_NAME'@'HOST_NAME.DOMENA' IDENTIFIED BY 'HASŁO';
    • Dla dostępu z hosta o określonym adresie IP:
      CREATE USER 'USER_NAME'@'IP' IDENTIFIED BY 'HASŁO';
    • Dla dostępu z dowolnego hosta:
      CREATE USER 'USER_NAME' IDENTIFIED BY 'HASŁO';
    • co jest równoważne:
      CREATE USER 'USER_NAME'@'%' IDENTIFIED BY 'HASŁO';

  3. Nadajemy uprawnienia dostępu ze wszystkich wpisów do bazy(utworzonej wcześniej):
    • Nadawanie uprawnień do bazy niezależnie od hosta z jakiego użytkownik się loguje (zalecane):
      GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME;
    • Wszystkie uprawnień do tej bazy przy logowaniu z hosta ‚HOST’:
      GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME@HOST;
    • To samo co powyżej z dodatkową możliwością nadawania uprawnień do tej bazy innym użytkownikom:
      GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME@HOST WITH GRANT OPTION;

    Alternatywnie zamiast wszystkich — ALL — możemy nadać tylko wybrane uprawnienia wymieniając je po przecinku, a wybierać możemy z pośród:

    • ALL – Użytkownik otrzymuje wszystkie przywileje za wyjątkiem GRANT OPTION
    • CREATE – Pozwala użytkownikowi na tworzenie tabel
    • SELECT – Pozwala na przeszukiwanie tabel
    • INSERT – Pozwala dodawać nowe informacje do tabel
    • SHOW DATABASES – Pozwala użytkownikowi na przeglądanie listy dostępnych baz danych
    • USAGE – Służy do tworzenia użytkownika bez uprawnień
    • GRANT OPTION – Pozwala użytkownikowi nadawać uprawnienia.
  4. Sprawdzamy uprawnienia:
    SELECT * FROM db;

Backup & restore – czyli tworzenie kopii zapasowej i jej przywracanie

Backup

mysqldump nazwaBazyDanych > kopia.sql
lub:
mysqldump nazwaBazyDanych -u nazwaUzytkownika -p -h host > kopia.sql

Restore

mysql -u nazwaUzytkownika -p
mysql> source kopia.sql

lub
mysql nazwaBazyDanych -u nazwaUzytkownika -p < kopia.sql

Dodaj komentarz