一、背景

       在某项目现场,开发商想实现4个用户之间能互相拥有表的查询、删除、插入、更新权限和存储过程的执行权限。此过程只要在新增表之后,其他用户的权限需要授权,如果是手动写,一张表的授权就要写至少3次sql语句,如果多了,容易疏漏。

        了解到新建表属于低频且由人工操作,因此提供了一个存储过程给对方,让对方建完表之后,手动执行下对应的存储过程即可。

二、需求

有四个用户:user1,user2,user3,user4能互相操作表的增删改查权限。

三、思路

使用 2 张配置表,列举出授权的组合情况。使用存储存储过程中的游标遍历列表并执行授权语句。【此方法同样使用4个以上的用户两两授权的情况】

四、步骤

4.1 初始化数据

--初始化插入用户信息
CREATE TABLE temp_user_list (value VARCHAR(10));
INSERT INTO temp_user_list VALUES ('USER1'), ('USER2'), ('USER3'), ('USER4');
COMMIT;--初始化数据,两两组合,为了实现授权
--DROP if exist  TABLE "SYSDBA"."PRIV_OWNER_LIST" ;
CREATE  TABLE "SYSDBA"."PRIV_OWNER_LIST"
(	ID INT IDENTITY(1,1),"P_USER" varCHAR(20) NOT NULL ,"S_USER" varCHAR(20) NOT NULL  
);insert into "SYSDBA"."PRIV_OWNER_LIST" (P_USER,S_USER)
SELECT t1.value AS value1, t2.value AS value2
FROM  temp_user_list t1
CROSS JOIN  temp_user_list t2
WHERE  t1.value <> t2.value ;
commit;SELECT * FROM "SYSDBA"."PRIV_OWNER_LIST" ;

4.2  创建存储过程实现语句

create or REPLACE PROCEDURE sysdba.PROC_MAIN_PRIV (SOURCE_USER varchar(100),TARGET_USER varchar(100) )is --授予用户表的所有权限begin DECLARESQLSTMT STRING;SQLSTMT_PROC STRING;CURSOR CUR FOR SELECT ID,NAME  FROM SYSOBJECTS  WHERE  TYPE$ = 'SCHOBJ' AND SUBTYPE$ IN ('STAB','UTAB')  AND (PID=-1 OR PID=0) AND  SCHID=(SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME=SOURCE_USER );TYPE MYREC IS CUR%ROWTYPE;REC_V MYREC;BEGINFOR REC_V IN CUR LOOPSQLSTMT = 'grant SELECT,INSERT,DELETE,UPDATE ON '||SOURCE_USER||'.'|| '"'||REC_V.NAME ||'"' || ' to ' || TARGET_USER ||';';EXECUTE IMMEDIATE SQLSTMT;--PRINT SQLSTMT;END LOOP;COMMIT;
END;--授予用户存储过程执行权限
DECLARESQLSTMT_PROC STRING;CURSOR CUR FOR SELECT  SUBTYPE$ ,ID,NAME ,*  FROM SYSOBJECTS  WHERE  TYPE$ = 'SCHOBJ'   AND SUBTYPE$ IN ('PROC')  AND   SCHID=(SELECT ID FROM SYSOBJECTS WHERE TYPE$='SCH' AND NAME=SOURCE_USER);TYPE MYREC IS CUR%ROWTYPE;REC_V MYREC;BEGINFOR REC_V IN CUR LOOPSQLSTMT_PROC = 'grant EXECUTE ON '||SOURCE_USER||'.'|| '"'||REC_V.NAME ||'"' || ' to ' || TARGET_USER ||';';EXECUTE IMMEDIATE SQLSTMT_PROC;--PRINT SQLSTMT_PROC;END LOOP;COMMIT;
END; end;

 4.3 创建存储过程遍历列表执行授权

--遍历表"SYSDBA"."PRIV_OWNER_LIST"中的用户进行授权
create or replace PROCEDURE sysdba.pro_grant_all_priv ()
iscursor user_priv_list isselect P_USER,S_USER from "SYSDBA"."PRIV_OWNER_LIST";beginfor  cur_user  in user_priv_list loopBEGINcall sysdba.proc_main_priv (cur_user.P_USER,cur_user.S_USER);end ;end loop;end;--任意具备此寻出过程执行权限的用户调用即可完成授权 
call  sysdba.pro_grant_all_priv ();

 4.4 授权4个用户相关表和存储过程的相应权限

--把执行存储过程的权限给  user1,user2,user3,user4 这4个用户 grant EXECUTE ON  sysdba.pro_grant_all_priv to user1;
grant EXECUTE ON  sysdba.pro_grant_all_priv to user2 ;
grant EXECUTE ON  sysdba.pro_grant_all_priv to user3 ;
grant EXECUTE ON  sysdba.pro_grant_all_priv to user4;grant EXECUTE ON  sysdba.PROC_MAIN_PRIV to user1;
grant EXECUTE ON  sysdba.PROC_MAIN_PRIV to user2 ;
grant EXECUTE ON  sysdba.PROC_MAIN_PRIV to user3 ;
grant EXECUTE ON  sysdba.PROC_MAIN_PRIV to user4;--把表的增删改查权限给4个用户
grant select,update,delete,insert  ON  "SYSDBA"."PRIV_OWNER_LIST" to user1;
grant select,update,delete,insert  ON  "SYSDBA"."PRIV_OWNER_LIST" to user2;
grant select,update,delete,insert  ON  "SYSDBA"."PRIV_OWNER_LIST" to user3;
grant select,update,delete,insert  ON  "SYSDBA"."PRIV_OWNER_LIST" to user4;

以上就是需求的实现过程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95474.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95474.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95474.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

协议分析基础

0x01 协议分析基础 网络安全领域的“基本功”&#xff1a;一切高级攻击&#xff08;漏洞利用、DDoS、渗透等&#xff09;都体现为网络流量的异常。 核心价值&#xff1a; 故障排查 &#xff1a; 定位网络延迟、丢包、无法连接等问题。性能优化 &#xff1a; 分析应用性能瓶颈。…

AI生成内容的版权迷局:GPT-4输出的“创意”版权风险与规避之道

大型语言模型&#xff08;LLM&#xff09;如 GPT-4&#xff0c;正以前所未有的速度和创造力&#xff0c;改变着内容生产的方式。无论是文章、代码、图片还是音乐&#xff0c;AI都能快速生成令人惊叹的作品。然而&#xff0c;在这股“AI内容创作浪潮”之下&#xff0c;一个严肃的…

编程与数学 03-004 数据库系统概论 19_数据库的分布式查询

编程与数学 03-004 数据库系统概论 19_数据库的分布式查询一、分布式查询的概念&#xff08;一&#xff09;分布式查询的定义&#xff08;二&#xff09;分布式查询的特点二、分布式查询的优化&#xff08;一&#xff09;查询分解&#xff08;二&#xff09;查询分配&#xff0…

java--写在 try 中的创建连接

1. 背景 在 Java 开发中&#xff0c;很多资源&#xff08;数据库连接、ZooKeeper 连接、Redis 客户端、文件流等&#xff09;都需要手动关闭。如果忘记关闭&#xff0c;会导致 资源泄漏&#xff08;连接占满、内存泄漏、文件句柄耗尽等&#xff09;。 为了避免这种问题&#xf…

蔡文胜在香港买了一栋楼,免费给创业者办公

蔡文胜在香港买了一栋楼&#xff0c;免费给创业者办公。前段时间&#xff0c;蔡文胜出售美图公司、套现约8亿港币后&#xff0c;以6.5亿港元购入香港天后道上全幢物业&#xff0c;并将其更名为“CAI大厦”。一楼是咖啡厅&#xff0c;二楼做公众活动&#xff0c;楼上会有两层会开…

FOC+MCU:重新定义吸尘器电机控制——高效、静音、智能的终极解决方案

传统吸尘器电机的“三重困境”当前吸尘器市场&#xff0c;消费者对吸力、噪音、续航的诉求日益严苛&#xff0c;但传统电机控制方案&#xff08;如方波驱动、有感/无感BLDC控制&#xff09;难以兼顾&#xff1a;效率低下&#xff1a;高速运行时电机发热严重&#xff0c;电池能量…

树形组件,支持搜索展示,自定义展示,支持vue2,vue3,小程序等等

效果图平台兼容性Vue2Vue3ChromeSafariapp-vueapp-nvueAndroidiOS鸿蒙√√√√√√---微信小程序支付宝小程序抖音小程序百度小程序快手小程序京东小程序鸿蒙元服务QQ小程序飞书小程序快应用-华为快应用-联盟√√√√√√-√√√√多语言暗黑模式宽屏模式√属性属性名类型默认值…

元宇宙与教育变革:沉浸式学习重构知识获取与能力培养

1 元宇宙打破传统教育的核心局限1.1 突破空间限制&#xff1a;从 “固定教室” 到 “全域学习场景”传统教育受限于物理空间&#xff0c;优质资源集中在少数学校与城市&#xff0c;而元宇宙通过 “虚拟场景复刻 跨地域实时交互”&#xff0c;将学习空间拓展至全球乃至虚拟维度…

如何在SpringBoot项目中优雅的连接多台Redis

如何在SpringBoot项目中优雅的连接多台Redis 在Spring Boot项目中&#xff0c;连接单个Redis实例是常见需求&#xff0c;但有时需要同时连接多个Redis实例&#xff08;例如&#xff0c;主Redis用于业务数据存储&#xff0c;另一个Redis用于爬虫数据缓存&#xff09;。本文将基于…

追觅科技举办2025「敢梦敢为」发布会,发布超30款全场景重磅新品

上海&#xff0c;2025年9月4日——在以「敢梦敢为」为主题的2025新品发布会上&#xff0c;追觅科技一次性发布超30款新品&#xff0c;全面涵盖智能清洁、智能家电、家庭健康与个护等核心领域。在清洁家电与大家电“高端智能生态矩阵”已然成型的当下&#xff0c;追觅科技正在迈…

去服务器化的流媒体分发:轻量级RTSP服务的技术逻辑与优势

一、设计背景&#xff1a;RTSP/RTP协议的技术根基 在流媒体传输体系中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff09; RTP/RTCP 组合被广泛认为是最经典、最标准化的解决方案。 RTSP 作为应用层协议&#xff0c;本质上是一个 远程会话控制协议。它通过…

mysql分页SQL

在 MySQL 中&#xff0c;实现分页查询通常使用 LIMIT 子句。LIMIT 可以指定返回结果的起始位置和数量&#xff0c;非常适合实现分页功能。 基本语法如下&#xff1a; SELECT 列名 FROM 表名 WHERE 条件 ORDER BY 排序字段 [ASC|DESC] LIMIT 起始位置, 每页显示数量;说明&#x…

刷新记录:TapData Oracle 日志同步性能达 80K TPS,重塑实时同步新标准

在当前数据驱动的企业环境中&#xff0c;高效、稳定的数据同步能力已成为支撑关键业务系统的核心需求。尤其在高频变更、大量增量数据的业务场景中&#xff0c;传统的 Oracle 日志解析方案往往在吞吐能力和延迟控制方面力不从心。 随着企业全面迈入“实时化”时代&#xff0c;金…

Java全栈开发面试实战:从基础到高并发的深度解析

Java全栈开发面试实战&#xff1a;从基础到高并发的深度解析 在一次真实的面试中&#xff0c;一位拥有5年全栈开发经验的程序员&#xff0c;面对来自某互联网大厂的技术面试官&#xff0c;展现出了扎实的基础与丰富的项目经验。以下是这次面试的完整记录。 面试官开场 面试官&a…

【mac】如何在 macOS 终端中高效查找文件:五种实用方法

【mac】如何在 macOS 终端中高效查找文件&#xff1a;五种实用方法 在 macOS 上&#xff0c;终端是一个强大的工具&#xff0c;不仅可以执行命令&#xff0c;还能帮助你快速找到需要的文件。无论是按文件名、类型、大小&#xff0c;还是文件内容搜索&#xff0c;都有多种命令可…

React笔记_组件之间进行数据传递

目录父子组件传值- props父传子子传父嵌套组件传值-Context API概念React.createContext APIProvider组件正确示例错误示例消费 ContextReact.Consumer组件useContext Hook区别使用场景举例说明-用户信息状态管理-Redux父子组件传值- props 在React中父子组件传值是单向数据流…

Elixir通过Onvif协议控制IP摄像机,扩展ExOnvif的摄像头停止移动 Stop 功能

ExOnvif官方文档 在使用 Elixir 进行 IPdome 控制时&#xff0c;可以使用 ExOnvif 库。 ExOnvif官方文档中未给停止移动调用命令&#xff0c;自己按照onvif协议 Onvif协议 扩展的此项功能&#xff1b; 停止移动 Stop 在Onvif协议中&#xff0c;用于停止云台移动的操作为Stop…

spring boot autoconfigure 自动配置的类,和手工 @configuration + @bean 本质区别

它们在本质功能上都是为了向 Spring 容器注册 Bean&#xff0c;但在触发方式、加载时机、可控性和适用场景上有明显区别。可以这样理解&#xff1a;1️⃣ 核心区别对比维度Configuration Bean&#xff08;手工配置&#xff09;Spring Boot EnableAutoConfiguration / 自动配置…

论文解读 | Franka 机器人沉浸式远程操作:高斯溅射 VR 赋能的遥操框架研发与应用

研究背景 在工业制造、危险环境作业等领域&#xff0c;机器人远程操作技术是突破人类作业边界的关键手段。传统远程操作依赖2D 相机反馈与操纵杆控制&#xff0c;存在空间感知差、操作精度低、沉浸感弱等问题&#xff0c;难以满足复杂移动操作任务需求。 例如在核设施退役、灾后…

【Unity Shader学习笔记】(四)Shader编程

一、OpenGL与DirectX 这是计算机图形学中两个最核心的应用程序接口(API),它们充当了应用程序与显卡硬件之间的桥梁,让开发者能够调用GPU进行图形渲染和通用计算。 特性维度 OpenGL DirectX 主导公司 Khronos Group (原SGI) Microsoft