允许角色查询、插入和更新可变数组

Posted

技术标签:

【中文标题】允许角色查询、插入和更新可变数组【英文标题】:Allowing a role to query, insert upon and update a varying array 【发布时间】:2012-02-05 14:12:50 【问题描述】:

my last question 略有不同...

我试图让标题为 Head 的角色能够查询标题为 ReportDetails 的表格。 ReportDetails 表包含一个名为 ReportEntries_VA 的可变数组。我已经测试了我的数据库,发现即使我在 ReportDetails 上授予了 SELECT、INSERT、UPDATE 权限,Head 仍然无法访问 ReportEntries_VA

代码如下:

CREATE TYPE ReportEntries_Type AS OBJECT
(Subject VARCHAR (500));
/

CREATE OR REPLACE TYPE ReportEntries_VA AS
VARRAY (12) OF ReportEntries_Type;
/

CREATE TABLE ReportDetails
(ReportID INTEGER NOT NULL UNIQUE,
StudentID INTEGER NOT NULL UNIQUE,
ReportEntries ReportEntries_VA,
DateLastModified DATE NOT NULL,
CONSTRAINT ReportDetails_PK PRIMARY KEY (ReportID, StudentID),
CONSTRAINT RDStudentIDSD FOREIGN KEY (StudentID)
REFERENCES StudentDetails (StudentID));

然后将权限授予 Head 如下:

GRANT SELECT, INSERT, UPDATE ON ReportDetails TO Head;

我知道我可以使用它来查询,但不能插入或更新:

GRANT EXECUTE ON ReportEntries_Type TO Head;
GRANT EXECUTE ON ReportEntries_VA TO Head;

当我尝试插入行时,我得到了这个:ORA-01031: insufficient privileges,即使我已在表上授予 SELECT、INSERT、UPDATE,并在对象和可变数组上执行。基本上它不会让我插入或更新数组

任何关于我如何允许 Head 插入和更改可变数组(以及在它之前创建的对象?)的建议将不胜感激。

非常感谢, 祖鲁语

【问题讨论】:

@FlorinGhita 我得到这个:“ORA-01031:权限不足”,即使我已经在 table 上授予了 SELECT、INSERT、UPDATE 并在对象可变数组。基本上它不会让我插入或更新数组。 当您直接授予用户而不是角色时会发生什么? 那张桌子上有触发器吗?尝试将选择限制在您不想访问的表中的表 你能告诉我们失败的更新代码吗?我无法重现该错误,它对我来说很好。 【参考方案1】:

您还需要在 varray 上授予执行权限。

【讨论】:

抱歉 - 我现在看到您确实在 varray 上授予执行权限 - 只是它没有从您的代码示例中显示。

以上是关于允许角色查询、插入和更新可变数组的主要内容,如果未能解决你的问题,请参考以下文章

可变数组(PLSQL)

scala数据结构与可变不可变

通过包过程插入带有可变数组列的表时出错

不可变状态更新。在 Redux 中更新对象数组

c++中有可变长度数组吗?

编译器错误? g++ 允许可变大小的静态数组,除非函数是模板化的