23

How can I tell which MySQL users have access to a database and what privileges they have?

I seem to be able to get this information from phpMyAdmin when I click "Privileges". . .

                 Users having access to "mydatabase"
User     Host       Type               Privileges              Grant
myuser1  %          database-specific  ALL PRIVILEGES          Yes
root     localhost  global             ALL PRIVILEGES          Yes
myuser2  %          database-specific  SELECT, INSERT, UPDATE  No

. . . but I'd like to know how to perform this query from the command line.

(phpMyAdmin often shows me the SQL syntax of the command it is executing, but I don't see it in this case.)

Please note that I'm not asking what grants a particular user has (i.e. "SHOW GRANTS for myuser1") but rather, given the name of a database, how do I determine which MySQL users have access to that database and what privileges they have? Basically, how can I get the chart above from the command line?

3 Answers 3

28

You can append \G to the command to get results displayed in 'grid' veiw

SELECT * FROM mysql.db WHERE Db = '<database name in LC>'\G;
2
  • 8
    +1 for \G not seen that before
    – jx12345
    Apr 8, 2017 at 8:35
  • 4
    When using \G you don't need a ; anymore. Aug 12, 2020 at 14:22
9
SELECT * FROM mysql.db WHERE Db = '<database name in LC>';
1
  • Thanks. This answer does seem to output the same raw data as the chart in the question. . . but in a less readable format. I guess presenting the data in the same format is an exercise for the reader. . . ;) May 1, 2009 at 18:06
6

You might give this a try, should provide the best readability:

select db 'DATABASE', host HOST, user USER from mysql.db where db = '<databasename>';

Something more memorizeable for the cli:

select db,host,user from mysql.db;

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .