Вступ
MySQL - це реляційна система керування базами даних з відкритим вихідним кодом. Вона зазвичай розгортається як частина стека LAMP (що розшифровується як Linux, Apache, MySQL і PHP) і на момент написання цієї статті є найпопулярнішою базою даних з відкритим вихідним кодом у світі.
У цьому посібнику описано, як створити нового користувача MySQL і надати йому права, необхідні для виконання різноманітних дій.
Передумови
Для того, щоб скористатися цим посібником, вам знадобиться доступ до бази даних MySQL. Цей посібник передбачає, що база даних встановлена на віртуальному приватному сервері під управлінням Ubuntu 20.04, хоча описані в ньому принципи слід застосовувати незалежно від того, як ви отримуєте доступ до бази даних.
Створення нового користувача
Під час установки MySQL створює обліковий запис користувача root
, який ви можете використовувати для керування базою даних. Цей користувач має повні привілеї на сервері MySQL, тобто він має повний контроль над кожною базою даних, таблицею, користувачем тощо. Тому краще уникати використання цього облікового запису за межами адміністративних функцій. У цьому кроці описано, як використовувати root-користувача MySQL для створення нового облікового запису користувача і надання йому привілеїв.
У системах Ubuntu з MySQL 5.7 (і пізніших версій) для користувача root
MySQL за замовчуванням встановлено автентифікацію за допомогою модуля auth_socket
, а не за допомогою пароля. Цей плагін вимагає, щоб ім'я користувача операційної системи, який викликає клієнт MySQL, збігалося з ім'ям користувача MySQL, вказаним у команді. Це означає, що команді mysql потрібно передувати sudo
, щоб викликати її з привілеями root-користувача Ubuntu, для того, щоб отримати доступ до root-користувача MySQL:
sudo mysql
Примітка: Якщо ваш користувач MySQL root налаштовано на автентифікацію за допомогою пароля, вам потрібно буде скористатися іншою командою для доступу до оболонки MySQL. Далі буде запущено клієнт MySQL зі звичайними правами користувача, і ви отримаєте права адміністратора бази даних лише після автентифікації за допомогою правильного пароля:mysql -u root -p
Отримавши доступ до інтерфейсу MySQL, ви можете створити нового користувача за допомогою команди CREATE USER. Вона має такий загальний синтаксис:
CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';
Після команди CREATE USER
ви вказуєте ім'я користувача. Після нього одразу слідує знак @
, а потім ім'я хоста, з якого цей користувач буде підключатися. Якщо ви плануєте отримати доступ до цього користувача лише локально з вашого сервера Ubuntu, ви можете вказати localhost
. Брати ім'я користувача і хост в одинарні лапки не завжди потрібно, але це може допомогти запобігти помилкам.
У вас є кілька варіантів вибору плагіну автентифікації вашого користувача. Згаданий раніше плагін auth_socket
може бути зручним, оскільки він забезпечує надійний захист, не вимагаючи від дійсних користувачів вводити пароль для доступу до бази даних. Але він також запобігає віддаленим з'єднанням, що може ускладнити ситуацію, коли зовнішнім програмам потрібно взаємодіяти з MySQL.
Як альтернативу, ви можете повністю пропустити частину синтаксису WITH authentication_plugin
, щоб користувач автентифікувався за допомогою стандартного плагіну MySQL, caching_sha2_password
. Документація MySQL рекомендує цей плагін для користувачів, які хочуть увійти за допомогою пароля, через його високі функції безпеки.
Запустіть наступну команду, щоб створити користувача, який автентифікується за допомогою caching_sha2_password
. Обов'язково змініть sammy
на ваше ім'я користувача і пароль на надійний пароль за вашим вибором:
CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';
Примітка: Існує відома проблема з деякими версіями PHP, яка спричиняє проблеми з кешуваннямcaching_sha2_password
. Якщо ви плануєте використовувати цю базу даних з PHP-застосунком, наприклад, phpMyAdmin, ви можете створити користувача, який буде автентифікуватися за допомогою старішого, але все ще безпечного плагінуmysql_native_password
:CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Якщо ви не впевнені, ви завжди можете створити користувача, який автентифікується за допомогою
caching_sha2_plugin
, а потім змінити його пізніше за допомогою цієї команди:ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Після створення нового користувача ви можете надати йому відповідні привілеї.
Надання користувачу привілеїв
Загальний синтаксис для надання привілеїв користувача наступний:
GRANT PRIVILEGE ON database.table TO 'username'@'host';
Значення PRIVILEGE
у цьому наведеному прикладі визначає, яким користувачам дозволено виконувати дії над зазначеною базою даних і таблицею. Ви можете надати кілька привілеїв одному користувачу в одній команді, розділяючи їх комою. Ви також можете надати глобальні привілеї користувачу, ввівши зірочки (*
) замість назв бази даних і таблиць. У мові SQL зірочки - це спеціальні символи, які використовуються для позначення "всіх" баз даних або таблиць.
Для ілюстрації, наступна команда надає користувачу глобальні привілеї на створення, зміну і видалення баз даних, таблиць і користувачів, а також право вставляти, оновлювати та видаляти дані з будь-якої таблиці на сервері. Він також надає користувачу можливість запитувати дані за допомогою SELECT
, створювати зовнішні ключі за допомогою ключового слова REFERENCES
і виконувати операції FLUSH
з привілеєм RELOAD
. Втім, ви повинні надавати користувачам лише ті права, які їм потрібні, тому ви можете самостійно налаштовувати привілеї користувачів за потреби.
Ви можете знайти повний список доступних привілеїв в офіційній документації MySQL.
Запустіть цей оператор GRANT
, замінивши sammy
на ваше власне ім'я користувача MySQL, щоб надати ці привілеї вашому користувачеві:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Зверніть увагу, що цей оператор також містить опцію WITH GRANT OPTION
. Це дозволить вашому користувачеві MySQL надавати будь-які дозволи, які він має, іншим користувачам системи.
Увага! Деякі користувачі можуть захотіти надати своєму користувачеві MySQL привілей ALL PRIVILEGES, який надасть йому широкі привілеї суперкористувача, подібні до привілеїв користувача root, наприклад, таким чином:GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;
Такі широкі привілеї не слід надавати легковажно, оскільки будь-хто, хто має доступ до цього користувача MySQL, матиме повний контроль над кожною базою даних на сервері.
Багато посібників радять виконувати команду FLUSH PRIVILEGES
одразу після оператора CREATE USER
або GRANT
, щоб перезавантажити таблиці привілеїв і переконатися, що нові привілеї набули чинності:
FLUSH PRIVILEGES;
Проте, згідно з офіційною документацією MySQL, коли ви змінюєте таблиці грантів опосередковано за допомогою оператора керування обліковим записом типу GRANT
, база даних негайно перезавантажить таблиці грантів у пам'ять, а це означає, що команда FLUSH PRIVILEGES
у нашому випадку не потрібна. З іншого боку, її виконання не матиме жодних негативних наслідків для системи.
Якщо вам потрібно відкликати дозвіл, структура майже ідентична наданню дозволу:
REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';
Зверніть увагу, що при відкликанні дозволів синтаксис вимагає використовувати FROM
, а не TO
, який ви використовували при наданні дозволів.
Ви можете переглянути поточні дозволи користувача за допомогою команди SHOW GRANTS
:
SHOW GRANTS FOR 'username'@'host';
Подібно до того, як ви можете видаляти бази даних за допомогою DROP, ви можете використовувати DROP для видалення користувача:
DROP USER 'username'@'localhost';
Після створення користувача MySQL і надання йому привілеїв ви можете вийти з клієнта MySQL за допомогою команди exit
Щоб увійти в систему як новий користувач MySQL, ви можете використовувати команду, подібну до наведеної нижче:
mysql -u sammy -p
Прапорець -p
змусить клієнт MySQL запитувати пароль користувача MySQL для автентифікації.
Висновок
Дотримуючись цього посібника, ви навчилися додавати нових користувачів і надавати їм різноманітні дозволи в базі даних MySQL. Далі ви можете продовжувати досліджувати та експериментувати з різними налаштуваннями дозволів для користувачів MySQL, або ж ви можете дізнатися більше про деякі конфігурації MySQL вищого рівня.
Ще немає коментарів