我在向单个数据库上的用户授予权限时遇到问题。完成以下操作后,用户无法登录。我在 MySQL 5.6 上以 root 身份运行
SELECT USER(),CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
这是我的数据库列表(删节)
list databases;
+-------------------------+
| Database |
+-------------------------+
| hr_test |
首先我创建新用户
CREATE USER 'hr_test_user'@'localhost' IDENTIFIED BY 'password';
这似乎有效(我没有显示所有其他用户)。
select * from information_schema.user_privileges;
| 'hr_test_user'@'localhost' | def | USAGE | NO |
然后我尝试向一个数据库授予权限
GRANT ALL PRIVILEGES ON hr_test.* TO 'hr_test_user'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
当我运行“select * from information_schema.user_privileges;”时 什么都没有改变,用户只有“使用”。当用户尝试登录时,他们会被拒绝。
但是,当我授予广泛权限时,下面的行我将获得所有权限。
GRANT ALL PRIVILEGES ON *.* TO 'hr_test_user'@'localhost' IDENTIFIED BY 'password';
下表显示了这些特权(删节)
| 'hr_test_user'@'localhost' | def | SELECT | NO |
| 'hr_test_user'@'localhost' | def | INSERT | NO |
| 'hr_test_user'@'localhost' | def | UPDATE | NO |
| 'hr_test_user'@'localhost' | def | DELETE | NO |
| 'hr_test_user'@'localhost' | def | CREATE | NO |
| 'hr_test_user'@'localhost' | def | DROP | NO |
我可以删除用户并再次执行此操作,但我得到相同的结果。我以前这样做是为了毫无问题地创建其他用户,我什至准确地记录了我上次在它工作时所做的事情,所以我很困惑。
看起来我正在错误地识别我想要授予权限的数据库,但我无法发现我做错了什么。其他人可以吗?
更新 根据@SQL.RK 的回答,我重新创建了具有所需权限的用户,然后运行了这个附加命令
select * from information_schema.SCHEMA_PRIVILEGES;
这是输出的相关部分
| 'hr_test_user'@'localhost' | def | hr_test | SELECT | NO |
| 'hr_test_user'@'localhost' | def | hr_test | INSERT | NO |
| 'hr_test_user'@'localhost' | def | hr_test | UPDATE | NO |
| 'hr_test_user'@'localhost' | def | hr_test | DELETE | NO |
| 'hr_test_user'@'localhost' | def | hr_test | CREATE | NO |
这对我来说看起来不错。我尝试登录并且它工作,当我做的事情看起来和以前完全一样!
理论 我从密码管理器中复制了这段文字,我在其中保存了数据库身份验证信息和用于创建数据库的命令。我注意到当我从那里复制出来时,我不必在 MySQL 中按 Enter 键。我想知道授权命令是否实际上没有执行。
我不认为这是因为“授予所有特权”也在那里并且有效。我有点难过。我暂时不会将此标记为已回答,我想听听任何理论,或者先听听我是否做了明显不正确的事情。
更新 2
show grants;
+-------------------------------------------------------------------------------------------+
| Grants for hr_test_user@localhost |
+-------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'hr_test_user'@'localhost' IDENTIFIED BY PASSWORD <secret> |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE ON `hr_test`.* TO 'hr_test_user'@'localhost' |
+-------------------------------------------------------------------------------------------+