我在执行以下操作的应用程序时遇到问题:
注意-所有创建的表都位于安全性较低的表空间内,我们将其称为“ MY_TS”。尽管此程序包在每个新用户的架构中创建用户和表,但“ A”无权插入或删除这些表。(Oracle中的默认值?)
解决此问题的两种方法是:
我遇到了方法1的障碍。尽管我对命令行字符串进行了测试,但是在Oracle中封装命令显然不那么容易(我不建议使用命令外壳,但我更喜欢使用SQL Server,但不建议调用该命令外壳!)。我使用的作品非常完美。
对于方法2,我编写了一个过程“ B”,该过程由“ AUTHID DEFINER”编译指示定义,并由具有DBA权限的帐户编译。此proc通过表空间检查(边缘安全性),但是在执行GRANT语句时返回错误“ ORA-01929:没有授予GRANT的权限”,该语句是使用传递给’EXECUTE IMMEDIATE’命令的动态SQL构建的。
任何人都对使用其他方法会更好的方法有任何建议,或者对任何一种方法都可行(并与DBA一起通过)有解决方案?赋予USER_A更大的整体权限似乎并不可行。
感谢您的提示/反馈!
担
如果我提到在执行动态SQL(execute immediate)时不考虑通过角色获得的特权,可能会有所帮助。如果“具有DBA权利的帐户”具有某些角色的这些权利,则这些权利将不会用于您的动态授权声明;您将需要显式授予该帐户用户适当的特权。
execute immediate