Добавление новых пользователей в MySQL
Пользователей можно добавлять двумя различными способами - при помощи команды
GRANT или напрямую в таблицы назначения привилегий MySQL. Предпочтительнее
использовать команду GRANT - этот способ проще и дает меньше
ошибок.
Существует также большое количество программ (таких как phpmyadmin), которые служат
для создания и администрирования пользователей.
В приведенных ниже примерах демонстрируется, как использовать клиент mysql для
задания новых пользователей. В примерах предполагается, что привилегии установлены
в соответствии с принятыми по умолчанию значениями, описанными в предыдущем разделе.
Это означает, что для внесения изменений на том же компьютере, где запущен mysqld,
необходимо подсоединиться к серверу как пользователь MySQL root, и у пользователя
root должна быть привилегия INSERT для базы данных mysql, а также административная
привилегия RELOAD. Кроме того, если был изменен пароль пользователя root,
его необходимо указать здесь для команды mysql.
Новых пользователей можно добавлять, используя команду GRANT:
shell> mysql --user=root mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
mysql> GRANT USAGE ON *.* TO dummy@localhost;
Эти команды GRANT создают трех новых пользователей:
Полноценный суперпользователь - он может подсоединяться к серверу откуда угодно,
но должен использовать для этого пароль some_pass. Обратите внимание на то, что
мы должны применить операторы GRANT как для monty@localhost,
так и для monty@"%". Если не добавить запись с localhost, запись анонимного
пользователя для localhost, которая создается при помощи mysql_install_db, будет
иметь преимущество при подсоединении с локального компьютера, так как в ней указано
более определенное значение для поля Host, и она расположена раньше в таблице
user.
Пользователь, который может подсоединяться с localhost без пароля; ему назначены
административные привилегии RELOAD и PROCESS. Эти привилегии
позволяют пользователю запускать команды mysqladmin reload, mysqladmin refresh
и mysqladmin flush-*, а также mysqladmin processlist. Ему не назначено никаких
привилегий, относящихся к базам данных (их можно назначить позже, дополнительно
применив оператор GRANT).
Пользователь, который может подсоединяться к серверу без пароля, но только с
локального компьютера. Все глобальные привилегии установлены в значение 'N'-тип
привилегии USAGE, который позволяет создавать пользователей без привилегий.
Предполагается, что относящиеся к базам данных привилегии будут назначены позже.
Можно напрямую добавить точно такую же информацию о пользователе при помощи оператора
INSERT, а затем дать серверу команду перезагрузить таблицы назначения привилегий:
shell> mysql --user=root mysql
mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'),
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),
-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO user SET Host='localhost',User='admin',
-> Reload_priv='Y', Process_priv='Y';
mysql> INSERT INTO user (Host,User,Password)
-> VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
В зависимости от версии MySQL в примере, приведенном выше, может указываться
различное количество значений 'Y' (в версиях до Version 3.22.11 было меньше
столбцов привилегий). Для пользователя admin используется более удобочитаемый
расширенный синтаксис команды INSERT, который доступен начиная с версии 3.22.11.
Обратите внимание: чтобы создать суперпользователя, необходимо создать запись
таблицы user с полями привилегий, установленными в значение 'Y'. Нет необходимости
задавать значения в записях таблиц db или host.
Столбцы привилегий в таблице user в последнем операторе INSERT (для пользователя
dummy) не были заданы явно, поэтому данным столбцам был присвоено принятое по
умолчанию значение 'N'. Точно так же действует команда GRANT USAGE.
В приведенном ниже примере добавляется пользователь custom, который может подсоединяться
с компьютеров localhost, server.domain и whitehouse.gov. Он хочет получать доступ
к базе данных bankaccount только с компьютера localhost, к базе данных expenses
- только с whitehouse.gov, и к базе данных customer - со всех трех компьютеров,
а также использовать пароль stupid при подсоединении со всех трех компьютеров.
Чтобы задать эти привилегии пользователя при помощи оператора GRANT,
выполните следующие команды:
shell> mysql --user=root mysql
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON bankaccount.*
-> TO custom@localhost
-> IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON expenses.*
-> TO custom@whitehouse.gov
-> IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON customer.*
-> TO custom@'%'
-> IDENTIFIED BY 'stupid';
Привилегии для пользователя custom мы назначаем потому, что этот пользователь
хочет получать доступ к MySQL как с локального компьютера через сокеты Unix,
так и с удаленного компьютера whitehouse.gov через протокол TCP/IP.
Чтобы задать привилегии пользователя путем непосредственного внесения изменений
в таблицы назначения привилегий, выполните следующие команды (обратите внимание
на команду FLUSH PRIVILEGES в конце примера):
shell> mysql --user=root mysql
mysql> INSERT INTO user (Host,User,Password)
-> VALUES('localhost','custom',PASSWORD('stupid'));
mysql> INSERT INTO user (Host,User,Password)
-> VALUES('server.domain','custom',PASSWORD('stupid'));
mysql> INSERT INTO user (Host,User,Password)
-> VALUES('whitehouse.gov','custom',PASSWORD('stupid'));
mysql> INSERT INTO db
-> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
-> Create_priv,Drop_priv)
-> VALUES
-> ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
-> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
-> Create_priv,Drop_priv)
-> VALUES
-> ('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');
mysql> INSERT INTO db
-> (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,
-> Create_priv,Drop_priv)
-> VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
Первые три оператора INSERT добавляют в таблицу user записи, которые позволят
пользователю custom подключаться с различных компьютеров с указанным паролем,
но не дают ему никаких привилегий (все привилегии установлены в принятое по умолчанию
значение 'N'). Следующие три оператора INSERT добавляют записи в таблицу db, в
которой назначаются привилегии для пользователя custom по отношению к базам данных
bankaccount, expenses и customer, но только если доступ осуществляется с определенных
компьютеров. Как обычно, после внесения изменений непосредственно в таблицы назначения
привилегий серверу необходимо дать команду на перезагрузку этих таблиц (при помощи
FLUSH PRIVILEGES), чтобы внесенные изменения вступили в силу.
Если необходимо предоставить определенному пользователю доступ с любого компьютера
к определенному домену, можно воспользоваться оператором GRANT
следующим образом:
mysql> GRANT ...
-> ON *.*
-> TO myusername@"%.mydomainname.com"
-> IDENTIFIED BY 'mypassword';
Чтобы сделать то же самое путем непосредственного внесения изменений в таблицы
назначения привилегий, выполните следующие действия:
mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
-> PASSWORD('mypassword'),...);
mysql> FLUSH PRIVILEGES;
Можно также воспользоваться программами xmysqladmin, mysql_webadmin и даже xmysql,
чтобы вставить, обновить или изменить значения в таблицах назначения привилегий.
Эти утилиты можно найти в каталоге Contrib веб-сайта MySQL (http://www.mysql.com/Downloads/Contrib/).