Your second question was well covered by joanolo.
I would like to address your first question only.
On Apr 17, 2014, I answered this question : How to grant super privilege to the user?. In that post, I explained how the SUPER privilege was impossible to grant to a database-specific user. I clarified the difference between global privileges and database-specific privileges by comparing the table structure of mysql.user and mysql.db.
To show the difference between them in terms of grants side-by-side, please run this query:
SELECT
REPLACE(glb,'_priv','') global_privilege,
IFNULL(REPLACE(dbs,'_priv',''),'NOT ALLOWED') database_privilege
FROM (SELECT A.column_name glb,B.column_name dbs FROM
(SELECT column_name FROM information_schema.columns
WHERE table_schema='mysql' AND table_name='user'
AND column_name LIKE '%priv') A
LEFT JOIN
(SELECT column_name FROM information_schema.columns
WHERE table_schema='mysql' AND table_name='db'
AND column_name LIKE '%priv') B
ON A.column_name=B.column_name) AA;
When you run this in MySQL 5.7.12, you get the following output:
+-------------------+--------------------+
| global_privilege | database_privilege |
+-------------------+--------------------+
| Select | Select |
| Insert | Insert |
| Update | Update |
| Delete | Delete |
| Create | Create |
| Drop | Drop |
| Grant | Grant |
| References | References |
| Index | Index |
| Alter | Alter |
| Create_tmp_table | Create_tmp_table |
| Lock_tables | Lock_tables |
| Create_view | Create_view |
| Show_view | Show_view |
| Create_routine | Create_routine |
| Alter_routine | Alter_routine |
| Execute | Execute |
| Event | Event |
| Trigger | Trigger |
| Reload | NOT ALLOWED |
| Shutdown | NOT ALLOWED |
| Process | NOT ALLOWED |
| File | NOT ALLOWED |
| Show_db | NOT ALLOWED |
| Super | NOT ALLOWED |
| Repl_slave | NOT ALLOWED |
| Repl_client | NOT ALLOWED |
| Create_user | NOT ALLOWED |
| Create_tablespace | NOT ALLOWED |
+-------------------+--------------------+
29 rows in set (0.04 sec)
Given this display, it is impossible to grant RELOAD, SHUTDOWN, PROCESS, FILE, SHOW DATABASES, SUPER, REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER, and CREATE TABLESPACE to a database-specific user.
For example, you don't want a database-specific user to
- Shutdown the Database
- See the processlist of other users
- Setup Replication on their own
- Kill DB Connections
- Create a New User
- Create Giant Tablespace Files
- Load an External File into the Database
- Create External Files in the OS using SELECT ... INTO OUTFILE
- and so forth
SUPPLEMENTAL INFO
There are also table-specific grants in mysql.tables_priv and column-specific grants in mysql.columns_priv. These grants are stored in ENUM columns.
Just run DESC mysql.tables_priv; and DESC mysql.columns_priv; and see.