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 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;
Когда Вы создаете учетные записи с 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 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
база данных, но только от локального узла.
Вторая учетная запись может получить доступ expenses
база данных, но только от узла host47.example.com
.
Третья учетная запись может получить доступ customer
база данных, но только от узла server.domain
.
Устанавливать custom
учетные записи без 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
операторы добавляют 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;