我有一个奇怪的错误。我通过命令行以root用户身份登录到本地Mysql。创建数据库后:
create database some_db;
然后给某些用户特权:
grant all privileges on some_db.* to some_user@'localhost' identified by 'password';
这给出了错误:
ERROR 1044 (42000): Access denied for user 'root'@'localhost' to database 'some_db'
根目录的权限(显示授予;)显示:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*8919C53DC7A4DFBF3F8584382E96463583EB7FDA'
我还要确保以root用户身份登录:
select current_user();
这确认我以“ root” @“ localhost”的身份登录
我已经创建了数据库并多次分配了用户,但从未遇到问题。为什么以root用户身份登录时无法将用户分配给root用户创建的数据库?
PS从其他职位,我想这个问题可能是由于一些奇怪的用户引起的
select host, user from mysql.user;
我尚未添加但确实出现的一些用户:
MY_COMPuTER_name.local | '' MY_COMPuTER_name.local | root
我试图删除这些用户
drop user 'root'@'MY_COMPuTER_name.local'; drop user ''@'MY_COMPuTER_name.local';
但是,尽管状态查询成功运行,但即使具有刷新特权也不会删除用户。为什么我无法删除用户?任何帮助都非常有用
首先,将您登录的用户标识为:
select user(); select current_user();
第一个命令的结果是您尝试登录时的身份,第二个命令是您实际连接时的身份。确认您root@localhost以mysql 身份登录。
root@localhost
Grant_priv到root@localhost。这是您可以检查的方式。
Grant_priv
mysql> SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user; +-----------+------------------+-------------------------------------------+------------+------------+ | host | user | password | Grant_priv | Super_priv | +-----------+------------------+-------------------------------------------+------------+------------+ | localhost | root | ***************************************** | N | Y | | localhost | debian-sys-maint | ***************************************** | Y | Y | | localhost | staging | ***************************************** | N | N | +-----------+------------------+-------------------------------------------+------------+------------+
您可以看到,对于root @ localhost,Grant_priv设置为N。必须为Y。下面是解决方法:
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root'; FLUSH PRIVILEGES; GRANT ALL ON *.* TO 'root'@'localhost';
我重新登录,一切正常。