項目實戰--解決運行sql文件錯誤


說明:

  新項目啟動,通過公司運維同學給的數據庫腳本在Navicat中建項目的數據庫,運行腳本時報錯

  Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation

解決:

  發現創建的SQL有指定DEFINER,因為自己運行腳本的時候沒有修改DEFINER所以報錯,把DEFINER修改后即可。

-- ----------------------------
-- Procedure structure for test_find_member_info_proc
-- ----------------------------
DROP PROCEDURE IF EXISTS `test_find_member_info_proc`;
delimiter ;;
CREATE DEFINER=`xxx`@`%` PROCEDURE `test_find_member_info_proc`()
begin 
        
        DECLARE mid bigint;
        DECLARE tid bigint;
        DECLARE iid bigint;
                    .............
end
;;
delimiter ;

存儲過程中的DEFINER說明:  

  (1) DEFINER的意思是“定義者”,也就是指明此存儲過程有哪個用戶定義的,它跟存儲過程的使用權限無關;可以說,存儲和過程是沒有使用限制的,任何人都可以使用存儲過程,那么為什么還要加上DEFINER指定存儲過程的定義者呢,因為,存儲過程雖然不限制任何人使用,但是它本身的行為必須受到權限限制,也就是存儲過程本身內部具備哪些對數據庫的訪問權限,而這訪問權限便是DEFINER用戶對數據庫的訪問權限。

  (2) DEFINER被定義為一個普通的username@hostname用戶就不必說了,如果定義為root@%,有什么特別的嗎?沒有。只不過數據庫中要存在root@%用戶,否則創建的時候沒事,調用的時候就提示root@% is not registered,也就是用戶不存在。

  (3) DEFINER也可以省略掉,這樣存儲過程默認的定義者是root@localhost,而一般數據庫在安裝的時候都會有一個root@localhost用戶,所以,該存儲過程也能正常在不同的機器上被使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM