如果我在 mysql 数据库上有 root 权限,并且我想放弃普通用户的权限,而不使用他们的密码,我可以这样做吗?如果是这样怎么办?想想# su - username
unix。基本上,我只是想避免需要他们的密码才能成为他们,所以我可以在他们的用户身上测试他们的权限。在 postgres 中,我可以简单地允许对系统 root 用户进行身份验证,以绕过密码验证。我需要这样做的原因是能够通过成为用户来重现用户问题,而不是他们将无法准确重现。我当然可以询问他们的密码,但绕过它需要更多时间。
如果我在 mysql 数据库上有 root 权限,并且我想放弃普通用户的权限,而不使用他们的密码,我可以这样做吗?如果是这样怎么办?想想# su - username
unix。基本上,我只是想避免需要他们的密码才能成为他们,所以我可以在他们的用户身上测试他们的权限。在 postgres 中,我可以简单地允许对系统 root 用户进行身份验证,以绕过密码验证。我需要这样做的原因是能够通过成为用户来重现用户问题,而不是他们将无法准确重现。我当然可以询问他们的密码,但绕过它需要更多时间。
我刚刚意识到——只要你不介意在登录时锁定用户——
UPDATE mysql.user SET password=PASSWORD('new password') WHERE user='username' AND host='hostname';
UPDATE mysql.user SET password='saved password hash' WHERE user='username' AND host='hostname';
flush privileges;
...在操作 mysql.user 表之后,您可能需要这样做。从 MySQL 5.5.7 开始,可以模拟用户,引入Proxy Users。我以前从未这样做过,所以我使用test authentication plugin进行了尝试,因为似乎代理用户只能在启用身份验证插件的情况下工作。这是我采取的步骤。
以 root 身份执行的第一步:
mysql> INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';
mysql> SHOW PLUGINS;
创建要模拟的用户(在您的情况下它已经存在):
mysql> GRANT ALL PRIVILEGES ON
dtest@
本地主机IDENTIFIED BY 'mypass';
创建“代理”用户:
mysql> CREATE USER proxy@localhost IDENTIFIED WITH test_plugin_server AS 'dtest';
mysql> GRANT PROXY ON dtest@localhost TO proxy@localhost;
mysql> FLUSH PRIVILEGES;
现在,尝试使用用户登录
proxy
,密码:(dtest
代理用户的“AS”变量):$ mysql -uproxy -pdtest
mysql> SELECT USER(), CURRENT_USER();
mysql> SHOW GRANTS;
现在 MySQL 没有 root 密码,而是使用
auth_socket
插件来验证连接到套接字的用户是系统的 root 用户。如果您可以为所有用户使用 unix 帐户,您可以使用相同的技术来解决您的问题,这会带来各种可能性,例如简单的二进制文件存储!首先,您将为用户添加一个 unix 帐户:
root: adduser testuser
然后添加一个匹配的 MySQL 用户(可以在
adduser.local
脚本中自动完成):CREATE USER 'testuser'@'localhost' IDENTIFIED WITH auth_socket;
现在切换到用户(以root身份完成时不需要密码):
root: su testuser
以用户身份连接到 MySQL(不需要密码,因为您以该用户身份登录):
testuser: mysql -u $USER
(或 -you testuser 而不是使用环境变量)最好提供
-u
user 参数,因为 mysql 客户端自动用户便利例程不擅长自行解决,例如,如果您从一个用户到另一个用户帐户,它出于某种原因使用第一个用户。我不知道复制等价物的具体方法
su
,但是,您不需要他们的密码——由于 mysql 处理身份验证的方式,您可以从每台机器设置不同的密码(或根本没有密码)那是从登录的。