我需要执行一个SQL脚本来创建一个函数。此函数使用DBMS_RANDOM.STRING方法。它会抛出一个错误,如
SQL函数中的语句:
SELECT DBMS_RANDOM.STRING('U', CODELENGTH) INTO CODEGEN FROM DUAL;
字符串
在DEV环境中,脚本工作完美,创建的函数没有编译错误。但是在preProd环境中,Indus团队总是向我提供有关此函数的错误消息。最后似乎这个类(DBMS_RANDOM)它没有安装。
错误消息:
LINE/COL ERROR
-------- -----------------------------------------------------------------
15/5 PL/SQL: SQL Statement ignored
15/12 PL/SQL: ORA-00904: "DBMS_RANDOM"."STRING": invalid identifier
型
它是应该安装的包/库中的DBMS_RANDOM类?如果答案是YES,是否有任何QUERY来获取已安装的软件包/库?
我们在所有环境中都使用Oracle 19 c。
2条答案
按热度按时间bgibtngc1#
DBMS_RANDOM
在那里;我认为这只是因为您在preProd数据库中的用户没有所需的权限。如果你把你得到的错误贴出来,肯定会有帮助。与DBA交谈并要求他们字符串
of1yzvn42#
DBMS_RANDOM
应该存在于每个Oracle数据库上,并且应该被授予PUBLIC
,这允许每个用户调用该包。虽然像grant execute on dbms_random to public;
这样的简单语句可以解决眼前的问题,但您还应该寻找根本原因,因为这个问题是其他问题的标志。缺少
DBMS_RANDOM
上的权限很可能是由于您组织中的某人运行过时的安全或审计规则造成的。我所见过的每一个Oracle数据库审计最终都来自国防信息系统局的[DISA]安全技术实施指南[STIG]。在Oracle Database 11.2g Security Technical Implementation Guide中,有一个名为"Execute permission must be revoked from PUBLIC for restricted Oracle packages"的规则。该规则建议删除对许多流行软件包的公共访问,包括DBMS_RANDOM
。规则是愚蠢的。它删除了随机功能,因为“DBMS_RANDOM:允许在不需要安全管理加密密钥的情况下对数据进行加密。”嘿,为什么不删除乘法运算符呢?该功能还可以用于对数据进行不良加密。
幸运的是,我们可以忽略该规则,因为它不存在于most recent STIG for Oracle 12c中。您可能需要与DBA交谈,要求他们更新其审计脚本,并将这些包上的execute重新授予public:DBMS_BACKUP_RESTORE、DBMS_JOB、DBMS_LOB、DBMS_OBFUSCATION_TOOLKIT、DBMS_RANDOM、DBMS_SQL、DBMS_SYS_SQL、UTL_FILE、UTL_HTTP、UTL_SMTP、UTL_TCP。