I have two servers both running on Version(): 10.3.21-MariaDB
On server1 when I log into mysql as root and execute the command: show grants for someuser;
It shows me all the grants for that user.
On server2 when I log into mysql as root and execute the command: show grants for someuser;
I get this error:
ERROR 1141 (42000): There is no such grant defined for user 'someuser'
on host '%'
On both servers when I execute the command:
select user from mysql.user;
I get a list of the users. So the users that I am trying to see their grants are there …
What is would be different with server2 that root can not see the grants ?
on all the servers is_role = N
but I did notice another difference among the 3 servers – the root user has different host entries
Also I have added the vm type that the server is running
also have results for a 3rd server
server3 (virtuozzo)
show grant must have the @somehost
using all of the different host entries give a result with the only difference being the @somehost is whatever was used in the for someuser@somehost
GRANT USAGE ON . TO 'someuser'@'somehost' indentified by ….
GRANT USAGE ON . TO 'someuser'@'ip address' indentified by …
etc.
root user entries:
| root | localhost | N |
| root | server.example.com | N |
| root | 127.0.0.1 | N |
| root | ::1 | N |
server2 (vmware)
show grant must have the @host
only the @ip address gives a result
root user entries:
| root | localhost | N |
| mysql.session | localhost | N |
| mysql.sys | localhost | N |
server1 (kwm)
show grant does not have to have the @host
using all of the different host entries give a result with the only difference being the @somehost is whatever was used in the for someuser@somehost
GRANT USAGE ON . TO 'someuser'@'somehost' indentified by ….
GRANT USAGE ON . TO 'someuser'@'ip address' indentified by …
etc.
root user entries:
| root | localhost | N |
| root | cent6base-cpanel.pxe.bluehost.com | N |
| root | 127.0.0.1 | N
Best Answer
I'm only guessing here, but could it be that you have defined different
host
values forsomeuser
on server1 and server2?When you execute
SHOW GRANTS FOR someuser;
it really executesSHOW GRANTS FOR someuser@'%';
- that is, if you don't specify the host part, the it will default to using the wildcard (%
) for the host part.So if you have
someuser@'%'
on server1 and e.g.someuser@'localhost'
on server2, then you will get the result you have observed.You can see the host part of the users by executing
SELECT user, host FROM mysql.user;
And then you can view the grants for the different users by executing
SHOW GRANTS FOR someuser@'localhost';
or similar for users with other host values in theirmysql.user
rows. Note that each row in the table is a different user - it doesn't matter that some of them might have the same user names as long as they have different host values.