【问题标题】:How to resolve ORA-04042 and ORA-00942 errors when granting privileges?授予权限时如何解决 ORA-04042 和 ORA-00942 错误?
【发布时间】:2020-06-15 12:56:08
【问题描述】:

我正在尝试向用户授予 EXECUTE 和 READ 权限。

当我授权执行时,我得到:

grant EXECUTE on SYS.KIR_DOKUMENT to ktest2

Error report -
ORA-04042: procedure, function, package, or package body does not exist
04042. 00000 -  "procedure, function, package, or package body does not exist"

当我授权阅读时,我得到:

grant READ on SYS.KIR_DOKUMENT to ktest2

Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"
*Cause: 

但是我检查了dba_objects中表的状态,它们是有效的。

查询

select owner, object_name, object_type from dba_objects where object_name

给出这个输出:

同样的授权必须给予我数据库中的另一个用户:

如何解决这些错误?

【问题讨论】:

  • 第二个错误可能是权限问题 - 您以哪个用户身份运行这些命令?或者它可能是类型、所有者或名称不匹配;请编辑您的问题以包含来自select owner, object_name, object_type from dba_objects where object_name = 'KIR_DOKUMENT' 的输出。你真的在 SYS 模式中创建对象吗?

标签: sql oracle database-administration privileges grant


【解决方案1】:

根据您的问题编辑,该对象是一个目录;所以你必须包含 DIRECTORY 关键字:

grant READ, EXECUTE on DIRECTORY KIR_DOKUMENT to ktest2;

documentation 说(强调):

on_object_clause 标识被授予权限的对象。用户、目录对象、版本、数据挖掘模型、Java 源和资源架构对象以及 SQL 翻译配置文件分别标识,因为它们位于不同的命名空间中。)

在目录

指定要授予权限的目录对象的名称。您不能使用模式名称来限定 directory_name

还有gives an example

【讨论】:

    猜你喜欢
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 2015-11-26
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2014-07-11
    相关资源
    最近更新 更多