DB2 - Problem description
| Problem IT07092 | Status: Closed |
REVOKE ROLE STATEMENT FAILS WITH SQL0901N IN ORACLE COMPAT WITH "SQLRI_DDL_COMMON: UNEXPECTED SQLCODE FOR DDL!". | |
| product: | |
DB2 FOR LUW / DB2FORLUW / A50 - DB2 | |
| Problem description: | |
A REVOKE ROLE operation will fail with an SQL0901N error in
ORACLE compatibility database with a reason "sqlri_ddl_common:
unexpected sqlcode for DDL!" message.
The error occurs when the
DBMS_STANDARD.DBMS_STANDARD_RAISE_APPLICATION procedure was
previously granted a permission to the role.
The problem is easily reproducible:
db2set DB2_COMPATIBILITY_VECTOR=ORA
db2 create db db105ora
db2 connect to db105ora user myuser1
db2 create role myrole1
db2 grant role myrole1 to user myuser2
db2 grant EXECUTE ON SPECIFIC PROCEDURE
SYSIBMADM.DBMS_STANDARD.DBMS_STANDARD_RAISE_APPLICATION_ERROR to
role myrole1
db2 grant EXECUTE ON SPECIFIC PROCEDURE
SYSIBMADM.DBMS_STANDARD.DBMS_STANDARD_RAISE_APPLICATION_ERROR to
user myuser2
db2 revoke role myrole1 from user myuser2
DB21034E The command was processed as an SQL statement because
it was not a
valid Command Line Processor command. During SQL processing it
returned:
SQL0901N The SQL statement or command failed because of a
database system
error. (Reason "sqlri_ddl_common: unexpected sqlcode for
DDL!".)
SQLSTATE=58004
The db2diag.log will contain entries similar to:
2015-02-11-09.37.57.873019-300 E2447E1584 LEVEL: Info
(Origin)
PID : 516 TID : 140736976643840 PROC :
db2sysc
INSTANCE: dsciaraf NODE : 000 DB :
DB105ORA
APPHDL : 0-7 APPID:
*LOCAL.dsciaraf.150211142508
AUTHID : DSCIARAF HOSTNAME: hotellnx108
EDUID : 18 EDUNAME: db2agent (DB105ORA)
FUNCTION: DB2 UDB, SW- common services, sqlnn_cmpl, probe:650
MESSAGE : ZRC=0x80040001=-2147221503=SQLD_NOREC "NO MORE RECORDS
FOUND ON FETCH"
DIA8000C An unexpected end of file was reached "".
DATA #1 : String, 62 bytes
An unexpected error was detected during statement compilation.
DATA #2 : Boolean, 1 bytes
false
DATA #3 : Boolean, 1 bytes
false
DATA #4 : Boolean, 1 bytes
true
DATA #5 : Boolean, 1 bytes
false
DATA #6 : Hex integer, 4 bytes
0x00000000
DATA #7 : SQLCA, PD_DB2_TYPE_SQLCA, 136 bytes
sqlcaid : SQLCA sqlcabc: 136 sqlcode: 100 sqlerrml: 0
sqlerrmc:
sqlerrp : SQLRL5A4
sqlerrd : (1) 0x80040001 (2) 0x00000001 (3)
0x00000000
(4) 0x00000000 (5) 0x00000000 (6)
0x00000000
sqlwarn : (1) (2) (3) (4) (5) (6)
(7) (8) (9) (10) (11)
sqlstate:
DATA #8 : Hex integer, 4 bytes
0x00000040
DATA #9 : String with size, 40 bytes
revoke role daverole1 from user dsciara2
DATA #10: String, 161 bytes
Compiler error stack for rc = -2147221503:
sqlnn_cmpl[300]
sqlnp_main[250]
sqlnp_parser[510]
sqlnp_smactn[100]
sqlnq_auth_role_stmt[120]
sqlnq_auth_stmt_end[50]
In retrospect, the ability to GRANT and REVOKE privileges from
routines within an oracle module does not really make sense, and
instead privileges should be GRANTED and REVOKED only to the
module itself. | |
| Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * All * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description * **************************************************************** * RECOMMENDATION: * * Upgrade to inclusive fixpack. * **************************************************************** | |
| Local Fix: | |
Revoke EXECUTE permission on SYSIBMADM.DBMS_STANDARD.DBMS_STANDARD_RAISE_APPLICATION_ERROR, and then try to revoke the role. | |
| Solution | |
| Workaround | |
not known / see Local fix | |
| Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 11.02.2015 22.01.2016 22.01.2016 |
| Problem solved at the following versions (IBM BugInfos) | |
| Problem solved according to the fixlist(s) of the following version(s) | |
| 10.5.0.7 |
|