您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關mysql中怎么修改所有的definer,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
mysql中的definer是什么,有什么作用?
先授權一個: grant all on testdb.* to 'user1'@'%' identified by '000000' with grant option; 然后我們創建一個存儲過程如下:
USE `testdb`;
DROP procedure IF EXISTS `user_count`; DELIMITER $$
USE `testdb`$$
CREATE DEFINER=`root`@`%` PROCEDURE `user_count`() LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY INVOKER COMMENT '' BEGIN select count(*) from mysql.user; END$$ DELIMITER ;
用root帳號登陸:
mysql> use testdb;
Database changed mysql> call user_count();
+----------+ | count(*) | +----------+ | 3 | +----------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.00 sec) 可以正常查詢出來。 我們再用user1進行登陸: mysql> use testdb;
Database changed mysql> call user_count(); ERROR 1142 (42000): SELECT command denied to user 'user1'@'localhost' for table 'user'
發現系統報錯查詢不到了,這是因為我們在上述定義的SQL SECURITY值為INVOKER,存儲過程執行過程中會以user1具有的權限來執行,其中調用到了mysql的庫,而我們的user1帳戶只有testdb庫的使用權限,所以會返回失敗。
如果方便修改mysql中所有已經定義到的definer?
現在在mysql涉及的definer有view、trigger、function、procedure、event。我們一個個作介紹。
1.修改function、procedure的definer
update mysql.proc set definer='user@localhost'; -- 如果有限定庫或其它可以加上where條件
4.修改trigger的definer
Flush tables with readlock
<p align="left" font-size:14px;white-space:normal;background-color:#ffffff;"=""> Unlock tables
以上就是mysql中怎么修改所有的definer,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。