Пользователей можно добавлять
двумя различными способами - при
помощи команды GRANT или
напрямую в таблицы назначения
привилегий MySQL. Предпочтительнее
использовать команду GRANT
- этот способ проще и дает меньше
ошибок. See Раздел 4.3.1, «Синтаксис команд GRANT и REVOKE».
Существует также большое
количество программ (таких как
phpmyadmin), которые служат
для создания и администрирования
пользователей.
В приведенных ниже примерах
демонстрируется, как использовать
клиент mysql для задания
новых пользователей. В примерах
предполагается, что привилегии
установлены в соответствии с
принятыми по умолчанию значениями,
описанными в предыдущем разделе.
Это означает, что для внесения
изменений на том же компьютере, где
запущен mysqld, необходимо
подсоединиться к серверу как
пользователь MySQL root, и у
пользователя root должна
быть привилегия INSERT для
базы данных mysql, а также
административная привилегия
RELOAD. Кроме того, если был
изменен пароль пользователя
root, его необходимо
указать здесь для команды
mysql.
Новых пользователей можно
добавлять, используя команду
GRANT:
shell>mysql --user=root mysqlmysql>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 создают
трех новых пользователей:
monty
Полноценный суперпользователь -
он может подсоединяться к
серверу откуда угодно, но должен
использовать для этого пароль
some_pass. Обратите
внимание на то, что мы должны
применить операторы
GRANT как для
monty@localhost, так и для
monty@"%". Если не добавить
запись с localhost, запись
анонимного пользователя для
localhost, которая
создается при помощи
mysql_install_db, будет иметь
преимущество при подсоединении
с локального компьютера, так как
в ней указано более определенное
значение для поля Host, и
она расположена раньше в таблице
user.
admin
Пользователь, который может
подсоединяться с localhost
без пароля; ему назначены
административные привилегии
RELOAD и PROCESS.
Эти привилегии позволяют
пользователю запускать команды
mysqladmin reload, mysqladmin
refresh и mysqladmin flush-*,
а также mysqladmin processlist.
Ему не назначено никаких
привилегий, относящихся к базам
данных (их можно назначить позже,
дополнительно применив оператор
GRANT).
dummy
Пользователь, который может
подсоединяться к серверу без
пароля, но только с локального
компьютера. Все глобальные
привилегии установлены в
значение 'N'-тип
привилегии USAGE,
который позволяет создавать
пользователей без привилегий.
Предполагается, что относящиеся
к базам данных привилегии будут
назначены позже.
Можно напрямую добавить точно
такую же информацию о пользователе
при помощи оператора
INSERT, а затем дать серверу
команду перезагрузить таблицы
назначения привилегий:
shell>mysql --user=root mysqlmysql>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 mysqlmysql>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 mysqlmysql>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;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
