Swaroopa Kadam created PHOENIX-5750:
---------------------------------------

             Summary: Upsert on immutable table fails with AccessDeniedException
                 Key: PHOENIX-5750
                 URL: https://issues.apache.org/jira/browse/PHOENIX-5750
             Project: Phoenix
          Issue Type: Bug
    Affects Versions: 4.14.3, 4.15.0
            Reporter: Swaroopa Kadam
            Assignee: Swaroopa Kadam
             Fix For: 5.1.0, 4.15.1


{code:java}
// code placeholder
In TableDDLPermissionsIT

@Test
public void testUpsertIntoImmutableTable() throws Throwable {
    startNewMiniCluster();
    final String schema = "TEST_INDEX_VIEW";
    final String tableName = "TABLE_DDL_PERMISSION_IT";
    final String phoenixTableName = schema + "." + tableName;
    grantSystemTableAccess();
    try {
        superUser1.runAs(new PrivilegedExceptionAction<Void>() {
            @Override
            public Void run() throws Exception {
                try {
                    verifyAllowed(createSchema(schema), superUser1);
                    verifyAllowed(onlyCreateTable(phoenixTableName), 
superUser1);
                } catch (Throwable e) {
                    if (e instanceof Exception) {
                        throw (Exception)e;
                    } else {
                        throw new Exception(e);
                    }
                }
                return null;
            }
        });

        if (isNamespaceMapped) {
            grantPermissions(unprivilegedUser.getShortName(), schema, 
Action.WRITE, Action.READ,Action.EXEC);
        }

        // we should be able to read the data from another index as well to 
which we have not given any access to
        // this user
        verifyAllowed(upsertRowsIntoTable(phoenixTableName), unprivilegedUser);
    } finally {
        revokeAll();
    }
}



in BasePermissionsIT:
AccessTestAction onlyCreateTable(final String tableName) throws SQLException {
    return new AccessTestAction() {
        @Override
        public Object run() throws Exception {
            try (Connection conn = getConnection(); Statement stmt = 
conn.createStatement()) {
                assertFalse(stmt.execute("CREATE IMMUTABLE TABLE " + tableName
                        + "(pk INTEGER not null primary key, data VARCHAR, val 
integer)"));
            }
            return null;
        }
    };
}

AccessTestAction upsertRowsIntoTable(final String tableName) throws 
SQLException {
    return new AccessTestAction() {
        @Override
        public Object run() throws Exception {
            try (Connection conn = getConnection()) {
                try (PreparedStatement pstmt = conn.prepareStatement(
                        "UPSERT INTO " + tableName + " values(?, ?, ?)")) {
                    for (int i = 0; i < NUM_RECORDS; i++) {
                        pstmt.setInt(1, i);
                        pstmt.setString(2, Integer.toString(i));
                        pstmt.setInt(3, i);
                        assertEquals(1, pstmt.executeUpdate());
                    }
                }
                conn.commit();
            }
            return null;
        }
    };
}{code}
 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to