📖 Scenario: You are managing a small company's database. You need to control who can access and change the data. This is important to keep the data safe and organized.
🎯 Goal: Learn how to grant specific privileges to a user in MySQL so they can perform certain actions on a database.
📋 What You'll Learn
Create a new user with a password
Grant SELECT privilege on a specific database to the user
Grant INSERT privilege on a specific table to the user
Apply the changes so the privileges take effect
💡 Why This Matters
🌍 Real World
Database administrators often need to control who can read or change data. Granting privileges helps keep data safe and organized.
💼 Career
Knowing how to manage user privileges is essential for roles like database administrator, backend developer, and data analyst.
Progress0 / 4 steps
1
Create a new user
Write a MySQL statement to create a new user called 'report_user' with the password 'ReportPass123'.
MySQL
Hint
Use the CREATE USER statement with the exact username and password given.
2
Grant SELECT privilege on the database
Write a MySQL statement to grant the SELECT privilege on the database called company_data to the user 'report_user'.
MySQL
Hint
Use GRANT SELECT ON company_data.* TO 'report_user'@'localhost'; to allow reading data from all tables in the database.
3
Grant INSERT privilege on a specific table
Write a MySQL statement to grant the INSERT privilege on the table sales_records in the company_data database to the user 'report_user'.
MySQL
Hint
Use GRANT INSERT ON company_data.sales_records TO 'report_user'@'localhost'; to allow adding new rows to the sales_records table.
4
Apply the privilege changes
Write a MySQL statement to reload the privilege tables so the changes take effect immediately.
MySQL
Hint
Use FLUSH PRIVILEGES; to make sure MySQL applies the new permissions right away.
Practice
(1/5)
1. What does the GRANT SELECT ON database.* TO 'user'@'host'; command do in MySQL?
easy
A. Allows the user to read data from all tables in the specified database.
B. Allows the user to modify data in all tables in the specified database.
C. Creates a new user with read access to the database.
D. Deletes all data from the specified database.
Solution
Step 1: Understand the GRANT command
The GRANT command is used to give specific permissions to a user on a database or table.
Step 2: Analyze the SELECT privilege
SELECT privilege allows reading data but not modifying it.
Final Answer:
Allows the user to read data from all tables in the specified database. -> Option A
Quick Check:
GRANT SELECT = read permission [OK]
Hint: SELECT privilege means read-only access [OK]
Common Mistakes:
Confusing SELECT with UPDATE or DELETE privileges
Thinking GRANT creates a user
Assuming it deletes data
2. Which of the following is the correct syntax to grant all privileges on the shop database to user 'alice' connecting from any host?
easy
A. GRANT ALL PRIVILEGES ON shop.* TO 'alice'@'%';
B. GRANT ALL PRIVILEGES ON shop TO 'alice'@'%';
C. GRANT ALL ON shop.* TO 'alice';
D. GRANT ALL PRIVILEGES TO 'alice'@'%' ON shop.*;
Solution
Step 1: Check the database and user format
The database must be followed by .* to specify all tables, and user must include host.
Step 2: Verify the correct order of clauses
The syntax is: GRANT privileges ON database.* TO 'user'@'host';
Final Answer:
GRANT ALL PRIVILEGES ON shop.* TO 'alice'@'%'; -> Option A
Quick Check:
Correct syntax = GRANT ALL PRIVILEGES ON shop.* TO 'alice'@'%'; [OK]
Hint: Use database.* to grant on all tables [OK]
Common Mistakes:
Omitting .* after database name
Placing TO clause incorrectly
Not specifying host with user
3. Given the commands:
GRANT SELECT, INSERT ON sales.* TO 'bob'@'localhost';
SHOW GRANTS FOR 'bob'@'localhost';
What will the SHOW GRANTS output include?
medium
A. GRANT ALL PRIVILEGES ON sales.* TO 'bob'@'localhost'
B. GRANT SELECT ON sales.* TO 'bob'@'localhost'
C. GRANT SELECT, INSERT ON sales.* TO 'bob'@'localhost'
D. No privileges granted
Solution
Step 1: Understand the GRANT command given
The user 'bob' is granted SELECT and INSERT privileges on all tables in the sales database.
Step 2: Interpret SHOW GRANTS output
SHOW GRANTS displays the exact privileges granted, so it will list SELECT and INSERT on sales.* for bob.
Final Answer:
GRANT SELECT, INSERT ON sales.* TO 'bob'@'localhost' -> Option C
Quick Check:
SHOW GRANTS matches granted privileges [OK]
Hint: SHOW GRANTS shows exact privileges granted [OK]
Common Mistakes:
Assuming ALL PRIVILEGES are granted
Ignoring INSERT privilege
Thinking SHOW GRANTS returns no rows
4. Identify the error in the following command:
GRANT UPDATE, DELETE ON * TO 'carol'@'localhost';
medium
A. Host '%' must be used instead of 'localhost'
B. User name must be in double quotes
C. Privileges UPDATE and DELETE cannot be granted together
D. Missing database or table name after ON
Solution
Step 1: Check the ON clause syntax
The ON clause requires a database or table name, e.g., database.* or database.table.
Step 2: Identify the missing part
The command uses * alone, which is invalid syntax in MySQL for ON.
Final Answer:
Missing database or table name after ON -> Option D
Quick Check:
ON must specify database or table [OK]
Hint: ON must specify database or table, not just * [OK]
Common Mistakes:
Using * alone without database name
Using wrong quotes for user
Assuming localhost is invalid host
5. You want to allow user 'dave' to create new tables only in the inventory database but not modify data. Which GRANT command is correct?
hard
A. GRANT ALL PRIVILEGES ON inventory.* TO 'dave'@'localhost';
B. GRANT CREATE ON inventory.* TO 'dave'@'localhost';
C. GRANT CREATE, INSERT ON inventory.* TO 'dave'@'localhost';
D. GRANT CREATE ON *.* TO 'dave'@'localhost';
Solution
Step 1: Identify the needed privilege
To create tables, the CREATE privilege is required; INSERT or ALL PRIVILEGES would allow data changes.
Step 2: Scope the privilege to the inventory database
Granting on inventory.* limits the permission to that database only.
Step 3: Check user and host format
User 'dave'@'localhost' is correctly specified.
Final Answer:
GRANT CREATE ON inventory.* TO 'dave'@'localhost'; -> Option B
Quick Check:
CREATE only on inventory = GRANT CREATE ON inventory.* TO 'dave'@'localhost'; [OK]
Hint: Grant only CREATE on specific database for table creation [OK]
Common Mistakes:
Granting ALL PRIVILEGES instead of just CREATE
Including INSERT which allows data changes
Granting on *.* instead of specific database
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.