在我的oracle DB中,我有一个名为test
的用户,该用户在数据库中有DML_ROLE
。并且,我在名为DML_ROLE
的表上提供了对hdr_detail
的插入/更新/删除/选择访问权限。
但是,当用户test
在hdr_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
请帮我解决这个问题。如果需要有关此问题的更多信息,请在评论中回复。
答案 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
与测试用户。