相当于`su – someuser`的MySQL等同于另一个用户的身份?

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

mysql> select CURRENT_USER(); +----------------+ | CURRENT_USER() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.02 sec) mysql> 

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

在Linux / Unix世界中,我会使用像“su – someuser”这样的命令来执行此操作,以承担用户的身份。 MySQL提供了一个等价的function吗?

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

代理用户

MySQL 5.5引入了代理用户

当通过身份validation插件对MySQL服务器进行身份validation时,插件可能会要求连接(外部)用户作为不同的用户进行特权检查。 这使得外部用户成为第二用户的代理; 即拥有第二个用户的权限。 换句话说,外部用户是“代理用户”(可以模仿或被认为是另一个用户的用户),而第二用户是“代理用户”(其身份可以由代理用户承担的用户) 。

您可以在mysql.proxies_priv中find定义的代理用户:

 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'; 

安全types(stored procedures/视图)

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

  • 当调用一个存储过程或从视图中select
  • 您有EXECUTE特权