Добавление новых пользователей в MySQL
Пользователей можно добавлять двумя различными способами - при помощи команды GRANT или напрямую в таблицы назначения привилегий MySQL. Предпочтительнее использовать команду GRANT - этот способ проще и дает меньше ошибок. См. раздел Синтаксис команд 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/).
1 2 3 4 5 6 7
8 8 8
|