Назад | Перейти на главную страницу

MySQL эквивалент `su - someuser`, чтобы принять личность другого пользователя?

Я запускаю сервер 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, у вас те же права доступа, что и у владельца хранимой процедуры. Конечно, это применимо только

  • при вызове хранимой процедуры или выборе из представления
  • У тебя есть ВЫПОЛНИТЬ привилегия