【mysql笔记】mysql存储过程的definer和invoker

SAP S4 HANA 新资产会计中的平行分类账估值 在资产会计中,我们可以设置使用折旧区域的平行分类账会计 我们需要根据涉及的会计原则定义折旧区域,在我们的方案中,公司 FR01 是一家国际集团的当地分支机构,公司 FR01 需要按照集团会计准则 IFRS 和当地 GAAP 会计准则报告财务报表。过账到 LG 会计原则(分类帐 2L)-->分类账 2L的 150 欧元损失 -->在 IFRS 折旧区域,我们有 100 欧元的收益,在 LG 折旧区域,我们有 150 欧元的损失,使用平行分类账 0L 和 2L,我们能够根据不同的会计原则进行平行估值。 阅读详情

【存储过程的权限】

ALTER ROUTINE 编辑或删除存储过程

CREATE ROUTINE 创建存储过程

EXECUTE运行存储过程


【存储过程的创建语法】

delimiter //    -- 声明分隔符(命令结束符)

create

  definer = user@hostname | current_user

  procedure 存储过程名 (参数)

  comment '注释'

  sql security definer | invoker   -- sql 的安全设置

begin

   存储过程的body

end

//

delimiter ;    -- 声明分隔符(命令结束符)


【函数的创建语句】

delimiter //    -- 声明分隔符(命令结束符)

create

  definer = user@hostname | current_user

  function 函数名(参数)

  return 返回值类型

  comment '注释'

  sql security definer | invoker   -- sql 的安全设置

begin

   函数的body

end

//

delimiter ;    -- 声明分隔符(命令结束符)


【definer和invoker的解释】

     创建存储过程的时候可以指定 SQL SECURITY属性,设置为 DEFINER 或者INVOKER,用来告诉mysql在执行存储过程的时候,是以DEFINER用户的权限来执行,还是以调用者的权限来执行。

    默认情况下,使用DEFINER方式,此时调用存储过程的用户必须有存储过程的EXECUTE权限,并且DEFINER指定的用户必须是在mysql.user表中存在的用户。

    DEFINER模式下,默认DEFINER=CURRENT_USER,在存储过程执行时,mysql会检查DEFINER定义的用户'user_name'@'host_name'的权限;

    INVOKER模式下,在存储过程执行时,会检查存储过程调用者的权限。


   案例一:DEFINER

    CREATE DEFINER = 'admin'@'localhost' PROCEDURE account_count()

    BEGIN
        SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
    END;

    在这个案例中,不论哪个用户A调用存储过程,存储过程都会以'admin'@'localhost'的权限去执行,即使这个用户A没有查询mysql.user表的权限。


  案例二:INVOKER

    CREATE DEFINER = 'admin'@'localhost' PROCEDURE account_count()
        SQL SECURITY INVOKER
    BEGIN
        SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
    END;

    在这个案例中,虽然存储过程语句中仍然带有DEFINER参数,但是由于SQL SECURITY指定了INVOKER,所以在存储过程执行的时候,会以调用者的额身份去执行。此时这个存储过程是否能成功执行,取决于调用者是否有mysql.user表的查询权限。


【案例】

案例一:调用存储过程

  存储过程的调用者是 : admin@192.168.1.1

  存储过程的DEFINER是   : admin@%

  MySQL中存在的用户是 : admin@192.168.%.%


    此时admin@192.168.1.1是可以访问数据库的,因为它符合admin@192.168.%.%的授权规则,但是当它调用DEFINER='admin@%'的存储过程的时候,mysql会检查mysql.user用户表中是否存在admin@%这个用户,mysql的检查结果是admin@%这个用户不存在,此时就会返回报错,提示“Ther user specified as a definer ('admin@%') does not exist.。

 

 案例二:创建存储过程

  使用用户admin@192.168.1.1连接mysql,该用户有test库的all privileges,执行创建存储过程的操作:

          存储过程中定义的DEFINER是   : admin@%

          MySQL中存在的用户是 : admin@192.168.%.%

  此时,会遇到报错,提示”ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation“

  修复DEFINER='admin@192.168.%.%',或者去掉 DEFINER参数,都可以恢复正常。


说明:

    案例一中是存在问题的,存储过程的调用者和拥有者都是admin@192.168.1.1,但是DEFINER却是admin@%,这是由于创建存储过程的命令是由root用户执行的,所以没有遇到案例二中的报错。


【存储过程常用命令】

查看存储过程的创建语句:

show create procedure 存储过程名;

查看存储过程的信息:

show procedure status like '存储过程名'\G

查看存储过程的Definer信息:

select db,name,type,sql_security,definer from mysql.proc where  type='PROCEDURE' and db='数据库名' ;

修改存储过程的DEFINER:

 update  mysql.proc  set `definer` ='admin@192.168.%.%' where db like 'db_%';



【LAMMPS学习】八、基础知识(4.5)TIP5P水模型 ​ 五点 TIP5P 刚性水模型通过添加两个通常无质量的附加位点 L 来扩展three-point TIP3P model,其中放置与氧原子相关的电荷。这些位点 L 位于距氧原子固定距离处,形成从 HOH 平面旋转 90 度的四面角。因此,这些位点在某种程度上近似于氧的孤对,从而改善了水结构,与four-point TIP4P model相比变得更加“四面体”。 阅读详情

相关推荐

Benchmark系列——UnixBench测试项深度解析与性能优化指南

本文深度解析UnixBench基准测试套件的各项测试原理,包括Dhrystone、Whetstone、系统调用、进程管理、IPC及文件I/O等核心测试项。通过详细的测试项分析,指导用户解读测试报告,并提供针对性的内核参数调整、编译优化及系统配置实战指南,帮助用户精准定位并优化系统性能瓶颈。

weixin_29230901的博客 275

Mysql—用存储过程和事件每月定时创建一张数据库表

业务需求,把用户操作日志写入一张日志表sys_oper_log。 上线2个月来,有74万条记录了。 文章转载地址:https://www.cnblogs.com/bao-bei/p/13201747.html 现考虑要分库分表了。每个月初先备份以sys_oper_log为前缀,日期年月为后缀的数据库表,比如:sys_oper_log_202007,然后再创建一张以sys_oper_log数据库表。 实现思路: Mysql如何每月自动建表? 一、新建事件每月调用存储过程 二、存储过程里面建表 1...

743

TCS34725颜色识别模块实战调校:从“一坨”例程到精准RGB

本文针对TCS34725颜色识别模块初始数据不准的问题,提供了从基础例程到精准调校的实战指南。核心在于通过白光校正与黑白光校正两种方法,补偿传感器偏差与环境光影响,将原始数据准确映射为标准RGB值。文章详细阐述了校准原理、操作步骤与代码实现,并分享了进阶调试技巧与避坑指南,帮助开发者显著提升颜色识别的准确性与项目可靠性。

weixin_29188043的博客 287

MySQL学习笔记六

1.存储过程 存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。 创建存储过程: create [definer = {user | current_user}] procedure sp_name ([proc_parameter[,…]]) [characteristic…] routine_body proc_parameter [i

zhuhengv的博客 737

【JS】自定义上传组件,文件上传与回显,自定义进度条显示(基于element-plus与axios)

公司是做B 端产品的,有sass平台也有源码交付的项目,最近开发了很多小系统,这里记录一下开发遇到的问题。 需要定制一个上传组件,要求可以自定义文件存储路径,自定义可上传的文件类型,限制文件大小等,并且提供基础的文件回显功能,例如上传一张图片到服务器指定目录的`/file`文件夹下面,并且实现可以查看预览的功能。

余浩的博客 1161

用电脑通过网口控制keysight示波器

Keysight HD304MSO示波器提供1GHz带宽、14位高精度ADC及10.1英寸触控屏,支持50μV低噪声信号捕获和1.3M波形/秒刷新率。配备4通道探头、逻辑分析仪接口及100Mpts存储深度,含故障诊断、FFT等高级功能。通过网线连接电脑安装TightVNC软件(示波器IP为169.254.163.24)可实现远程控制,相比U盘传输更高效。(149字)

johnboat的专栏 1134

【MySQL】MySQL视图定义者和安全性definer/invoker

一、问题背景 做MySQL数据库用户权限规范的时候,将原来业务帐号'user'@'%'修改为'user'@'192.168.1.%'时,忽然发现业务系统部分业务报404错误,经排查,发现是因为报错的业务在调用数据库时,使用了视图,而视图的定义者是原来的'user'@'%',并且安全性设置的是definer,现在这个用户不存在了,虽然新用户'user'@'192.168.1.%’拥有和原来相同的数...

michaelwoshi的博客 3383

Python-uiautomator2保姆级安装指南:从环境配置到设备连接全流程

本文提供Python-uiautomator2的保姆级安装指南,涵盖从环境配置到设备连接的全流程。详细介绍了Python 3.6+、ADB工具等核心组件的准备,以及uiautomator2的安装和设备端服务初始化步骤,帮助开发者快速搭建Android自动化测试环境,避免常见问题。

nnn11的博客 937

为什么sqlserver创建存储过程成功,却找不到这个存储过程呢

1、为什么sqlserver创建存储过程成功,却找不到这个存储过程呢? 需要点击工具上,创建存储过程,在那个里面去写存储过程,然后再刷新存储过程就会出现了 注意:如果是在新建查询上面,直接写sql创建存储过程,会提示创建成功,但是刷新也找不到的 ...

weixin_45663522的博客 6267

Linux运维人,该醒醒了,2019年要变天了

外界都说运维只是处于被动低效率手工救火的状态,企业对其重视程度不高,提起运维很多人能联想到的字眼就有“苦逼”、“辛苦”、“加班”、“背锅”。在大数据、人工智能、容器技术的强力加持下,运维这个传统的技术工种已经从“机械劳动”这样的刻板印象中蜕变出来,成为了任何一家技术公司所必须依赖和大力投入的核心技术能力。 现在,运维人员的发展前景也开始让很多程序员眼羡,作为Linux运维人员的你:这一年,你的L...

qq_43083284的博客 1万+

【脑电信号】脑电信号EEG形态学滤波处理【含Matlab源码 4023期】

脑电信号EEG形态学滤波处理 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 823

MySQL储存过程详解

1 概述 存储过程就像是程序中的子程序,存储在数据库中。存储过程可以有名称、参数列表和 SQL 语句。使用 CALL 语句调用。 2 特点 运行速度快。利用缓存的优势等。 可移植的 好处: 简化应用开发人员的工作。 增强安全性。 减少数据在数据库和应用服务器之间的传输。 3 案例 实际运行创建一个存储存储过程 DELIMITER;; CREATE DEFINER=`root`@`localhost` PROCEDURE `selectitem`() BEGIN #Routine body goes

Hacah的博客 5822

微信小程序 - 最新详细实现用户保存下载视频到手机相册,将视频临时路径、在线播放地址(网络路径)URL存储到手机,弹出访问手机相册权限询问,支持视频格式mp4、avi、mov、wmv、flv、webm

微信小程序,视频,手机相册,保存,另存为,小程序保存到相册权限,writePhotosAlbum,一键保存视频到手机相册功能(视频来源为链接),第一次要获取用户授权,授权使用相册权限,小程序视频下载,如何把视频下载到相册,下载一个视频到本地相册,显示下载进度,可取消下载,视频下载到本地,微信小程序视频如何下载,保存视频到相机,页面播放视频并下载到本地,安卓系统,苹果ios保存到相册报错,权限拒绝后打不开,添加相册授权弹框拒绝后再也出不来了,实现保存视频到手机相册功能,将mp4在线视频下载并存储到用户的手机中

🏆 前端领域优质创作者 7620

definer mysql_mysql 存储过程中definer和invoker详解

【存储过程的权限】ALTER ROUTINE 编辑或删除存储过程CREATE ROUTINE 创建存储过程EXECUTE运行存储过程【存储过程的创建语法】delimiter // -- 声明分隔符(命令结束符)createdefiner = user@hostname | current_userprocedure 存储过程名 (参数)comment '注释'sql security def...

weixin_39757212的博客 1085

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MySQL视图定义者和安全性definer/invoker的区别

definer和invoker的区别 在创建视图或者是存储过程的时候,是需要定义安全验证方式的(也就是安全性SQL SECURITY),其值可以为definer或invoker,表示在执行过程中,使用谁的权限来执行。 definer:由definer(定义者)指定的用户的权限来执行 invoker:由调用这个视图(存储过程)的用户的权限来执行 definer 当定义为DEFINER时,必须数据库中...

clubman的博客 1718

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

MySQL DEFINER详解

下述是创建视图的基础语法。

悟以往之不谏,知来者之可追 2065

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

definer mysql_mysql存储过程的definer和invoker

【存储过程的权限】ALTER ROUTINE 编辑或删除存储过程CREATE ROUTINE 创建存储过程EXECUTE运行存储过程【存储过程的创建语法】delimiter // -- 声明分隔符(命令结束符)createdefiner = user@hostname | current_userprocedure 存储过程名 (参数)comment '注释'sql security def...

weixin_42298743的博客 372

mysql 视图 定义者_【MySQL】MySQL视图定义者和安全性definer/invoker

一、问题背景做MySQL数据库用户权限规范的时候,将原来业务帐号'user'@'%'修改为'user'@'192.168.1.%'时,忽然发现业务系统部分业务报404错误,经排查,发现是因为报错的业务在调用数据库时,使用了视图,而视图的定义者是原来的'user'@'%',并且安全性设置的是definer,现在这个用户不存在了,虽然新用户'user'@'192.168.1.%’拥有和原来相同的数据库...

weixin_39870664的博客 594

(原)mysql存储过程的权限 definer invoker

mysql中用户对存储过程的权限有: ALTER ROUTINE 编辑或删除存储过程 CREATE ROUTINE 创建存储过程 EXECUTE运行存储过程 存储过程的创建者拥有存储过程的ALTER、CREATE、EXECUTE权限。 详细实验后续补充。 DEFINER用于指明存储过程是由哪个用户定义的,默认存储过程的定义者是存储过程,跟存储过程的使用权限无关。

Trace_2011的专栏 1742

mysql 视图 定义者,MySQLMySQL视图定义者和安全性definer/invoker

MySQLMySQL视图定义者和安全性definer/invoker【MySQL】MySQL视图定义者和安全性definer/invoker做MySQL数据库用户权限规范的时候,将原来业务帐号'user'@'%'修改为'user'@'192.168.1.%'时,忽然发现业务系统部分业务报404错误,经排查,发现是因为报错的业务在调用数据库时,使用了视图,而视图的定义者是原来的'user'@'%',...

weixin_28951059的博客 795

mysql definer设置为root_mysql如何修改所有的definer

mysql中的definer是什么,有什么作用?我们在mysql创建view、trigger、function、procedure、event时都会定义一个Definer=‘xxx’,类似如下:CREATEALGORITHM=UNDEFINEDDEFINER= `root`@`%` SQL SECURITY DEFINERVIEW `v_ questions` ASSELECT`q`.`id...

weixin_28989055的博客 2403

mysql 视图 定义人_【MySQL】MySQL视图定义者和安全性definer/invoker

一、问题背景做MySQL数据库用户权限规范的时候,将原来业务帐号'user'@'%'修改为'user'@'192.168.1.%'时,忽然发现业务系统部分业务报404错误,经排查,发现是因为报错的业务在调用数据库时,使用了视图,而视图的定义者是原来的'user'@'%',并且安全性设置的是definer,现在这个用户不存在了,虽然新用户'user'@'192.168.1.%’拥有和原来相同的数据库...

weixin_36269709的博客 487

mysql 存储过程 definer_mysql存储过程的权限 definer

mysql中用户对存储过程的权限有:ALTER ROUTINE 编辑或删除存储过程CREATE ROUTINE 创建存储过程EXECUTE运行存储过程存储过程的创建者拥有存储过程的ALTER、CREATE、EXECUTE权限。详细实验后续补充。DEFINER用于指明存储过程是由哪个用户定义的,默认存储过程的定义者是存储过程,跟存储过程的使用权限无关。INVOKER用于指定哪些用户有调用存储过程的权...

weixin_39612332的博客 963

DEFINER作用

BEGIN<执行部分>END;一.作用及意义DEFINER参数是用来限制调用者权限,默认SQL SECURITY 的值为 DEFINER,即表示调用者若想 CALL 此对象,必须DEFINER用户具备该对象的调用权限。SQL SECURITY 的值为 INVOKER时,DEFINER参数失效。例如:存储过程proc_1涉及查询A、B两张表,定义者对A有查询权限,对B不存在查询权限,此时定义者将无法调用proc_1,其他具备A/B表查询权限的人,也无法调用proc_1。

weixin_42325781的博客 1374

Cause: java.sql.SQLException: The user specified as a definer ('test'@'%') does not exist 存储过程报错

由于存储过程设置的安全性为definer,而当时的那个数据库存在test这个用户且用的test用户创建的存储过程。 所以解决方法主要有以下两种: 保持definer安全性 1)在navicat上进行修改 将定义者从test改为在该服务器存在的用户(一般每个服务器都有root@localhost) 2)通过sql语句修改 1 mysql>update mysql.proc...

我的成长之路! 7993

存储过程中definer和invoker

创建存储过程的时候可以指定 SQL SECURITY属性,设置为 DEFINER 或者INVOKER,用来奉告mysql在执行存储过程的时候,,是以DEFINER用户的权限来执行,还是以调用者的权限来执行。默认情况下,使用DEFINER方式,此时调用存储过程的用户必须有存储过程的EXECUTE权限,并且DEFINER指定的用户必须是在mysql.user表中存在的用户。1.DEFINER模式下,默...

StarryDream 1003
上一篇: linux 脚本或命令跟踪 set -x
下一篇: 性能分析命令之vmstat--mysql
杰克牌辣酱
博客等级 码龄18年 26粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值