Пользователи и их права в MySQL на примерах
1. Создаем пользователя.
mysql> CREATE USER 'stasyak'@'localhost';
2. Задаем пароль для данного пользователя.
mysql> SET PASSWORD FOR 'stasyak'@'localhost' = PASSWORD("pa1SS2WORD");
3. Даем права пользователю.
mysql> GRANT ALL ON wordpress.* TO 'stasyak'@'localhost';
Итог: мы создали пользователя stasyak для сервера с именем localhost, затем установили для него пароль pa1SS2WORD, затем дали возможность этому пользователю видеть и редактировать таблицы базы данных wordpress.
Люди, хорошо знакомые с mysql заметят, что это не самый короткий путь создания пользователя с определенными правами. Согласен, есть более короткий вариант:
mysql> GRANT ALL PRIVILEGES ON wordpress.* TO 'stasyak'@'localhost' IDENTIFIED BY 'secret';
Разница между длинным и коротким вариантами в том, что команда GRANT работает "тихо", т.е. если пользователя нет, то она создаст его и установит ему пароль и права, но если пользователь есть, то GRANT просто сменит у него пароль и права. Какие же проблемы это может доставить? Представьте, что под mysql работают более дюжины разных сайтов с разными базами, при установке нового сайта, ему создается своя база и свой пользователь. Вездесущий человеческий фактор может привести к тому, что при попытке создать нового (как мы предполагаем) пользователя с помощью команды GRANT мы затрем пароль и права старого пользователя. И что самое страшное даже этого не заметим. Придирчивый читатель может указать на методологическую ошибку - внимательный программист должен, во-первых, знать такую особенность mysql, а во-вторых проверить существование пользователя в базе с помощью команды
mysql> select User from mysql.user
В жизни же получается, что даже самые внимательные из нас теряют бдительность. Наверное "золотой" серединой будет такая последовательность:
1. Создаем пользователя.
mysql> CREATE USER 'stasyak'@'localhost';
Если такой пользователь уже существует, то MySQL поругается на вас вот в таких выражениях:
mysql> create user 'stasyak'@'localhost'; ERROR 1396 (HY000): Operation CREATE USER failed for 'stasyak'@'localhost'
Ошибка не очень информативная, к сожалению. Об этом, кажется, сожалею не только я
http://bugs.mysql.com/bug.php?id=28331
2. Даем права пользователю и устанавливаем пароль.
mysql> GRANT ALL ON wordpress.* TO 'stasyak'@'localhost' IDENTIFIED BY 'secret';
Приятного программирования и поменьше ошибок!