Tables B.4, B.5, and B.6 list the available privileges. I've grouped them into my own rough categories: basic, administrative, and new. These are entirely artificial distinctions of my own making but should help give you a sense of how to assign privileges based upon the version of MySQL you are using and what a user needs to be able to do. As a rule, always give each user the minimum required privileges on a database.
Table B.4. This is the list of basic privileges that can be assigned to MySQL users on a case-by-case basis. It is generally safe to assign these to users for a specific database (except for the mysql database, which must be kept off-limits).
Basic MySQL Privileges
Reading of rows from tables
Adding new rows of data to tables
Altering existing data in tables
Removing existing data in tables
Listing the available databases
Creating and dropping indexes in tables
Modifying the structure or properties of a table
Creating new tables or databases
CREATE TEMPORARY TABLES
Creating temporary tables
Deleting existing tables or databases
Table B.5. These privileges should be given only to administrative users and preferably on specific databases.
Administrative MySQL Privileges
Reloading the grant tables (and therefore enact user changes)
Stopping the MySQL server
Importing data into tables from text files
Creating new users with the same permissions as current user
Creating new users
Removing the permissions of users
Showing currently running processes
Terminating running processes
Table B.6. These privileges have been added in newer versions of MySQL (mostly 5.0 and up). Note that it's safer and normal for some users to be able to use a view or run a stored procedure, whereas limited users can create or modify them.
Newer MySQL Privileges
Creating a view
Using a view
Modifying a stored procedure
Creating a stored procedure
Running a stored procedure
Showing replication status