Derby
  1. Derby
  2. DERBY-1724

Executing grant statement within a transaction leads to a NPE later when the db owner attempts to update a table

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Duplicate
    • Affects Version/s: 10.2.1.6
    • Fix Version/s: 10.3.1.4
    • Component/s: SQL
    • Labels:
      None
    • Environment:
      Sun JDK 1.4.2
    • Urgency:
      Urgent

      Description

      Executing grant within a transaction leads to a NPE later when the db owner attempts to update a table. i.e.:

      ij version 10.2
      ij> connect 'test;create=true' user 'user1' as user1;
      WARNING 01J14: SQL authorization is being used without first enabling authentication.
      ij> connect 'test;create=true' user 'user2' as user2;
      WARNING 01J01: Database 'test' not created, connection made to existing database instead.
      WARNING 01J14: SQL authorization is being used without first enabling authentication.
      ij(USER2)> connect 'test;create=true' user 'user3' as user3;
      WARNING 01J01: Database 'test' not created, connection made to existing database instead.
      WARNING 01J14: SQL authorization is being used without first enabling authentication.
      ij(USER3)> set connection user1;
      ij(USER1)> create table t1001 (c varchar(1));
      0 rows inserted/updated/deleted
      ij(USER1)> insert into t1001 values 'a', 'b', 'c';
      3 rows inserted/updated/deleted
      ij(USER1)> autocommit off;
      ij(USER1)> grant select on t1001 to user3;
      0 rows inserted/updated/deleted
      ij(USER1)> set connection user2;
      ij(USER2)> create table ttt1 (i int);
      0 rows inserted/updated/deleted
      ij(USER2)> insert into ttt1 values 1;
      1 row inserted/updated/deleted
      ij(USER2)> set connection user1;
      ij(USER1)> select * from user2.ttt1;
      I
      -----------
      1

      1 row selected
      ij(USER1)> insert into user2.ttt1 values 2;
      1 row inserted/updated/deleted
      ij(USER1)> update user2.ttt1 set i = 888;
      ERROR XJ001: Java exception: ': java.lang.NullPointerException'.
      ij(USER1)> commit;
      ij(USER1)>

      derby.log:

      ----------------------------------------------------------------
      2006-08-18 09:08:42.234 GMT:
      Booting Derby version The Apache Software Foundation - Apache Derby - 10.2.1.0 beta - (430903): instance c013800d-010d-208a-11fd-000000146bf0
      on database directory C:\work3\derby\tests\derby-10.2.1.0\lib\test

      Database Class Loader started - derby.database.classpath=''
      2006-08-18 09:08:43.843 GMT Thread[main,5,main] (XID = 129), (SESSIONID = 0), (DATABASE = test), (DRDAID = null), Cleanup action starting
      2006-08-18 09:08:43.843 GMT Thread[main,5,main] (XID = 129), (SESSIONID = 0), (DATABASE = test), (DRDAID = null), Failed Statement is: update user2.ttt1 set i = 888
      java.lang.NullPointerException
      at org.apache.derby.impl.sql.compile.CompilerContextImpl.addRequiredColumnPriv(Unknown Source)
      at org.apache.derby.impl.sql.compile.ResultColumn.bindResultColumnByName(Unknown Source)
      at org.apache.derby.impl.sql.compile.ResultColumnList.bindResultColumnsByName(Unknown Source)
      at org.apache.derby.impl.sql.compile.ResultSetNode.bindResultColumns(Unknown Source)
      at org.apache.derby.impl.sql.compile.SelectNode.bindResultColumns(Unknown Source)
      at org.apache.derby.impl.sql.compile.UpdateNode.bind(Unknown Source)
      at org.apache.derby.impl.sql.GenericStatement.prepMinion(Unknown Source)
      at org.apache.derby.impl.sql.GenericStatement.prepare(Unknown Source)
      at org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext.prepareInternalStatement(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedStatement.execute(Unknown Source)
      at org.apache.derby.impl.tools.ij.ij.executeImmediate(Unknown Source)
      at org.apache.derby.impl.tools.ij.utilMain.doCatch(Unknown Source)
      at org.apache.derby.impl.tools.ij.utilMain.runScriptGuts(Unknown Source)
      at org.apache.derby.impl.tools.ij.utilMain.go(Unknown Source)
      at org.apache.derby.impl.tools.ij.Main.go(Unknown Source)
      at org.apache.derby.impl.tools.ij.Main.mainCore(Unknown Source)
      at org.apache.derby.impl.tools.ij.Main14.main(Unknown Source)
      at org.apache.derby.tools.ij.main(Unknown Source)
      Cleanup action completed

      2006-08-18 09:08:43.875 GMT:
      Shutting down instance c013800d-010d-208a-11fd-000000146bf0
      ----------------------------------------------------------------

      sysinfo:

      ------------------ Java Information ------------------
      Java Version: 1.4.2_12
      Java Vendor: Sun Microsystems Inc.
      Java home: C:\Program Files\Java\j2re1.4.2_12
      Java classpath: derby.jar;derbytools.jar
      OS name: Windows XP
      OS architecture: x86
      OS version: 5.1
      Java user name: Yip
      Java user home: C:\Documents and Settings\Yip
      Java user dir: C:\work3\derby\tests\derby-10.2.1.0\lib
      java.specification.name: Java Platform API Specification
      java.specification.version: 1.4
      --------- Derby Information --------
      JRE - JDBC: J2SE 1.4.2 - JDBC 3.0
      [C:\work3\derby\tests\derby-10.2.1.0\lib\derby.jar] 10.2.1.0 beta - (430903)
      [C:\work3\derby\tests\derby-10.2.1.0\lib\derbytools.jar] 10.2.1.0 beta - (430903)
      ------------------------------------------------------
      ----------------- Locale Information -----------------
      Current Locale : [English/United States [en_US]]
      Found support for locale: [de_DE]
      version: 10.2.1.0 - (430903)
      Found support for locale: [es]
      version: 10.2.1.0 - (430903)
      Found support for locale: [fr]
      version: 10.2.1.0 - (430903)
      Found support for locale: [it]
      version: 10.2.1.0 - (430903)
      Found support for locale: [ja_JP]
      version: 10.2.1.0 - (430903)
      Found support for locale: [ko_KR]
      version: 10.2.1.0 - (430903)
      Found support for locale: [pt_BR]
      version: 10.2.1.0 - (430903)
      Found support for locale: [zh_CN]
      version: 10.2.1.0 - (430903)
      Found support for locale: [zh_TW]
      version: 10.2.1.0 - (430903)
      ------------------------------------------------------

        Issue Links

          Activity

          Hide
          Rick Hillegas added a comment -

          Assign to 10.2 and bump urgency.

          Show
          Rick Hillegas added a comment - Assign to 10.2 and bump urgency.
          Hide
          Bryan Pendleton added a comment -

          Looks like the same NPE as in DERBY-1583 and DERBY-1754

          Show
          Bryan Pendleton added a comment - Looks like the same NPE as in DERBY-1583 and DERBY-1754
          Hide
          Bryan Pendleton added a comment -

          I believe that this bug is definitely a duplicate of DERBY-1583, so I'm marking it as such.

          There were some questions as to why it mattered, in this bug, whether the GRANT in the repro script was inside a transaction or not. The reason is that a GRANT is a DDL statement from the point of view of the DataDictionary, and when a DDL statement is in a transaction, it disables the DataDictionary cache for the duration of the transaction. Since cached ColumnDescriptor information could mask the DERBY-1583 bug, disabling the cache makes the bug conditions be exposed.

          I placed some additional background information about this in the wiki: http://wiki.apache.org/db-derby/DataDictionaryCaching

          Show
          Bryan Pendleton added a comment - I believe that this bug is definitely a duplicate of DERBY-1583 , so I'm marking it as such. There were some questions as to why it mattered, in this bug, whether the GRANT in the repro script was inside a transaction or not. The reason is that a GRANT is a DDL statement from the point of view of the DataDictionary, and when a DDL statement is in a transaction, it disables the DataDictionary cache for the duration of the transaction. Since cached ColumnDescriptor information could mask the DERBY-1583 bug, disabling the cache makes the bug conditions be exposed. I placed some additional background information about this in the wiki: http://wiki.apache.org/db-derby/DataDictionaryCaching
          Hide
          Andrew McIntyre added a comment -

          This issue has been resolved for over a year with no further movement. Closing.

          Show
          Andrew McIntyre added a comment - This issue has been resolved for over a year with no further movement. Closing.

            People

            • Assignee:
              Bryan Pendleton
              Reporter:
              Yip Ng
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development