日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL DEFINER具體使用詳解

瀏覽:123日期:2023-10-17 18:47:38
目錄前言:1.DEFINER簡單介紹2.一些注意事項總結(jié):前言:

在 MySQL 數(shù)據(jù)庫中,在創(chuàng)建視圖及函數(shù)的時候,你有注意過 definer 選項嗎?在遷移視圖或函數(shù)后是否有過報錯情況,這些其實都可能和 definer 有關(guān)系。本篇文章主要介紹下 MySQL 中 definer 的含義及作用。

1.DEFINER簡單介紹

以視圖為例,我們來看下官方給出的視圖創(chuàng)建基礎(chǔ)語法:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = user] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

仔細(xì)看上面語法,發(fā)現(xiàn) definer 出現(xiàn)了兩次,一次是 DEFINER = user 一次是 SQL SECURITY 選項可以設(shè)置為 DEFINER 或 INVOKER ,看到這里,你有猜到 definer 的作用了嗎?

definer 翻譯成中文是“定義者”的意思。MySQL中,創(chuàng)建視圖(view)、函數(shù)(function)、存儲過程(procedure)、觸發(fā)器(trigger)、事件(event)時,都可以指定 DEFINER = user 選項,即指定此對象的定義者是誰,若不顯式指定,則創(chuàng)建此對象的用戶就是定義者。

對于視圖、函數(shù)及存儲過程,還可以指定 SQL SECURITY 屬性,其值可以為 DEFINER(定義者) 或 INVOKER(調(diào)用者),表示在執(zhí)行過程中,使用誰的權(quán)限來執(zhí)行。DEFINER 表示按定義者擁有的權(quán)限來執(zhí)行,INVOKER 表示用調(diào)用者的權(quán)限來執(zhí)行。

默認(rèn)情況下,SQL SECURITY 屬性為 DEFINER 。其值為 DEFINER 時,數(shù)據(jù)庫中必須存在 DEFINER 指定的定義者用戶,并且該定義者用戶擁有對應(yīng)的操作權(quán)限及引用的相關(guān)對象的權(quán)限,執(zhí)行者只需擁有調(diào)用權(quán)限就能成功執(zhí)行。當(dāng) SQL SECURITY 屬性為 INVOKER 時,則需要執(zhí)行者有調(diào)用權(quán)限并且有引用的相關(guān)對象的權(quán)限,才能成功執(zhí)行。

簡單來說,假設(shè)一個視圖查詢了 a b c 三張表,若此視圖的 SQL SECURITY 屬性為 DEFINER ,當(dāng)使用用戶 u 查詢此視圖時,用戶 u 只需此視圖的查詢權(quán)限即可;若此視圖的 SQL SECURITY 屬性為 INVOKER ,則用戶 u 需要有此視圖的查詢權(quán)限且有 a b c 三張表的查詢權(quán)限。下面通過示例來具體演示下:

# 創(chuàng)建兩個視圖 定義者都是testuser 查詢的是test_tb表mysql> show grants for ’testuser’@’%’;+------------------------------------------------------------------------------------------------------+| Grants for testuser@% |+------------------------------------------------------------------------------------------------------+| GRANT USAGE ON *.* TO ’testuser’@’%’ || GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, CREATE VIEW, SHOW VIEW ON `testdb`.* TO ’testuser’@’%’ |+------------------------------------------------------------------------------------------------------+2 rows in set (0.00 sec)mysql> show create view view_definerG*************************** 1. row ***************************View: view_definer Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`testuser`@`%` SQL SECURITY DEFINER VIEW `view_definer` AS select `test_tb`.`stu_id` AS `stu_id`,`test_tb`.`stu_name` AS `stu_name` from `test_tb`character_set_client: utf8mb4collation_connection: utf8mb4_general_ci1 row in set (0.00 sec)mysql> show create view view_invokerG*************************** 1. row ***************************View: view_invoker Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`testuser`@`%` SQL SECURITY INVOKER VIEW `view_invoker` AS select `test_tb`.`stu_id` AS `stu_id`,`test_tb`.`stu_name` AS `stu_name` from `test_tb`character_set_client: utf8mb4collation_connection: utf8mb4_general_ci1 row in set (0.00 sec)# 只給uview用戶查詢這兩個視圖的權(quán)限 來進(jìn)行查詢測試mysql> select user();+-----------------+| user() |+-----------------+| uview@localhost |+-----------------+1 row in set (0.00 sec)mysql> show grants;+--------------------------------------------------------+| Grants for uview@% |+--------------------------------------------------------+| GRANT USAGE ON *.* TO ’uview’@’%’ || GRANT SELECT ON `testdb`.`view_definer` TO ’uview’@’%’ || GRANT SELECT ON `testdb`.`view_invoker` TO ’uview’@’%’ |+--------------------------------------------------------+3 rows in set (0.00 sec)mysql> select * from view_definer;+--------+----------+| stu_id | stu_name |+--------+----------+| 1001 | from1 || 1002 | dfsfd || 1003 | fdgfg |+--------+----------+9 rows in set (0.00 sec)mysql> select * from view_invoker;ERROR 1356 (HY000): View ’testdb.view_invoker’ references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them# 結(jié)果是view_definer查詢正常,而view_invoker無法查詢 因為uview用戶不具有test_tb表的查詢權(quán)限

自定義函數(shù)及存儲過程也是類似,若 SQL SECURITY 屬性為 INVOKER ,同樣需要調(diào)用者有執(zhí)行權(quán)限并且有引用的相關(guān)對象的權(quán)限,才能成功執(zhí)行。

2.一些注意事項

額外補(bǔ)充點知識,只有擁有創(chuàng)建權(quán)限且有 SUPER 權(quán)限的用戶才可以建 DEFINER = 其他用戶的對象。例如:root 賬號可以創(chuàng)建 DEFINER = testuser 的視圖,而 testuser 在有創(chuàng)建視圖的前提下只能創(chuàng)建 DEFINER 為自己的視圖。

為了更細(xì)致的了解 DEFINER 相關(guān)作用,以視圖為例再來說幾個特殊情況下的示例:

假設(shè)用戶 u1 不存在,使用 root 賬號可以創(chuàng)建 DEFINER = u1 的視圖,若該視圖的 SQL SECURITY 屬性為 DEFINER ,則查詢時會報用戶不存在的錯誤,若該視圖的 SQL SECURITY 屬性為 INVOKER ,則使用 root 賬號可正常查詢該視圖。

假設(shè)用戶 u2 存在但不具有查詢表 a 的權(quán)限,使用 root 賬號可以創(chuàng)建 DEFINER = u2 的視圖來查詢表 a ,若該視圖的 SQL SECURITY 屬性為 DEFINER ,則查詢時報缺少權(quán)限的錯誤,若該視圖的 SQL SECURITY 屬性為 INVOKER ,則使用 root 賬號可正常查詢該視圖。當(dāng)使用用戶 u2 登錄時,則創(chuàng)建視圖來查詢表 a 會直接報錯缺少權(quán)限,即創(chuàng)建不了查詢表 a 的視圖,無論此視圖的 SQL SECURITY 屬性是什么。

看完上述示例后,不清楚你對 DEFINER 是否有了更清晰的認(rèn)識,有興趣的同學(xué)可以自己測試看一看。結(jié)合筆者日常經(jīng)驗,說下 DEFINER 相關(guān)注意事項吧:

SQL SECURITY 屬性建議使用默認(rèn)的 DEFINER 。 某個庫內(nèi)的視圖、函數(shù)、存儲過程建議使用統(tǒng)一的 DEFINER 用戶。 不要輕易修改及刪除數(shù)據(jù)庫用戶,因為此用戶可能是相關(guān)對象的定義者。 若要修改 SQL SECURITY 屬性,請做好測試,清楚修改前后的區(qū)別。 數(shù)據(jù)庫遷移時,要注意新環(huán)境存在相關(guān)對象的定義者用戶。 做數(shù)據(jù)庫遷移時,建議首先在新環(huán)境創(chuàng)建相關(guān)用戶及賦予權(quán)限。總結(jié):

本篇文章主要介紹了 DEFINER 相關(guān)知識,這些主要在創(chuàng)建視圖、函數(shù)、存儲過程等對象時會遇到,平時比較容易被忽略。但這些細(xì)節(jié)還是應(yīng)該注意的,多了解多學(xué)習(xí)下,這樣到真正用到的時候可以避免很多錯誤。

到此這篇關(guān)于MySQL DEFINER具體使用詳解的文章就介紹到這了,更多相關(guān)MySQL DEFINER內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
特黄毛片在线观看| 久久久久久久久丰满| 欧美不卡视频| 久久精品导航| 欧美日韩免费看片| 久久精品国产在热久久| 国产欧美88| 国产精品久久久久久久久久妞妞 | 91精品1区| 欧美精品激情| 性欧美长视频| 亚洲欧洲免费| 国产欧美自拍| 麻豆精品视频在线| 欧美好骚综合网| 久久裸体视频| 亚洲少妇诱惑| 免费成人在线观看| 日本综合视频| 卡一卡二国产精品| 97精品国产| 欧美69视频| 亚洲一二av| 国产精品videossex| 欧美国产美女| 亚洲综合三区| 国产精品一区2区3区| 国产suv精品一区| 99国产精品免费视频观看| 米奇777超碰欧美日韩亚洲| 久久国产精品久久久久久电车| 欧美成人基地| 久久午夜精品一区二区| 日韩精品亚洲专区| 国内精品亚洲| 亚洲欧美伊人| 日韩毛片一区| 激情综合五月| 国产美女一区| 国产精品一区免费在线| 天堂а√在线最新版中文在线| 日韩一区二区久久| 欧美一区激情| 久久久久蜜桃| 日韩国产在线一| 国产网站在线| 在线精品亚洲| 久久不卡国产精品一区二区| 国产v综合v| 五月激激激综合网色播| 福利欧美精品在线| 欧美专区一区二区三区| 国产黄色精品| 亚洲免费播放| 麻豆一区二区三区| 99国产精品自拍| 美腿丝袜亚洲一区| 亚洲综合国产| www在线观看黄色| 亚洲欧洲美洲国产香蕉| 成人国产精品久久| 免费观看久久久4p| 成人在线免费观看91| 久久国产福利| 美女福利一区二区三区| 日韩在线成人| 久久久人人人| 国产精品777777在线播放| 中文久久精品| 中文字幕色婷婷在线视频| 日韩精品一区二区三区免费视频| 欧美日韩尤物久久| 国产精品亚洲产品| 久久夜色精品| 久久精品亚洲人成影院| 欧美国产极品| 亚洲三级在线| 99久久视频| 国产精品一区免费在线| 中文精品在线| 欧美羞羞视频| 欧美日韩中文| 亚洲尤物在线| 日韩在线二区| 欧美交a欧美精品喷水| 中文字幕一区二区三区四区久久| 日韩国产激情| 欧美国产三级| 亚欧成人精品| 在线视频免费在线观看一区二区| 老牛影视精品| 国产精品色在线网站| 亚洲精品系列| 国产综合色产| 激情黄产视频在线免费观看| 国产精品手机在线播放| 日韩中出av| 国产农村妇女精品一二区| 久久久人人人| 日韩电影免费网址| 精品国内亚洲2022精品成人| 亚州精品视频| 一区二区三区四区精品视频| 香蕉久久精品| 日韩欧美看国产| 国产精品不卡| 捆绑调教美女网站视频一区| 国产免费av一区二区三区| 免费视频一区二区| 国产毛片精品| 日本va欧美va精品发布| 在线精品一区| 首页亚洲欧美制服丝腿| 99国产一区| 国产色综合网| 日韩视频中文| 亚洲少妇在线| 香蕉成人久久| 免费日韩av片| 蜜桃久久久久久| 亚洲综合不卡| 亚洲伊人影院| 日韩中文字幕无砖| 蜜臀a∨国产成人精品| 蜜桃久久av| 日韩中文字幕| 欧美亚洲一区二区三区| 日韩av一二三| 欧美日韩一区自拍| 久久国内精品自在自线400部| 久久精品99国产国产精| 日本国产欧美| 国产亚洲欧美日韩在线观看一区二区| 欧美在线91| 你懂的国产精品永久在线| 国产极品一区| 在线精品亚洲欧美日韩国产| 国产精品毛片久久| 日韩a一区二区| 日韩精品久久久久久久电影99爱| 精品国模一区二区三区| 九九综合九九| 日韩精品一二三四| 成人福利av| 欧美日韩精品一区二区视频| 九色精品91| 免费人成黄页网站在线一区二区| 免费日韩一区二区| 91精品国产自产精品男人的天堂 | 丝袜美腿亚洲色图| 亚洲精品乱码| 国产精品久久久久77777丨| 国产精品网站在线看| 成人午夜网址| 欧洲激情综合| 午夜亚洲福利| 国产成人精品三级高清久久91| 国产一区日韩一区| 天堂成人免费av电影一区| 日韩欧美四区| 欧美aaaaaa午夜精品| 欧美片第1页| 亚洲欧美成人综合| 欧美日韩调教| 麻豆成人91精品二区三区| 国产亚洲一区二区手机在线观看| 国产精品7m凸凹视频分类| 黄色日韩精品| 国产日韩欧美在线播放不卡| 综合日韩av| 日韩中文欧美在线| 麻豆国产91在线播放| 国产一区清纯| 欧美亚洲三区| 久久在线免费| 日本va欧美va欧美va精品| 97精品一区二区| 国产精品婷婷| 国产中文欧美日韩在线| 伊人久久亚洲影院| 久久精品av麻豆的观看方式| 日韩欧美综合| 亚洲一区二区av| 成人在线视频中文字幕| 麻豆成人在线| 成人精品动漫一区二区三区| 日韩专区一卡二卡| 成人三级高清视频在线看| 美日韩精品视频| 荡女精品导航| 亚洲无线观看| 999久久久精品国产| 国产精品亚洲欧美日韩一区在线 | 日韩av专区| 亚洲欧美在线专区| 成人国产精品久久| 天堂成人免费av电影一区 | 欧美91在线| 99国产精品视频免费观看一公开 | 国产调教一区二区三区|