Oracle 11G中的用户访问问题

时间:2011-09-20 08:41:40

标签: oracle oracle11g privileges

在我的oracle DB中,我有一个名为test的用户,该用户在数据库中有DML_ROLE。并且,我在名为DML_ROLE的表上提供了对hdr_detail的插入/更新/删除/选择访问权限。

但是,当用户testhdr_detail表上执行更新查询时,其获取错误消息为Returned error: ORA-01031: insufficient privileges。当我直接向用户提供访问权限时,它工作正常。

我很困惑,为什么只有当我通过角色提供访问时才出现此错误。

表格结构:

COLUMN NAME          DATA TYPE
PERIOD               NUMBER
HDR_ID               VARCHAR2(50)

用于更新的查询:

update test_sch.hdr_detail set period=201108 where hdr_id = 'check';

我用来授予的声明:

grant insert,select,update,delete on test_sch.hdr_detail to dml_role;

select * from dba_role_privs where grantee like 'TEST'返回以下结果

GRANTEE GRANTED_ROLE  ADMIN_OPTION  DEFAULT_ROLE
TEST    DML_ROLE      NO            NO

select * from dba_tab_privs where table_name like 'HDR_DETAIL'返回以下结果

GRANTEE    OWNER       TABLE_NAME   GRANTOR     PRIVILEGE   GRANTABLE    HIERARCHY
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    DELETE      NO           NO
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    INSERT      NO           NO
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    SELECT      NO           NO
DML_ROLE   TEST_SCH    HDR_DETAIL   TEST_SCH    UPDATE      NO           NO

请帮我解决这个问题。如果需要有关此问题的更多信息,请在评论中回复。

3 个答案:

答案 0 :(得分:2)

尝试将角色设置为用户默认角色:

ALTER USER test DEFAULT ROLE dml_role;

答案 1 :(得分:0)

这可能是您访问数据库对象HDR_DETAIL的一个问题。

来自Don burleson(http://www.dba-oracle.com/concepts/roles_security.htm):

  

Oracle角色有一些限制。特别是在编写PL / SQL代码时,无法使用通过Oracle角色授予的对象权限。编写PL / SQL代码时,必须直接授予代码访问的数据库中的对象。

如果您的用户通过应用程序或PL / SQL块发出UPDATE,则它将不使用基于角色的权限。如果是这种情况,您必须直接授予权限。

答案 2 :(得分:0)

这似乎不可能。 您确定您的用户连接到正确的数据库,架构并查询正确的表吗? 我惊呆了。

请尝试

select * from test_sch.hdr_detail 

与测试用户。