MySQL重命名用户

时间:2019-11-20 08:52:34  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL RENAME USER语句重命名现有用户帐户。

MySQL RENAME USER语句简介

RENAME USER语句重命名一个或多个现有帐户。
这是RENAME USER语句的基本语法:

RENAME USER old_user1 
TO new_user;

使用以下语法:

  • 首先,指定要重命名的现有用户的名称。

  • 其次,在TO关键字之后指定新的用户名。
    新名称不能存在,否则您将收到错误消息。

如果要一次重命名多个用户帐户,请使用以下语法:

RENAME USER 
    old_user1 TO new_user1,
    old_user2 TO new_user2,
    ...

重命名用户将旧用户的所有特权转移到新用户。
但是,它不会删除或使依赖于旧用户的数据库对象无效。

例如,假设您有一个存储过程,其DEFINER属性指定了旧用户。
并且此存储过程在定义者安全上下文中执行。
如果重命名旧用户,则执行存储过程将收到错误消息。

MySQL RENAME USER示例

让我们举一些使用MySQL RENAME USER语句的示例。

A)使用MySQL RENAME USER重命名一个用户示例

首先,创建一个名为john @ localhost的新用户:

CREATE USER john@localhost 
IDENTIFIED BY 'Super!pass1';

其次,使用RENAME USER重命名用户john @ localhost:

RENAME USER john@localhost
TO doe@localhost;

第三,从mysql.user查询数据以验证重命名:

SELECT host, user
FROM mysql.user
WHERE user = 'doe' and host = 'localhost';

B)使用MySQL RENAME USER重命名多个用户帐户的示例

首先,创建两个用户帐户jill @ localhost和hill @ localhost

CREATE USER jill@localhost 
IDENTIFIED BY 'Super!pass1';

CREATE USER hill@localhost 
IDENTIFIED BY 'Super!pass1';

其次,使用RENAME USER语句重命名这两个用户:

RENAME USER     
    jill@localhost TO jin@localhost,
    hill@localhost TO hank@localhost;

第三,从mysql.user查询数据以验证重命名:

SELECT host, user
FROM mysql.user
WHERE user IN ('jin','hank');

C)使用MySQL RENAME USER重命名与存储过程关联的用户帐户

首先,创建一个名为fx的新用户帐户:

CREATE USER fx
IDENTIFIED BY 'Super!pass2';

其次,授予fx所有特权:

GRANT ALL ON *.* 
TO fx;

第三,以fx身份登录并创建一个过程,该过程返回示例数据库中付款表中的所有行:

DELIMITER $$

CREATE DEFINER=fx PROCEDURE GetPayments()
SQL SECURITY DEFINER
BEGIN
    SELECT * FROM payments;
END$$

DELIMITER ;

过程的定义者为fx,SQL SECURITY指定过程将以定义者的特权执行。

第四,以root用户身份登录并调用GetPayments()过程:

CALL GetPayments();

第五,将用户帐户fx重命名为fc:

RENAME USER fx TO fc;

第六,再次调用GetPayments()过程:

CALL GetPayments();

MySQL发出以下消息:

Error Code: 1449. The user specified as a definer ('fx'@'%') does not exist

若要解决此问题,您需要在存储过程GetPayments()中手动更改定义器并保存它。

在本教程中,您学习了如何使用MySQL RENAME USER语句重命名一个或多个现有用户帐户。