Spec-Zone .ru
спецификации, руководства, описания, API
|
Когда аутентификация к серверу MySQL происходит посредством плагина аутентификации, плагин может запросить, чтобы соединяющийся (внешний) пользователь был обработан как различный пользователь в проверяющих полномочие целях. Это позволяет внешнему пользователю быть прокси для второго пользователя; то есть, чтобы иметь полномочия второго пользователя. Другими словами внешний пользователь является "пользователем прокси" (пользователь, который может явиться олицетворением или стать известным как другой пользователь), и второй пользователь является "проксированным пользователем" (пользователь, идентификационные данные которого могут быть взяты пользователем прокси).
Этот раздел описывает, как пользовательская возможность прокси работает. Для получения общей информации о плагинах аутентификации, см. Раздел 6.3.7, "Сменная Аутентификация". Если Вам интересно в письменной форме Ваши собственные плагины аутентификации, которые поддерживают пользователей прокси, видят Раздел 23.2.4.9.4, "Реализовывая Пользовательскую Поддержку Прокси в Плагинах Аутентификации".
Для того, чтобы проксировать, чтобы произойти, должны быть удовлетворены эти условия:
Когда соединяющийся клиент должен быть обработан как пользователь прокси, плагин должен возвратить другое имя, чтобы указать на проксированное имя пользователя.
Учетная запись пользователя прокси должна быть установлена, чтобы
аутентифицироваться плагином. Используйте CREATE
USER
или GRANT
оператор, чтобы связать учетную запись с плагином.
Учетная запись пользователя прокси должна иметь PROXY
полномочие для проксированной учетной записи. Используйте GRANT
оператор для этого.
Рассмотрите следующие определения:
CREATE USER 'empl_external'@'localhost' IDENTIFIED WITH auth_plugin AS 'auth_string';CREATE USER 'employee'@'localhost' IDENTIFIED BY 'employee_pass';GRANT PROXY ON 'employee'@'localhost' TO 'empl_external'@'localhost';
Когда клиент соединяется как empl_external
от локального узла, использования MySQL
auth_plugin
выполнять аутентификацию. Если auth_plugin
возвраты employee
имя пользователя к серверу (основанный на контенте 'auth_string'
и возможно консультируясь с некоторой внешней системой
аутентификации), который служит запросом к серверу, чтобы обработать этот клиент, в целях проверки полномочия,
как employee
локальный пользователь.
В этом случае, empl_external
пользователь прокси и employee
проксированный пользователь.
Сервер проверяет ту аутентификацию прокси для employee
возможно для empl_external
пользователь, проверяя, ли empl_external
имеет PROXY
полномочие для
employee
. (Если бы это полномочие не предоставили, ошибка произошла бы.)
Когда проксирование происходит, USER()
и CURRENT_USER()
функции могут использоваться, чтобы видеть различие между
соединяющимся пользователем и учетной записью, полномочия которой применяются во время текущего сеанса. Для
примера, только описанного, те функции возвращают эти значения:
mysql> SELECT USER(), CURRENT_USER();
+-------------------------+--------------------+| USER() | CURRENT_USER() |+-------------------------+--------------------+| empl_external@localhost | employee@localhost |+-------------------------+--------------------+
IDENTIFIED WITH
пункт, который называет плагин аутентификации, может сопровождаться
AS
пункт, определяющий строку, которую сервер передает к плагину, когда
пользователь соединяется. Это до каждого плагина ли AS
пункт требуется. Если это
требуется, формат строки аутентификации зависит от того, как плагин намеревается использовать это.
Консультируйтесь с документацией для данного плагина для информации о строковых значениях аутентификации,
которые это принимает.
Специальное предложение PROXY
полномочие необходимо, чтобы позволить внешнему пользователю соединиться как и иметь полномочия другого
пользователя. Чтобы предоставить это полномочие, используйте GRANT
оператор. Например:
GRANT PROXY ON 'proxied_user
' TO 'proxy_user
';
proxy_user
должен представить допустимого внешне аутентифицируемого
пользователя MySQL в сбой попыток подключения или время соединения. proxied_user
должен представить допустимого локально
аутентифицируемого пользователя в сбой попыток подключения или время соединения.
Соответствие REVOKE
синтаксис:
REVOKE PROXY ON 'proxied_user
' FROM 'proxy_user
';
MySQL GRANT
и REVOKE
расширения синтаксиса работают как обычно. Например:
GRANT PROXY ON 'a' TO 'b', 'c', 'd';GRANT PROXY ON 'a' TO 'd' IDENTIFIED BY ...;GRANT PROXY ON 'a' TO 'd' WITH GRANT OPTION;GRANT PROXY ON 'a' TO ''@'';REVOKE PROXY ON 'a' FROM 'b', 'c', 'd';
В предыдущем примере, ''@''
пользователь прокси значения по умолчанию и означает
"любого пользователя." Пользователь прокси
значения по умолчанию обсуждается позже в этом разделе.
PROXY
полномочие можно
предоставить в этих случаях:
proxied_user
для себя: значение USER()
должен точно соответствовать CURRENT_USER()
и proxied_user
, и
для частей имени пользователя и для имени хоста имени учетной записи.
Пользователем, который имеет GRANT PROXY ... WITH GRANT
OPTION
для proxied_user
.
root
учетная запись, создаваемая по умолчанию во время установки MySQL, имеет PROXY ... WITH GRANT OPTION
полномочие для ''@''
, то есть, для всех пользователей. Это включает root
устанавливать пользователей прокси, так же как делегировать к другим учетным
записям полномочия, чтобы установить пользователей прокси. Например, root
может
сделать это:
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'test';GRANT PROXY ON ''@'' TO 'admin'@'localhost' WITH GRANT OPTION;
Теперь admin
пользователь может управлять всем определенным GRANT
PROXY
отображения. Например, admin
может сделать это:
GRANT PROXY ON sally TO joe;
Чтобы определить, что некоторые или все пользователи должны соединить использование данного внешнего плагина,
создайте "пустого" пользователя MySQL,
установите его, чтобы использовать тот плагин для аутентификации, и позволить плагину возвращать вещественное
число аутентифицируемое имя пользователя (если различный от пустого пользователя). Например, предположите, что
там существует гипотетический названный плагин ldap_auth
это реализует
аутентификацию LDAP:
CREATE USER ''@'' IDENTIFIED WITH ldap_auth AS 'O=Oracle, OU=MySQL';CREATE USER 'developer'@'localhost' IDENTIFIED BY 'developer_pass';CREATE USER 'manager'@'localhost' IDENTIFIED BY 'manager_pass';GRANT PROXY ON 'manager'@'localhost' TO ''@'';GRANT PROXY ON 'developer'@'localhost' TO ''@'';
Теперь предположите, что клиент пытается соединиться следующим образом:
mysql --user=myuser --password='myuser_pass' ...
Сервер не будет находить myuser
определенный как пользователь MySQL. Но потому что
есть пустая учетная запись пользователя (''@''
), это соответствует клиентское имя
пользователя и имя хоста, сервер аутентифицирует клиент против той учетной записи: сервер вызывает ldap_auth
, передача этого myuser
и myuser_pass
как имя пользователя и пароль.
Если ldap_auth
плагин находит в каталоге LDAP это myuser_pass
не корректный пароль для myuser
, сбои
аутентификации и сервер отклоняют соединение.
Если пароль корректен и ldap_auth
находит это myuser
разработчик, это возвращает имя пользователя developer
к серверу MySQL, а не myuser
. Сервер проверяет это ''@''
может
аутентифицировать как developer
(потому что это имеет PROXY
полномочие сделать так), и принимает соединение. Сеанс продолжается с
myuser
наличие полномочий developer
. (Эти полномочия
должны быть установлены использованием DBA GRANT
операторы, не показанные.) USER()
и CURRENT_USER()
функции возвращают эти значения:
mysql> SELECT USER(), CURRENT_USER();
+------------------+---------------------+| USER() | CURRENT_USER() |+------------------+---------------------+| myuser@localhost | developer@localhost |+------------------+---------------------+
Если плагин вместо этого находит в каталоге LDAP это myuser
менеджер, это
возвращается manager
как имя пользователя и сеанс продолжается с myuser
наличие полномочий manager
.
mysql> SELECT USER(), CURRENT_USER();
+------------------+-------------------+| USER() | CURRENT_USER() |+------------------+-------------------+| myuser@localhost | manager@localhost |+------------------+-------------------+
Для простоты внешняя аутентификация не может быть многоуровневой: Ни один учетные данные для developer
ни те для manager
принимаются во внимание в
предыдущем примере. Однако, они все еще используются, если клиент пытается аутентифицировать непосредственно
против developer
или manager
учетная запись, которая
является, почему те учетные записи должны быть присвоенными паролями.
Прокси значения по умолчанию считает использование ''
в части узла, которая
соответствует любой узел. Если Вы устанавливаете пользователя прокси значения по умолчанию, заботитесь, чтобы
также проверить на учетные записи с '%'
в части узла, потому что это также
соответствует любой узел, но имеет приоритет ''
по правилам, что сервер использует
для строк учетной записи вида внутренне (см. Раздел
6.2.4, "Управление доступом, Этап 1: Проверка Соединения").
Предположите, что установка MySQL включает эти две учетных записи:
CREATE USER ''@'' IDENTIFIED WITH some_plugin;CREATE USER ''@'%' IDENTIFIED BY 'some_password';
Намерение первой учетной записи состоит в том, чтобы служить пользователем прокси значения по умолчанию, чтобы использоваться, чтобы аутентифицировать соединения для пользователей, которые иначе не соответствуют более специфичную учетную запись. Вторая учетная запись, возможно, была создана, например, чтобы включить пользователям без их собственной учетной записи как анонимный пользователь.
Однако, в этой конфигурации, первая учетная запись никогда не будет использоваться потому что соответствующий
вид правил ''@'%'
перед ''@''
. Для учетных записей,
которые не соответствуют больше специфичную учетную запись, сервер попытается аутентифицировать их против ''@'%'
вместо ''@''
.
Если Вы намереваетесь создать значение по умолчанию, проксируют пользователя, проверяют на другое существующее "соответствие любого пользователя" учетные записи, которые будут иметь приоритет по значению по умолчанию, проксируют пользователя и таким образом препятствуют тому, чтобы тот пользователь работал как предназначено. Может быть необходимо удалить любые такие учетные записи.
Две системных справки переменных прослеживают процесс входа в систему прокси:
proxy_user
: Это значение NULL
если
проксирование не используется. Иначе, это указывает на учетную запись пользователя прокси. Например,
если клиент будет аутентифицировать через учетную запись прокси значения по умолчанию, то эта переменная
будет установлена следующим образом:
mysql> SELECT
@@proxy_user;
+--------------+| @@proxy_user |+--------------+| ''@'' |+--------------+
external_user
: Иногда плагин аутентификации может использовать внешнего
пользователя, чтобы аутентифицировать к серверу MySQL. Например, при использовании Windows собственная
аутентификация, плагин, который аутентифицирует использование API окон, не нуждается в идентификаторе
для входа в систему, который передают к этому. Однако, это все еще использует идентификатор пользователя
Windows, чтобы аутентифицировать. Плагин может возвратить этот внешний идентификатор пользователя (или
первые 512 байтов UTF-8 этого) к серверу, используя external_user
переменная сеанса только для чтения. Если плагин не устанавливает эту переменную, ее значение NULL
.