电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

MySQL DEFINER具體使用詳解

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

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

1.DEFINER簡單介紹

以視圖為例,我們來看下官方給出的視圖創建基礎語法:

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]

仔細看上面語法,發現 definer 出現了兩次,一次是 DEFINER = user 一次是 SQL SECURITY 選項可以設置為 DEFINER 或 INVOKER ,看到這里,你有猜到 definer 的作用了嗎?

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

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

默認情況下,SQL SECURITY 屬性為 DEFINER 。其值為 DEFINER 時,數據庫中必須存在 DEFINER 指定的定義者用戶,并且該定義者用戶擁有對應的操作權限及引用的相關對象的權限,執行者只需擁有調用權限就能成功執行。當 SQL SECURITY 屬性為 INVOKER 時,則需要執行者有調用權限并且有引用的相關對象的權限,才能成功執行。

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

# 創建兩個視圖 定義者都是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用戶查詢這兩個視圖的權限 來進行查詢測試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# 結果是view_definer查詢正常,而view_invoker無法查詢 因為uview用戶不具有test_tb表的查詢權限

自定義函數及存儲過程也是類似,若 SQL SECURITY 屬性為 INVOKER ,同樣需要調用者有執行權限并且有引用的相關對象的權限,才能成功執行。

2.一些注意事項

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

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

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

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

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

SQL SECURITY 屬性建議使用默認的 DEFINER 。 某個庫內的視圖、函數、存儲過程建議使用統一的 DEFINER 用戶。 不要輕易修改及刪除數據庫用戶,因為此用戶可能是相關對象的定義者。 若要修改 SQL SECURITY 屬性,請做好測試,清楚修改前后的區別。 數據庫遷移時,要注意新環境存在相關對象的定義者用戶。 做數據庫遷移時,建議首先在新環境創建相關用戶及賦予權限。總結:

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

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

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | 礼堂椅厂家|佛山市艺典家具有限公司| 电子天平-华志电子天平厂家| 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 英国公司注册-新加坡公司注册-香港公司开户-离岸公司账户-杭州商标注册-杭州优创企业 | 超声骨密度仪-动脉硬化检测仪器-人体成分分析仪厂家/品牌/价格_南京科力悦 | 万烁建筑设计院-建筑设计公司加盟,设计院加盟分公司,市政设计加盟 | 润滑油加盟_润滑油厂家_润滑油品牌-深圳市沃丹润滑科技有限公司 琉璃瓦-琉璃瓦厂家-安徽盛阳新型建材科技有限公司 | LINK FASHION 童装·青少年装展 河南卓美创业科技有限公司-河南卓美防雷公司-防雷接地-防雷工程-重庆避雷针-避雷器-防雷检测-避雷带-避雷针-避雷塔、机房防雷、古建筑防雷等-山西防雷公司 | 通辽信息港 - 免费发布房产、招聘、求职、二手、商铺等信息 www.tlxxg.net | 无味渗透剂,泡沫抑尘剂,烷基糖苷-威海威能化工有限公司 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 芝麻黑-芝麻黑石材厂家-永峰石业 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 磁力轮,磁力联轴器,磁齿轮,钕铁硼磁铁-北京磁运达厂家 | 质构仪_鱼糜弹性仪-上海腾拔仪器科技有限公司 | 深圳宣传片制作_产品视频制作_深圳3D动画制作公司_深圳短视频拍摄-深圳市西典映画传媒有限公司 | 找果网 | 苹果手机找回方法,苹果iPhone手机丢了找回,认准找果网! | 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 | 合肥弱电工程_安徽安防工程_智能化工程公司-合肥雷润 | 【ph计】|在线ph计|工业ph计|ph计厂家|ph计价格|酸度计生产厂家_武汉吉尔德科技有限公司 | 合肥展厅设计-安徽展台设计-合肥展览公司-安徽奥美展览工程有限公司 | 微型气象仪_气象传感器_防爆气象传感器-天合传感器大全 | 桁架楼承板-钢筋桁架楼承板-江苏众力达钢筋楼承板厂 | 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | sfp光模块,高速万兆光模块工厂-性价比更高的光纤模块制造商-武汉恒泰通 | 石家庄小程序开发_小程序开发公司_APP开发_网站制作-石家庄乘航网络科技有限公司 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 共享雨伞_共享童车_共享轮椅_共享陪护床-共享产品的领先者_有伞科技 | 蜘蛛车-高空作业平台-升降机-高空作业车租赁-臂式伸缩臂叉装车-登高车出租厂家 - 普雷斯特机械设备(北京)有限公司 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | 锂电池生产厂家-电动自行车航模无人机锂电池定制-世豹新能源 | 旋振筛|圆形摇摆筛|直线振动筛|滚筒筛|压榨机|河南天众机械设备有限公司 | 皮带机_移动皮带机_大倾角皮带机_皮带机厂家 - 新乡市国盛机械设备有限公司 | 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 包装盒厂家_纸盒印刷_礼品盒定制-济南恒印包装有限公司 | 幂简集成 - 品种超全的API接口平台, 一站搜索、试用、集成国内外API接口 | 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 |