4.3.5 Добавление новых пользователей в MySQL
Пользователей можно добавлять двумя различными способами - при помощи
команды GRANT
или напрямую в таблицы назначения привилегий MySQL.
Предпочтительнее использовать команду GRANT
- этот способ проще и дает
меньше ошибок. See section 4.3.1 Синтаксис команд GRANT
и REVOKE
.
Существует также большое количество программ (таких как phpmyadmin
),
которые служат для создания и администрирования пользователей.
@xref{Portals}.
В приведенных ниже примерах демонстрируется, как использовать клиент 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
создают трех новых пользователей:
monty
-
Полноценный суперпользователь - он может подсоединяться к серверу откуда
угодно, но должен использовать для этого пароль
some_pass
. Обратите
внимание на то, что мы должны применить операторы GRANT
как для
monty@localhost
, так и для monty@"%"
. Если не добавить запись с localhost
,
запись анонимного пользователя для localhost
, которая создается при помощи
mysql_install_db
, будет иметь преимущество при подсоединении с локального
компьютера, так как в ней указано более определенное значение для поля
Host
, и она расположена раньше в таблице user
.
admin
-
Пользователь, который может подсоединяться с
localhost
без пароля; ему
назначены административные привилегии RELOAD
и PROCESS
. Эти привилегии
позволяют пользователю запускать команды mysqladmin reload
, mysqladmin
refres
h и mysqladmin flush-*
, а также mysqladmin processlist
. Ему не
назначено никаких привилегий, относящихся к базам данных (их можно
назначить позже, дополнительно применив оператор GRANT
).
dummy
-
Пользователь, который может подсоединяться к серверу без пароля, но только
с локального компьютера. Все глобальные привилегии установлены в значение
'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/).