Mysql – Создание пользователей

MySQL. Два способа создания аккаунтов/пользователей

Вы можете создать MySQL пользователей двумя способами: С помощью операторов предназначенных для создания аккаунтов, таких как CREATE USER или GRANT. Эти операторы позволяют вносить в таблицу привилегий соответствующие изменения. И прямыми манипуляциями в MySQL таблицах привилегий с помощью операторов INSERT, UPDATE, или DELETE.

Предпочтительным методом является использование операторов создания аккаунтов, потому что они более кратки и менее подвержены ошибкам, чем прямые манипуляции в таблицах привилегий.
Также есть возможность добавлять аккаунты с помощью программ сторонних производителей, позволяющих производить администрирование аккаунтов в MySQL. Одной из таких программ является phpMyAdmin.

Приведенные ниже примеры покажут как использовать программу MySQL клиента, для создания новых учетных записей. В этих примерах предполагается что привилегии пользователей были созданы в соответствии с настройками по умолчанию. Это означает, что для внесения изменений необходимо подключится к серверу MySQL от имени root пользователя, при этом root должен иметь привилегии INSERT для базы данных mysql и административные привилегии RELOAD.

Для начала запустите MySQL терминал и войдите в оболочку от имени главного пользовтеля ‘root’:

   shell> mysql --user=root mysql

Если пользователь root защищен паролем, вам понадобиться передать также и пароль, с помощью параметра –password или -p.

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

   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';

Аккаунты созданные этими операторами имеют следующие характеристики:

Два из созданных аккаунтов имеют имя monty и пароль some_pass. Оба эти аккаунты являются супер-пользователями, имеют все привилегии и могут делать что угодно. Аккаунт ‘monty’@’localhost’ может использоваться только при подключении с localhost. Аккаунт ‘monty’@’%’ использует специальный параметр ‘%’ вместо адреса хоста, благодаря этому он может подключатся к серверу с любого адреса.

Аккаунту ‘admin’@’localhost’ не задан пароль. Этот аккаунт может использоваться только администратором и только с локального хоста. Ему разрешены административные операторы RELOAD и PROCESS. Эти привилегии позволяют администратору выполнять команды: mysqladmin reload, mysqladmin refresh, и mysqladmin flush-xxx, а также mysqladmin processlist . Но этот пользователь не имеет никаких привилегий для управления любой из баз данных. Мы добавим эти привилегии позже используя немного другие GRANT операторы.

Аккаунту ‘dummy’@’localhost’ не задан пароль. Это значит что он может быть использован, при подключении, только с localhost. Ему не даны никакие привилегии. Мы присвоим ему эти привилегии чуть позже.

Для того чтобы проверить права или привилегии аккаунта, используйте следующую команду 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 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',
       ->     '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;

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

Значение ‘Y’ включает привилегии для аккаунта. в зависимости от вашей версии MySQL, вы можете иметь разное количество значений ‘Y’ в первых двух операторах INSERT. Оператор INSERT для администратора работает с более читабельным расширением INSERT синтаксиса -используя оператор SET.

Оператор INSERT для пользователя dummy, имеет значения только для полей Host, User, и Password. Для него не заданны поля с привилегиями, так что MySQL добавит их автоматически с значением по умолчанию ‘N’.

Для создания супер-пользователя, необходимо выполнить INSERT с значениями ‘Y’ во всех полях что отвечают за привилегии пользователя.

В следующих примерах мы создадим троих пользователей и дадим им доступ только к определенным базам данных. Для создания пользователей с помощью CREATE USER и GRANT, используйте следующие команды:

   shell> mysql --user=root mysql
   mysql> 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';

Первый аккаунт имеет доступ к базе данных bankaccount, но только с localhost. Второй аккаунт имеет доступ к базе данных expenses, но только с хоста host47.example.com. Третий аккаунт имеет доступ к базе данных customer, но только с хоста server.domain.

Для создания этих же аккаунтов без операторов GRANT, используйте INSERT в следующем виде:

   shell> mysql --user=root mysql
   mysql> 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 оператора добавляют записи в таблицу пользователей, которые позволят пользователю 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;