Oracle 程序被编译后自动增加了AUTHID CURRENT_USER授权

news2024/12/29 8:04:22

目录

背景

原因:

解决方法


背景

今天遇到一个大坑,新建的一个数据库用户调用apps下的程序包,程序反馈未授权无法使用。

但是DBA确认已经给了授权。

查询授权表也是有正确授权的,但就是显示无效授权。

后来debug进去,程序是可以step进到程序包里面的,证明授权是正常的。只是查询到一个sql里面selelct into 报这个错误,很诡异,纠结很久。

找到原来的程序开发人员,一轮调试,发现pkg的包头声明被加了AUTHID CURRENT_USER。

比对测试环境没有这个授权。

发生这种情况是公司EBS系统凌晨5点进行了patch升级,自动编译了数据库对象(patch中是不包含这个pkg的,应该是升级把所有的数据库对象给刷了一遍)

这种情况及时给其他数据库用户授权,也无法被有效调用,注释掉就可以了。

原因:

Oracle Metalink有以下解释

文档号:Doc ID 1286602.1

原文

APPLIES TO:

Oracle Applications DBA - Version 12.0.0 to 12.1.3 [Release 12 to 12.1]
Information in this document applies to any platform.

SYMPTOMS

After upgrading to 12.1.3, custom packages created under apps schema have the clause ‘AUTHID CURRENT_USER’ added automatically to their package specification.

Steps To Reproduce
=================
1. Create a custom package under apps schema.
2. Upgrade to 12.1.3

CAUSE

The custom packages contain the text 'Header' in their definition, which causes AD utilities to manipulate them, and add the clause 'AUTHID CURRENT_USER' to them, as reported in Bug 3098429.

SOLUTION

1. Replace the text 'Header' in the custom packages with any other similar text like 'Version'.
2. Compile the apps schema using adadmin, then it will be noticed that the AUTHID clause is not added.

REFERENCES

NOTE:119935.1 - 11i: Applications Objects with Invoker's Rights and Processing Modes

解释起来应该就是

        程序包的包头注释中如果有 'Header'的字符,那么就会自动加上 'AUTHID CURRENT_USER'

比如:

 

ORACLE PLSQL中提供两种授权选择:

        --AUTHID DEFINER (定义者权限):指编译存储对象的所有者。也是默认权限模式。

        --AUTHID CURRENT_USER(调用者权限):指拥有当前会话权限的模式,这可能和当前登录用户相同或不同(alter session set current_schema 可以改变调用者Schema)

也就是说AUTHID CURRENT_USER只能操作本次连接的数据库用户下的对象,无法跨数据库用户操作数据库对象。

举个例子:

        1. 在A用户和B用户,各建立一个table test_user(heder_id number);

        2. 在A用户下建立一个procedure update_id,里面更新test_user.heder_id = 123;

        3. 把update_id从A用户授权给B用户使用;

        4. B用户下调用这个procedure   A.update_id;

        如果update_id没有使用AUTHID CURRENT_USER声明,会更新A用户的test_user数据,B用户的test_user的数据无变化。

        如果update_id有使用AUTHID CURRENT_USER声明,会更新B用户的test_user数据,A用户的test_user的数据无变化。

        如果该用户下无该table对象,则报错,如表或视图不存在、没有有效授权之类的。

        查询亦然!!!

SELECT *
  FROM Dba_Role_Privs t
 WHERE t.Grantee = 'MPP'
 ORDER BY t.Grantable
         ,t.Owner
         ,t.Table_Name;

查找数据库中被修改的对象


SELECT Do.Owner
      ,Do.Object_Name
      ,Do.Object_Type
      ,Ds.Line
      ,Ds.Text
      ,Do.Created
      ,Do.Last_Ddl_Time
  FROM Dba_Objects Do
      ,Dba_Source  Ds
 WHERE 1 = 1
   AND Do.Owner = Ds.Owner
   AND Do.Object_Type = Ds.Type
   AND Do.Object_Name = Ds.Name
   AND Upper(Ds.Text) LIKE '%AUTHID CURRENT_USER%'
      -- AND Ds.Line >= 10
   AND (Do.Object_Name LIKE 'XX%' OR Do.Object_Name LIKE 'CUX%' OR Do.Object_Name LIKE 'CUS%')
      --AND Do. >= SYSDATE - 2
   --AND Do.Object_Type = 'PACKAGE'
   AND To_Char(Do.Last_Ddl_Time, 'yyyy-mm-dd') = '2023-01-31'
 ORDER BY Do.Owner
         ,Do.Object_Name
         ,Do.Last_Ddl_Time;

解决方法

找DBA手动把它改回来呗。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

外汇k线图经典图解:穿头破脚

从事外汇、黄金交易怎么能不懂K线图,学看K线图怎么能不把一些经典图解铭记心中呢?它们就好比字典和工具书,当投资者在解读行情时遇到任何困惑,都能从这些经典中得到指引,从而指明自己的投资方向。今天,小编…

java ssm校园二手书交易平台idea

该网站从实际运用的角度出发,运用了计算机网站设计、数据库等相关知识,网络和Mysql数据库设计来实现的,网站主要包括学生注册、学生登录、浏览图书、搜索图书、查看图书并进行购买,对购买的图书进行确认收货、退款退货、查看个人信…

Elasticsearch连续剧之实战篇Java操作es

作者:狮子也疯狂 专栏:《es》 坚持做好每一步,幸运之神自然会驾凌在你的身上 目录一、🐇前言二、🐇原生JAVA操作ES_搭建项目Ⅰ、创建项目Ⅱ、索引操作2.1 创建空索引2.2 给索引添加结构2.3 删除索引Ⅲ、文档操作3.1 新…

vCloud删除OVDC网络时提示被vApp网络使用无法删除

环境 VMware Cloud Director 版本:10.3.2.19375051 现象 在vCloud租户视图删除OVDC网络,提示被vApp网络使用,无法删除。此时通过查看vApp发现并没有残留vApp网络。 解决办法 1、登录vCloud数据库: 登录方法可以参考:VMware Cloud Director数据库操作 2、查逻辑网络: …

CAN接口电路设计

CAN总线的全称是控制器局域网络,主要应用在汽车电子和工业控制领域。和485总线一样,CAN总线也是一种半双工的通信。一条CAN总线最多能接110个节点它最高速率能到1Mbps,最远传输距离能到10KMCAN总线有两个信号,一个是CANH&#xff…

如何在 Linux 命令行中优雅的格式化输出 xml,记住这三种方法!

xml(可扩展标记语言)也是一种人类可读的标记语言,但是如同 json 文件一样,没有缩进格式(或者压缩)的 xml 文件,读起来那是挺头疼的。 首先来看一下我们这篇文章要达到的目的,如下图…

代码随想录训练营第十七天|110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404.左叶子之和

110.平衡二叉树 看完题后的思路 int[] f(root)if rootnull return [true,0]left[]f(root.left) if(!left[0]){return [false,-1]} right[]f(root.right) if(!right[0]){return [false,-1]} return[true,math.max(left[1],right[1])1] 思路 上面的过程弄复杂了,其…

Elasticsearch 入门到精通-Elasticsearch核心倒排索引数据结构

Elasticsearch 简介Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。Elasticsearch 建立在全文搜索引擎 Apache Lucene™ 基础上,通过 Lucene 的倒排索引技术实现比关系型数据库更快的过滤,从而很方便的使大量数据具有搜索、分析和探索…

vue插槽之插槽的用法及作用域插槽详解

目录前言一,插槽的基本使用1.1 引出插槽1.2 插槽的基本使用1.3 默认插槽1.4 插槽样式二,具名插槽2.1 引出具名插槽2.2 具名插槽的使用三,template标签3.1 引出template标签3.2 template标签的使用四,作用域插槽4.1 引出作用域插槽…

C语言小题,有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。(指向结构体数组的指针)

前言: 此篇是针对 指向结构体数组的指针 方面的练习。 解题思路: 用指向结构体变量的指针来处理: (1)声明结构体类型 struct Student ,并定义结构体数组,同时使之初始化; &#xff…

【Rust】9. 常见集合

9.1 Vector 9.1.1 创建 vector vector 只能储存相同类型的值!创建空的 vector:Vec::new()创建有值的 vector:vec! 宏 9.1.2 向 vector 中添加元素 9.1.3 读取 vector 的元素 索引语法:当引用一个不存在的元素时 Rust 会造成 pa…

设计模式-软件设计原则

目录 3.软件设计原则 3.1 开闭原则 3.2 里氏代换原则 3.3 依赖倒转原则 3.4 接口隔离原则 3.5 迪米特法则 3.6 合成复用原则 3.软件设计原则 在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要…

【QT5 定时器练习-笔记-样例讲解-实现方式>>>(1)定时器事件方式和(2)定时器绑定函数】

QT5 -定时器简单应用-样例讲解-实现方式1-定时器事件方式1、前言2、实验环境3、定时器实现方式说明-以及效果3、操作步骤-(1)定时器事件方式(1)建立工程(2)拉控件布局(3)代码部分编写…

《深入浅出计算机组成原理》学习笔记 Day16

冒险和预测(一)1. 超长流水线的缺点2. 冒险和分支预测参考1. 超长流水线的缺点 增加流水线的深度,在同主频下,其实就是降低了 CPU 的性能。 一个 Pipeline Stage,就需要一个时钟周期。如果我们把任务分成 31 个阶段&…

2014年408专业算法题

文章目录0 结果1 题目2 思路附录0 结果 1 题目 2 思路 二叉树的带权路径长度(WPL)的计算方法有两种: 1,定义:WPL所有叶结点的权值Wi∗该结点深度Di求和WPL所有叶结点的权值W_i*该结点深度D_i求和WPL所有叶结点的权值…

如何管理IC研发过程产生的bug

一款芯片的研发过程中总是伴随着bug、bug和bug,研发线上各端的IC工程师也是全程在debug、debug和debug,直到最终的GDSII文件交给Founry工厂加工,全程都是为了保证芯片最终能够安全保质的tape-out成功。由此可见,bug的跟踪管理是至…

【数据结构】题解:二叉树的非递归遍历

【数据结构】题解:二叉树的非递归实现 文章目录【数据结构】题解:二叉树的非递归实现一、问题描述二、递归实现三、非递归实现3.1 前序遍历3.2 中序遍历3.3 后序遍历一、问题描述 二叉树的前序遍历,非递归迭代实现 ,二叉树的前序遍…

Synology群晖小技巧之百度网盘远程下载同步

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

[HCTF 2018]WarmUp1

http://ca039961-2ebb-4acd-8107-ece077539106.node4.buuoj.cn:81/ 按F12查看源码 根据提示访问source.php 分析源码,搞懂其中几个函数 mb_strpos() :返回要查找的字符串在要检查的字符串中首次出现的位置 mb_strpos (haystack ,needle) //haystack&…

AVS3变换系数编码:SRCC

AVS3摒弃了HEVC和AVS2中的基于CG(Coefficient Group)的变换系数编码方式,使用基于扫描区域的变换系数编码方法Scan Region-based Coefficient Coding(SRCC)。在基于块的预测变换混合编码框架里,当一个块完成预测、变换和量化后会获得相应的变换系数&…