暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MogDB支持AUTHID CURRENT_USER

原创 MogDB 2024-08-06
172

可获得性

本特性自MogDB 5.0.6版本开始引入。

特性简介

本特性支持在创建函数、存储过程和包的时候指定AUTHID CURRENT_USER关键字,允许存储过程或函数根据调用者的身份且存储过程或函数的search path也为调用者所在schema,动态地执行SQL语句。

客户价值

增强MogDB与Oracle的兼容性、数据库安全性和灵活性,更好地适应不同用户或角色的权限需求。

特性描述

AUTHID CURRENT_USER是一个关键字,用于指定存储过程、函数、包等的执行权限。当创建函数或存储过程使用AUTHID CURRENT_USER关键字时,函数或存储过程将以当前调用者的身份执行,而不是其存储过程、函数、包等创建者的身份

举例而言,A/B用户建有一张同名表,在A用户下带AUTHID CURRENT_USER属性创建一个存储过程,并且将该存储过程授权给B用户执行,当A用户执行该存储过程时,数据会插入A的表,B用户执行该存储过程时,数据会插入B的表。

使用AUTHID CURRENT_USER关键字的主要目的是在创建存储过程或函数时,使其具有更灵活的权限控制,以便根据执行者的身份来决定访问权限,根据上下文执行不同的逻辑,而不是强制使用定义者权限。此外,在存储过程或函数中使用DBMS_OUTPUT.PUT_LINE或RAISE INFO等输出信息时,可以通过USER函数获取当前用户的用户名。

此外需要注意的是,behavior_compat_options = 'plsql_security_definer’开关会影响关键字缺省时存储过程、函数、包等的执行权限,若打开此开关,且关键字缺省,则为创建者模式;若关闭此开关,且关键字缺省,则为调用者模式。

语法说明

CREATE [OR REPLACE] {PROCEDURE | FUNCTION | PACKAGE } object_name [[ EXTERNAL ] SECURITY INVOKER | AUTHID CURRENT_USER] {IS | AS} [declaration_section] BEGIN -- body_section END [object_name];

说明:SECURITY INVOKER和AUTHID CURRENT_USER的功能相同。

特性约束

  • 只支持默认A模式。
  • 该关键字需要配合behavior_compat_options = 'set_procedure_current_schema’参数使用。

示例

-- 创建用户并授权 drop user if exists authid_user1 cascade; drop user if exists authid_user2 cascade; CREATE USER authid_user1 IDENTIFIED BY 'user1@123'; CREATE USER authid_user2 IDENTIFIED BY 'user2@123'; GRANT ALL PRIVILEGES to authid_user1; GRANT ALL PRIVILEGES to authid_user2; -- 切换到用户1,在用户1下创建存储过程 gsql -d postgres -U authid_user1 -W 'user1@123' create table authid_tab01(col1 integer, col2 integer); create or replace procedure authid_proc01(val integer) AUTHID CURRENT_USER as begin insert into authid_tab01 values(val, val); raise info 'insert values (%, %)', val, val; raise info 'current user %', USER; end; / GRANT EXECUTE ON procedure authid_proc01(val in integer) TO authid_user2; -- 在用户2下创建同名表并调用用户1下的存储过程 gsql -d postgres -U authid_user2 -W 'user2@123' SET behavior_compat_options = 'set_procedure_current_schema'; create table authid_tab01(col1 integer, col2 integer); call authid_user1.authid_proc01(2); -- 查看执行结果 select * from authid_tab01; col1 | col2 ------+------ 2 | 2 (1 row) select * from authid_user1.authid_tab01; (0 rows)

相关页面

CREATE FUNCTIONCREATE PROCEDURECREATE PACKAGEbehavior_compat_options

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论