হোস্ট ভেরিফাই করে DEFINER সেট করুন
স্টোরড প্রসিডিউর তৈরির সময় DEFINER-এর হোস্ট ('localhost' বা '%') এক্টিভ ইউজার অ্যাকাউন্টের সাথে মিল খায় কিনা যাচাই করুন।
ইউজার অ্যাকাউন্ট যাচাই করুন
mysql> SELECT user, host FROM mysql.user;
ফলাফল (আংশিক):
+------------------+-----------+ | user | host | +------------------+-----------+ | Bob | % | | root | % | | David | localhost | | ... | ... | +------------------+-----------+
সঠিক DEFINER দিয়ে প্রসিডিউর তৈরি করুন
এখানে 'Bob' ইউজারের হোস্ট '%', তাই DEFINER = `Bob`@`%` ব্যবহার করুন।
mysql> DELIMITER //
mysql> CREATE DEFINER=`Bob`@`%` PROCEDURE `Message`()
BEGIN
SELECT "Hello World";
END //
Query OK, 0 rows affected (0.14 sec)
mysql> DELIMITER ;
প্রসিডিউর কল করুন
mysql> CALL `Message`();
ফলাফল:
+-------------+ | Hello World | +-------------+ | Hello World | +-------------+
মূল সমস্যা: DEFINER-এ নির্দিষ্ট ইউজার/হোস্ট কম্বিনেশন mysql.user টেবিলে থাকতে হয়। लोकালহোস্ট থেকে কানেক্ট করলে 'user'@'localhost' এবং রিমোট থেকে 'user'@'%' প্রয়োজন। সমাধান: CREATE DEFINER=CURRENT_USER PROCEDURE ... ব্যবহার করুন অথবা প্রয়োজনীয় হোস্টে ইউজার তৈরি করুন।