mariadb更改自己的密码没有root权限

9jyewag0  于 2023-03-18  发布在  其他
关注(0)|答案(2)|浏览(160)

我想在MariaDB上更改用户(权限有限)的密码,而无需以root用户身份登录
我试过:

ALTER USER CURRENT_USER() IDENTIFIED BY 'newpassword';
  • 〉错误:#1227访问被拒绝;要执行该操作,您需要(至少一个)CREATE USER权限
    问题:我需要执行哪个授权以便这个用户可以更改他自己的密码(但不能更改其他用户的密码).而且这个用户也不能创建其他用户
6bc51xsx

6bc51xsx1#

要允许用户更改自己的密码而不授予他们创建或修改其他用户帐户的能力,您可以授予用户SET PASSWORD权限。
您可以通过以具有足够权限的用户(如root用户)身份登录并执行以下SQL命令来授予此权限:

GRANT SET PASSWORD ON *.* TO 'username'@'localhost';

用要更改其密码的用户名替换“username”。此命令赠款用户更改自己密码的能力,但不给予他们任何其他管理权限。
运行此命令后,用户应能够通过执行以下SQL命令更改其密码:

SET PASSWORD = 'newpassword';
dsekswqp

dsekswqp2#

我想出来的解决办法是:创建一个存储过程来检查您的主机和用户名,并更改该用户的密码,如下所示:

delimiter %%
CREATE PROCEDURE alter_password(newpassword varchar(50))
BEGIN
declare username varchar(256);
declare hostname varchar(256);

SELECT SUBSTRING_INDEX(USER(),'@',1) INTO username;
SELECT SUBSTRING_INDEX(USER(),'@',-1) INTO hostname;

 SET @A := CONCAT('SET PASSWORD FOR ''', username,'''@''%'' = PASSWORD(''', newpassword, ''');');
    PREPARE alter_user_stmt FROM @A;
    EXECUTE alter_user_stmt;
DEALLOCATE PREPARE alter_user_stmt;
END;
%%

您可以通过以下方式创建此过程:以具有足够权限的用户(如root用户)身份登录,然后使用以下命令授予用户对该过程的执行权限:

GRANT EXECUTE ON PROCEDURE alter_password TO 'username'@'hostname';

也许你可以使用准备好的语句,如果你想自动化它,那么用户'username'@'hostname'可以编辑他自己的密码,而不必给予他们任何其他的管理权限:

CALL alter_password('otherpassword');

相关问题