Uploaded image for project: 'Derby'
  1. Derby
  2. DERBY-1686

Grant/Revoke: Attempt to GRANT access to another user on a VIEW, created by the current user with only SELECT privilege on the base table does not fail

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 10.2.1.6
    • 10.2.1.6, 10.3.1.4
    • SQL
    • None
    • Any
    • Urgent

    Description

      With authentication on, attempting to execute a GRANT privilege to 'user3' on a VIEW created by the 'user2' - who has only SELECT privilege
      on the base table created by 'user1' does not fail. This results in 'user3' getting access to the table created by 'user1' through the view.

      I remember a discussion on the list to raise an error when an attempt is execute a GRANT on the view, until WITH GRANT option is implemented.

      Here is the repro:

      java -cp derby.jar;.\derbytools.jar -Dderby.database.sqlAuthorization=true -Dij.exceptionTrace=true org.apache.derby.tools.ij select_table_no_privilege.sql
      ij version 10.2
      ij> –
      --create db as user1

      connect 'jdbc:derby:grntrevokedb;create=true' user 'user1';
      WARNING 01J14: SQL authorization is being used without first enabling authentication.
      ij> create table t1(id int);
      0 rows inserted/updated/deleted
      ij> insert into t1 values(100);
      1 row inserted/updated/deleted
      ij> insert into t1 values(200);
      1 row inserted/updated/deleted
      ij> –
      --Grant select to user2

      grant select on t1 to user2;
      0 rows inserted/updated/deleted
      ij> –
      --Connect as user2

      connect 'jdbc:derby:grntrevokedb;create=true' user 'user2';
      WARNING 01J01: Database 'grntrevokedb' not created, connection made to existingdatabase instead.
      WARNING 01J14: SQL authorization is being used without first enabling authentication.
      ij(CONNECTION1)> select * from user1.t1;
      ID
      -----------
      100
      200

      2 rows selected
      ij(CONNECTION1)> –
      --Create view

      create view v1 as select * from user1.t1;
      0 rows inserted/updated/deleted
      ij(CONNECTION1)> select * from v1;
      ID
      -----------
      100
      200

      2 rows selected
      ij(CONNECTION1)> –
      --Grant select on view to user3. With the WITH GRANT option this should have failed

      grant select on v1 to user3;
      0 rows inserted/updated/deleted
      ij(CONNECTION1)> –
      --Connect as user3

      connect 'jdbc:derby:grntrevokedb;create=true' user 'user3';
      WARNING 01J01: Database 'grntrevokedb' not created, connection made to existing
      database instead.
      WARNING 01J14: SQL authorization is being used without first enabling authentication.
      ij(CONNECTION2)> –
      --No select privilege on base table user1.t1, hence will FAIL

      select * from user1.t1;
      ERROR 28508: User 'USER3' does not have select permission on column 'ID' of table 'USER1'.'T1'.
      ERROR 28508: User 'USER3' does not have select permission on column 'ID' of table 'USER1'.'T1'.
      at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
      at org.apache.derby.iapi.sql.dictionary.StatementColumnPermission.check(Unknown Source)
      at org.apache.derby.impl.sql.conn.GenericAuthorizer.authorize(Unknown Source)
      at org.apache.derby.exe.ac295dc08bx010dx00a2x500ax00000011df100.fillResultSet(Unknown Source)
      at org.apache.derby.exe.ac295dc08bx010dx00a2x500ax00000011df100.execute(Unknown Source)
      at org.apache.derby.impl.sql.GenericActivationHolder.execute(Unknown Source)
      at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown Source)
      at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(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)
      ij(CONNECTION2)> –
      --Select from the view on the base table should also FAIL, but does not

      select * from user2.v1;
      ID
      -----------
      100
      200

      2 rows selected
      ij(CONNECTION2)>

      Attachments

        1. ASF.LICENSE.NOT.GRANTED--select_table_no_privilege.sql
          0.8 kB
          Rajesh Kartha
        2. derby1686-trunk-diff01.txt
          9 kB
          Yip Ng
        3. derby1686-trunk-diff02.txt
          26 kB
          Yip Ng
        4. derby1686-trunk-diff03.txt
          26 kB
          Yip Ng
        5. derby1686-trunk-diff04.txt
          26 kB
          Yip Ng
        6. derby1686-trunk-diff05.txt
          30 kB
          Yip Ng
        7. derby1686-trunk-diff06.txt
          30 kB
          Yip Ng
        8. derby1686-trunk-diff07.txt
          31 kB
          Yip Ng
        9. derby1686-trunk-stat01.txt
          0.3 kB
          Yip Ng
        10. derby1686-trunk-stat02.txt
          0.5 kB
          Yip Ng
        11. derby1686-trunk-stat03.txt
          0.5 kB
          Yip Ng
        12. derby1686-trunk-stat04.txt
          0.5 kB
          Yip Ng
        13. derby1686-trunk-stat05.txt
          0.8 kB
          Yip Ng
        14. derby1686-trunk-stat06.txt
          0.8 kB
          Yip Ng
        15. derby1686-trunk-stat07.txt
          0.8 kB
          Yip Ng

        Issue Links

          Activity

            People

              yipng Yip Ng
              kartha Rajesh Kartha
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: