|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Можно создать учетные записи MySQL двумя способами:
При использовании операторов, предназначенных для того, чтобы создать учетные
записи, такой как CREATE USER
или GRANT.
Эти операторы заставляют сервер делать соответствующие модификации к таблицам предоставления.
Управляя MySQL предоставляют таблицы непосредственно с операторами такой как INSERT,
UPDATE,
или DELETE.
Привилегированный метод должен использовать операторы создания учетной записи, потому что они более кратки и
менее подвержены ошибкам чем управление таблицами предоставления непосредственно. 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';
У учетных записей, создаваемых этими операторами, есть следующие свойства:
У двух из учетных записей есть имя пользователя monty
и пароль some_pass. Обе учетных записи являются учетными записями
суперпользователя с полными полномочиями сделать что-либо. 'monty'@'localhost' учетная запись может использоваться только,
соединяясь от локального узла. 'monty'@'%' считайте использует '%' подстановочный знак для части узла, таким образом, это может
использоваться, чтобы соединиться от любого узла.
Необходимо иметь, оба учитывают monty быть в состоянии соединиться
отовсюду как monty. Без localhost учетная
запись, анонимная учетная запись пользователя для localhost это
создается mysql_install_db, имел бы приоритет когда monty соединяется от локального узла. В результате monty был бы обработан как анонимный пользователь. Причина этого
состоит в том, что у анонимной учетной записи пользователя есть более определенное Host значение столбца чем 'monty'@'%'
считайте и таким образом прибывает ранее в user табличный порядок
сортировки. (user табличная сортировка обсуждается в Разделе
6.2.4, "Управление доступом, Этап 1: Проверка Соединения".)
'admin'@'localhost' у учетной записи нет никакого
пароля. Эта учетная запись может использоваться только admin соединяться от
локального узла. Это предоставляют RELOAD и PROCESS административные привилегии. Эти полномочия включают admin пользователь, чтобы выполнить перезагрузку mysqladmin, mysqladmin обновление, и сброс mysqladmin -xxx
команды, так же как mysqladmin processlist. Никакие полномочия не
предоставляют для того, чтобы получить доступ к любым базам данных. Вы могли добавить такие полномочия
позже, выпуская другой GRANT операторы.
'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';
Три учетных записи могут использоваться следующим образом:
Первая учетная запись может получить доступ bankaccount база данных, но только от локального узла.
Вторая учетная запись может получить доступ expenses
база данных, но только от узла host47.example.com.
Третья учетная запись может получить доступ customer
база данных, но только от узла 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;