Я запускаю сервер MySQL, и у меня есть привилегии корневого уровня MySQL в этом экземпляре:
mysql> select CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.02 sec)
mysql>
Я устраняю проблемы с привилегиями MySQL для ряда пользователей. Я не знаю паролей для этих пользователей. Могу ли я, как пользователь root в MySQL, принять личность другого пользователя, не зная его пароля?
В мире Linux / Unix я бы сделал это с помощью такой команды, как «su - someuser», чтобы принять личность пользователя. Предоставляет ли MySQL эквивалентную функцию?
То, о чем вы просите, можно сделать только двумя способами
Представлен MySQL 5.5 прокси-пользователи
Когда аутентификация на сервере MySQL происходит с помощью плагина аутентификации, плагин может запросить, чтобы подключающийся (внешний) пользователь рассматривался как другой пользователь в целях проверки прав. Это позволяет внешнему пользователю быть прокси для второго пользователя; то есть иметь привилегии второго пользователя. Другими словами, внешний пользователь - это «прокси-пользователь» (пользователь, который может выдавать себя за другого пользователя или стать известным как другой), а второй пользователь - «прокси-пользователь» (пользователь, личность которого может быть передана прокси-пользователю). .
Вы можете найти определенных пользователей прокси в mysql.proxies_priv:
mysql> desc mysql.proxies_priv;
+--------------+------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------+------+-----+-------------------+-----------------------------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
| Proxied_host | char(60) | NO | PRI | | |
| Proxied_user | char(16) | NO | PRI | | |
| With_grant | tinyint(1) | NO | | 0 | |
| Grantor | char(77) | NO | MUL | | |
| Timestamp | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+--------------+------------+------+-----+-------------------+-----------------------------+
7 rows in set (0.22 sec)
mysql>
Вот это пример кода из документации MySQL
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';
В mysql.proc
, есть столбец с названием security_type
. С представлениями это существует в information_schema.views
. Имеет два значения 1) invoker
и 2) definer
. Если хранимая процедура имеет security_type
так как definer
, у вас те же права доступа, что и у владельца хранимой процедуры. Конечно, это применимо только