MySQL 相当于`su - someuser` 来假设另一个用户的身份?

Ste*_*ski 3 mysql

我运行一个 MySQL 服务器并且我在这个实例上拥有 MySQL 根级权限:

mysql> select CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.02 sec)
mysql> 
Run Code Online (Sandbox Code Playgroud)

我正在对一系列用户的 MySQL 权限进行故障排除。我不知道这些用户的密码。作为 MySQL root 用户,我可以在不知道密码的情况下假设另一个用户的身份吗?

在 Linux/Unix 世界中,我会使用像“su - someuser”这样的命令来假设用户的身份。MySQL 是否提供等效功能?

Rol*_*DBA 5

您所要求的只能通过两种方式完成

代理用户

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>
Run Code Online (Sandbox Code Playgroud)

这是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';
Run Code Online (Sandbox Code Playgroud)

安全类型(存储过程/视图)

在 中mysql.proc,有一列名为security_type。对于视图,这存在于information_schema.views. 它有两个值 1)invoker和 2) definer。如果存储过程具有security_typeas definer,则您具有与存储过程所有者相同的访问权限。当然,这只适用

  • 调用存储过程或从视图中选择时
  • 您拥有EXECUTE权限