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)