首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

一个关于Definer和Invoker的权限问题

定义者(Definer)-指的是编译存储对象的拥有者,包括包、存储过程、函数、触发器和视图。 调用者(Invoker)-指当前会话中生效的schema,不一定就是当前登录的用户。...引用Tom的实验,首先user1用户,创建如下两个存储过程,分为定义者权限,和调用者权限,并将这两个存储过程,执行权限授予user2, create or replace procedure definer_proc...接着使用user2,分别执行, SQL> exec user1.definer_proc; Current User: USER1 Session User: USER2 Current Schema:...SQL> exec user1.definer_proc; Current User: USER1 Session User: USER2 Current Schema: USER1 PL/SQL procedure...对于Definer和Invoker的含义要理解,Definer权限比较静态,Invoker权限则相对动态,通过procedures视图的AUTHID字段,可以了解对象,属于定义者还是调用者权限。

87320

ERROR 1356 (HY000): View xxx references invalid definerinvoker

其它用户查询该权限报错如下 ERROR 1356 (HY000): View 'db1.v_1' references invalid table(s) or column(s) or function(s) or definer...让检测依赖的 表,字段,函数,definer或者invoker 表字段之类的都是没问题的. 剩下的就是definer和invoker了....创建视图的时候 如果指定 SQL SECURITY 为Definer(默认). 则只需要definer能够正常使用后面的查询语句即可....如果是definer 那就是definer去执行, 如果是invoker, 就是调用者去执行.没得权限就报错 有个小坑: 如果SQL SECURITY为INVOKER , 然后使用definer账号去查询该视图...解决办法 方法1: 给使用者后面select的那些表的权限 方法2: 把invoker换成Definer (推荐) 总结 1. 建视图的时候尽量使用默认的Definer(啥也不加). 2.

45930

更改用户host留下的坑

此问题的解决方案有两种,一是将此存储过程的安全属性由 DEFINER 改为 INVOKER ,个人不推荐这个方案,至于 DEFINER 和 INVOKER 的区别,下个章节会额外讲解。...DEFINER:由definer(定义者)指定的用户的权限来执行 INVOKER:由调用这个视图(存储过程)的用户的权限来执行 默认情况下,系统指定为DEFINER。...当SQL SECURITY属性为DEFINER时,数据库中必须存在DEFINER指定的用户,并且该用户拥有对应的操作权限及引用的相关对象的权限,才能成功执行。与当前用户是否有权限无关。...更改用户host后,要注意此用户下的各个对象的DEFINER属性。 创建视图、存储过程等对象建议将SQL SECURITY定义为DEFINER。...数据库迁移时,要注意新环境存在相关对象定义的DEFINER用户。

99910
领券