Spec-Zone .ru
спецификации, руководства, описания, API

6.3.2. Добавление Учетных записей пользователей

Можно создать учетные записи MySQL двумя способами:

Привилегированный метод должен использовать операторы создания учетной записи, потому что они более кратки и менее подвержены ошибкам чем управление таблицами предоставления непосредственно. CREATE USER и GRANT описываются в Разделе 13.7.1, "Операторы Ведения счетов".

Другая опция для того, чтобы создать учетные записи должна использовать MySQL Workbench инструмента GUI. Или одна из нескольких доступных сторонних программ, которые предлагают возможности администрирования учетной записи MySQL. phpMyAdmin одна такая программа.

Следующие примеры показывают, как использовать mysql клиентскую программу, чтобы установить новые учетные записи. Эти примеры предполагают, что полномочия были установлены согласно значениям по умолчанию, описанным в Разделе 2.10.2, "Защищая Учетные записи MySQL Initial". Это означает, что, чтобы произвести изменения, следует соединиться с сервером MySQL как MySQL root пользователь, и root учетная запись должна иметь INSERT полномочие для mysql база данных и RELOAD административная привилегия.

Как отмечено в примерах где необходимо, некоторые из операторов перестанут работать, если режим SQL сервера был установлен включить определенным ограничениям. В частности строгий режим (STRICT_TRANS_TABLES, STRICT_ALL_TABLES) и NO_AUTO_CREATE_USER будет препятствовать тому, чтобы сервер принял некоторые из операторов. Обходные решения обозначаются для этих случаев. Для получения дополнительной информации о режимах SQL и их эффекте на работу с таблицами предоставления, см. Раздел 5.1.7, "Режимы SQL Сервера", и Раздел 13.7.1.4,"GRANT Синтаксис".

Во-первых, используйте mysql программу, чтобы соединиться с сервером как MySQL root пользователь:

shell> mysql --user=root mysql

Если Вы присвоили пароль root учетная запись, Вы должны будете также предоставить a --password или -p опция, и для этой mysql команды и для тех позже в этом разделе.

После соединения с сервером как root, можно добавить новые учетные записи. Следующее использование операторов GRANT устанавливать четыре новых учетных записи:

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY
        'some_pass';mysql> GRANT ALL PRIVILEGES ON *.* TO
        'monty'@'localhost'    ->  WITH GRANT OPTION;mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'    ->  WITH GRANT OPTION;mysql> CREATE
        USER 'admin'@'localhost';mysql> GRANT RELOAD,PROCESS ON *.*
        TO 'admin'@'localhost';mysql> CREATE USER
        'dummy'@'localhost';

У учетных записей, создаваемых этими операторами, есть следующие свойства:

Операторы, которые создают учетные записи без пароля, перестанут работать если NO_AUTO_CREATE_USER Режим SQL включается. Чтобы иметь дело с этим, используйте IDENTIFIED BY пункт, который определяет непустой пароль.

Чтобы проверить полномочия на учетную запись, использовать SHOW GRANTS:

mysql> SHOW GRANTS FOR
        'admin'@'localhost';+-----------------------------------------------------+| Grants for admin@localhost                          |+-----------------------------------------------------+| GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost' |+-----------------------------------------------------+

Как альтернатива CREATE USER и GRANT, можно создать те же самые учетные записи непосредственно, выходя INSERT операторы и затем сообщение сервера перезагрузить табличное использование предоставления FLUSH PRIVILEGES:

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',    ->     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',    ->     '','','','',0,0,0,0);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;

Когда Вы создаете учетные записи с INSERT, необходимо использовать FLUSH PRIVILEGES сказать серверу перезагружать таблицы предоставления. Иначе, изменения остаются незамеченными, пока Вы не перезапускаете сервер. С CREATE USER, FLUSH PRIVILEGES является ненужным.

Причина использования PASSWORD() функция с INSERT должен зашифровать пароль. CREATE USER оператор шифрует пароль для Вас, таким образом, PASSWORD() является ненужным.

'Y' значения включают полномочиям для учетных записей. В зависимости от Вашей версии MySQL Вам, вероятно, придется использовать различное число 'Y' значения в первых двух INSERT операторы. INSERT оператор для admin учетная запись использует расширенное более читаемое INSERT использование синтаксиса SET.

В INSERT оператор для dummy учетная запись, только Host, User, и Password столбцы в user строка таблицы присваивается значения. Ни один из столбцов полномочия не устанавливается явно, таким образом, MySQL присваивает их все значение по умолчанию 'N'. Это эквивалентно какой CREATE USER делает.

Если строгий режим SQL включается, всем столбцам, у которых нет никакого значения по умолчанию, нужно было определить значение. В этом случае, INSERT операторы должны явно определить значения для ssl_cipher, x509_issuer, и x509_subject столбцы.

Чтобы установить учетную запись суперпользователя, необходимо только вставить a user строка таблицы со всем набором столбцов полномочия к 'Y'. user табличные полномочия являются глобальной переменной, таким образом, никакие записи в любой из других таблиц предоставления не необходимы.

Следующие примеры создают три учетных записи и предоставляют им доступ к определенным базам данных. У каждого из них есть имя пользователя custom и пароль obscure.

Создать учетные записи с CREATE USER и GRANT, используйте следующие операторы:

shell> mysql --user=root mysqlmysql> CREATE USER 'custom'@'localhost' IDENTIFIED BY
        'obscure';mysql> GRANT
        SELECT,INSERT,UPDATE,DELETE,CREATE,DROP    ->  ON
        bankaccount.*    ->  TO 'custom'@'localhost';mysql> CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'obscure';mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP    ->  ON expenses.*    ->  TO
        'custom'@'host47.example.com';mysql> CREATE USER
        'custom'@'server.domain' IDENTIFIED BY 'obscure';mysql> GRANT
        SELECT,INSERT,UPDATE,DELETE,CREATE,DROP    ->  ON
        customer.*    ->  TO
        'custom'@'server.domain';

Три учетных записи могут использоваться следующим образом:

Устанавливать custom учетные записи без GRANT, использовать INSERT операторы следующим образом, чтобы изменить таблицы предоставления непосредственно:

shell> mysql --user=root mysqlmysql> INSERT INTO user (Host,User,Password)    ->     VALUES('localhost','custom',PASSWORD('obscure'));mysql> INSERT INTO user (Host,User,Password)    ->     VALUES('host47.example.com','custom',PASSWORD('obscure'));mysql> INSERT INTO user (Host,User,Password)    ->     VALUES('server.domain','custom',PASSWORD('obscure'));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('host47.example.com','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('server.domain','customer','custom',    ->     'Y','Y','Y','Y','Y','Y');mysql> FLUSH
        PRIVILEGES;

Первые три INSERT операторы добавляют user записи таблицы, которые разрешают пользователю custom соединиться от различных узлов с данным паролем, но не предоставить глобальные полномочия (все полномочия устанавливаются в значение по умолчанию 'N'). Следующие три INSERT операторы добавляют db записи таблицы то предоставление полномочия к custom для bankaccount, expenses, и customer базы данных, но только когда получено доступ от надлежащих узлов. Как обычно, когда Вы изменяете таблицы предоставления непосредственно, следует сказать серверу перезагружать их с FLUSH PRIVILEGES так, чтобы изменения полномочия вступили в силу.

Создать пользователя, у которого есть доступ от всех машин в данном домене (например, mydomain.com), можно использовать"%"подстановочный символ в части узла имени учетной записи:

mysql> CREATE USER 'myname'@'%.mydomain.com'
        IDENTIFIED BY 'mypass';

Чтобы сделать ту же самую вещь, изменяя таблицы предоставления непосредственно, сделайте это:

mysql> INSERT INTO user
        (Host,User,Password,...)    ->     VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);mysql> FLUSH PRIVILEGES;