您现在的位置是:亿华云 > 域名
创建视图与函数,你注意过 Definer是啥意思吗
亿华云2025-10-03 02:09:46【域名】6人已围观
简介本文转载自微信公众号「MySQL技术」,作者MySQL技术。转载本文请联系MySQL技术公众号。前言:在 MySQL 数据库中,在创建视图及函数的时候,你有注意过 definer 选项吗?在迁移视图或
本文转载自微信公众号「MySQL技术」,创建作者MySQL技术。视图啥意思转载本文请联系MySQL技术公众号。函数
前言:
在 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_definer\G很赞哦!(596)
上一篇: 数据中心基础设施的透明度及创新
下一篇: 秒懂1U、2U、4U和42U服务器