当前位置: 首页 > 面试题库 >

使用Oracle PL / SQL存储过程授予其他用户表的权限

慕河
2023-03-14
问题内容

我在执行以下操作的应用程序时遇到问题:

  • PL / SQL包“ A”包含应用程序的所有功能/过程
  • “ A”归“ USER_A”所有
  • “ A”在Oracle中创建用户帐户,并在这些用户下创建表
  • ‘A’还必须能够对用户表进行TRUNCATE / INSERT

注意-所有创建的表都位于安全性较低的表空间内,我们将其称为“ MY_TS”。尽管此程序包在每个新用户的架构中创建用户和表,但“
A”无权插入或删除这些表。(Oracle中的默认值?)

解决此问题的两种方法是:

  1. 将GRANT语句回显到sqlplus的命令行调用中,以新用户身份登录并向USER_A发出GRANT ALL ON [table],或者
  2. 创建一个单独的过程(称为“ B”),该过程由具有DBA权限的帐户创建并拥有。此proc使用“ AUTHID DEFINER”运行,并在对USER_A语句运行GRANT ALL ON [table]之前首先检查以确保该表位于’MY TS’中

我遇到了方法1的障碍。尽管我对命令行字符串进行了测试,但是在Oracle中封装命令显然不那么容易(我不建议使用命令外壳,但我更喜欢使用SQL
Server,但不建议调用该命令外壳!)。我使用的作品非常完美。

对于方法2,我编写了一个过程“ B”,该过程由“ AUTHID
DEFINER”编译指示定义,并由具有DBA权限的帐户编译。此proc通过表空间检查(边缘安全性),但是在执行GRANT语句时返回错误“
ORA-01929:没有授予GRANT的权限”,该语句是使用传递给’EXECUTE IMMEDIATE’命令的动态SQL构建的。

任何人都对使用其他方法会更好的方法有任何建议,或者对任何一种方法都可行(并与DBA一起通过)有解决方案?赋予USER_A更大的整体权限似乎并不可行。

感谢您的提示/反馈!


问题答案:

如果我提到在执行动态SQL(execute immediate)时不考虑通过角色获得的特权,可能会有所帮助。如果“具有DBA权利的帐户”具有某些角色的这些权利,则这些权利将不会用于您的动态授权声明;您将需要显式授予该帐户用户适当的特权。



 类似资料:
  • 问题内容: 我有一个脚本,可以创建数据库,存储的proc,视图,表,udf。我想包含一个脚本来创建用户’user_1’并授予对数据库的执行权限。 我尝试以下为所有存储的过程创建Grant exec命令 但是不起作用。它给 ’;’附近的语法不正确。 我该如何解决? 问题答案: 创建登录名:创建服务器级别的登录名。然后…创建用户:让登录帐户附加到您的数据库。然后…将执行权限授予:向您的数据库中的所有s

  • 授予Snowflake中所有存储过程的执行权限。 我想我需要添加执行权限,但我不知道在雪花中需要在哪里配置存储过程权限。 有人想给存储过程/表权限吗?

  • 问题内容: 我有一个具有应用程序角色的数据库。角色成员都属于Active Directory中的组。我没有给角色授予从表中进行选择的权限,而是给角色赋予了对它需要调用的所有存储过程的执行权限。 除了我的存储过程之一,该过程可以建立一些动态SQL并调用sp_executesql之外,其他方法都可以正常工作。 动态sql看起来像这样: 具有此角色的用户无法调用存储过程。它给出了以下错误,这是我所预期的

  • 我想在我的应用程序。如果已授予在android中不显示这是我的代码 @override public void onRequestPermissionsResult(int requestCode,String permissions[],int[]grantResults){

  • 问题内容: 我在注册后使用以下方法进行程序化登录 用户已通过身份验证,但始终具有ROLE_ANONYMOUS我不知道为什么?有任何想法吗 ? 问题答案: 这种现象看起来很奇怪。Javi建议手动将安全性上下文持久化到会话中,但是应该由Spring Security的自动完成。 一个可能的原因,我可以想像是在你的登记处理的页面。 禁用指定URL的所有安全过滤器。如你所见,它可能会干扰Spring Se

  • 我正在尝试制作一个使用数据库的java应用程序。我已经下载了db2并创建了一个用户'student'。我的程序中有以下几行: 显然,我几乎不知道我在做什么,我不知道如何给予“学生”必要的特权。也就是说,我不知道什么用户可以给他特权,因为我从来没有创建过另一个用户。我看到有人提到过'db2admin'(我使用的是windows),但我不知道该如何处理这段信息。我不知道如何检查现有用户,也不知道对db