You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Swaroopa Kadam (Jira)" <ji...@apache.org> on 2020/03/16 03:23:00 UTC

[jira] [Updated] (PHOENIX-5750) Upsert on immutable table fails with AccessDeniedException

     [ https://issues.apache.org/jira/browse/PHOENIX-5750?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Swaroopa Kadam updated PHOENIX-5750:
------------------------------------
    Attachment:     (was: PHOENIX-5750.4.x.v1.patch)

> 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.15.0, 4.14.3
>            Reporter: Swaroopa Kadam
>            Assignee: Swaroopa Kadam
>            Priority: Major
>             Fix For: 5.1.0, 4.15.1
>
>         Attachments: PHOENIX-5750.4.x-HBase-1.3.v1.patch, PHOENIX-5750.4.x-HBase-1.3.v2.patch
>
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> {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)