บทนำ
สิทธิ์ EXECUTE ใน MySQL ใช้ควบคุมการเรียกใช้ Stored Procedures และ Functions สามารถ Grant ให้ User ได้ระดับ Database (ทั้งหมดใน DB) หรือระดับ Procedure เฉพาะตัว
ดูรายชื่อ User ในระบบ
mysql> SELECT User, Host FROM MySQL.User;
ผลลัพธ์ตัวอย่าง
+------------------+-----------+
| User | Host |
+------------------+-----------+
| Bob | % |
| Charlie | % |
| Robert | % |
| User2 | % |
| mysql.infoschema | % |
| mysql.session | % |
| mysql.sys | % |
| root | % |
| @UserName@ | localhost |
| Adam Smith | localhost |
| Chris | localhost |
| David | localhost |
| James | localhost |
| John | localhost |
| John Doe | localhost |
| User1 | localhost |
| am | localhost |
| hbstudent | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
+------------------+-----------+
20 rows in set (0.00 sec)
ให้สิทธิ์ EXECUTE ทุก Procedure ในฐานข้อมูล 'web' ให้ User 'Robert'@'%'
mysql> GRANT EXECUTE ON web.* TO 'Robert'@'%';
Query OK, 0 rows affected (0.24 sec)
คำอธิบาย
EXECUTE- สิทธิ์เรียกใช้ Stored Procedure/FunctionON web.*- ใช้กับทุก Routine (Procedure/Function) ในฐานข้อมูลwebTO 'Robert'@'%'- ให้กับ User Robert จาก Host ใดๆ (%= Wildcard)
รูปแบบ GRANT EXECUTE อื่นๆ
-- ให้สิทธิ์ Procedure เฉพาะตัว
GRANT EXECUTE ON PROCEDURE web.MyProcedure TO 'Robert'@'%';
-- ให้สิทธิ์ Function เฉพาะตัว
GRANT EXECUTE ON FUNCTION web.MyFunction TO 'Robert'@'%';
-- ให้สิทธิ์หลาย User พร้อมกัน
GRANT EXECUTE ON web.* TO 'User1'@'%', 'User2'@'localhost';
-- ดูสิทธิ์ที่ได้รับ
SHOW GRANTS FOR 'Robert'@'%';
สิทธิ์อื่นที่เกี่ยวข้องกับ Routine
| Privilege | คำอธิบาย |
|---|---|
| EXECUTE | เรียกใช้ Procedure/Function (CALL) |
| ALTER ROUTINE | แก้ไข/ลบ Procedure/Function |
| CREATE ROUTINE | สร้าง Procedure/Function ใหม่ |
| GRANT OPTION | มอบสิทธิ์ให้ User อื่นได้ |
ข้อควรระวัง
- GRANT EXECUTE ON *.* ให้สิทธิ์ทุก Database (อันตราย - ควรระบุ Database ชัดเจน)
- User ต้องมีสิทธิ์ USAGE (มีโดยอัตโนมัติเมื่อ CREATE USER)
- สิทธิ์ EXECUTE ไม่รวมสิทธิ์เข้าถึงตารางภายใน Procedure (ต้องมีสิทธิ์บน Table แยกต่างหาก)