You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sentry.apache.org by ak...@apache.org on 2017/03/11 02:03:01 UTC

sentry git commit: SENTRY-1334: [column level privileges] test and add test for CTAS and Create View AS SELECT (cross databases cases) (Ke Jia, reviewed by Anne Yu)

Repository: sentry
Updated Branches:
  refs/heads/sentry-ha-redesign 86f67e606 -> b2121119b


SENTRY-1334: [column level privileges] test and add test for CTAS and Create View AS SELECT (cross databases cases) (Ke Jia, reviewed by Anne Yu)


Project: http://git-wip-us.apache.org/repos/asf/sentry/repo
Commit: http://git-wip-us.apache.org/repos/asf/sentry/commit/b2121119
Tree: http://git-wip-us.apache.org/repos/asf/sentry/tree/b2121119
Diff: http://git-wip-us.apache.org/repos/asf/sentry/diff/b2121119

Branch: refs/heads/sentry-ha-redesign
Commit: b2121119bee5b7b6d70080c5bf07ab77405d75da
Parents: 86f67e6
Author: Alexander Kolbasov <ak...@cloudera.com>
Authored: Fri Mar 10 18:02:50 2017 -0800
Committer: Alexander Kolbasov <ak...@cloudera.com>
Committed: Fri Mar 10 18:02:50 2017 -0800

----------------------------------------------------------------------
 .../e2e/dbprovider/TestColumnEndToEnd.java      | 62 ++++++++++++++++++++
 1 file changed, 62 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/sentry/blob/b2121119/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestColumnEndToEnd.java
----------------------------------------------------------------------
diff --git a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestColumnEndToEnd.java b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestColumnEndToEnd.java
index 22d4cf8..8c15257 100644
--- a/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestColumnEndToEnd.java
+++ b/sentry-tests/sentry-tests-hive/src/test/java/org/apache/sentry/tests/e2e/dbprovider/TestColumnEndToEnd.java
@@ -414,4 +414,66 @@ public class TestColumnEndToEnd extends AbstractTestWithStaticConfiguration {
     statement.close();
     connection.close();
   }
+
+  @Test
+  public void testCrossDbTableOperations() throws Exception {
+    //The privilege of user_role1 is used to test create table as select.
+    //The privilege of user_role2 is used to test create view as select.
+    Connection connection = context.createConnection(ADMIN1);
+    Statement statement = context.createStatement(connection);
+    statement.execute("CREATE database " + DB1);
+    statement.execute("CREATE database " + DB2);
+    statement.execute("use " + DB1);
+    statement.execute("CREATE ROLE user_role1");
+    statement.execute("CREATE ROLE user_role2");
+    statement.execute("CREATE TABLE tb1 (id int , name String)");
+    statement.execute("GRANT CREATE ON DATABASE db_1 TO ROLE user_role1");
+    statement.execute("GRANT CREATE ON DATABASE db_1 TO ROLE user_role2");
+    statement.execute("GRANT SELECT (id) ON TABLE tb1 TO ROLE user_role1");
+    statement.execute("GRANT SELECT  ON TABLE tb1 TO ROLE user_role2");
+    statement.execute("GRANT ROLE user_role1 TO GROUP " + USERGROUP1);
+    statement.execute("GRANT ROLE user_role2 TO GROUP " + USERGROUP2);
+    statement.execute("load data local inpath '" + dataFile.getPath() + "' into table db_1.tb1" );
+    statement.execute("use " + DB2);
+    statement.execute("CREATE TABLE tb2 (id int, num String)");
+    statement.execute("CREATE TABLE tb3 (id int, val String)");
+    statement.execute("GRANT SELECT (num) ON TABLE tb2 TO ROLE user_role1");
+    statement.execute("GRANT SELECT (val) ON TABLE tb3 TO ROLE user_role1");
+    statement.execute("GRANT SELECT  ON TABLE tb2 TO ROLE user_role2");
+    statement.execute("GRANT SELECT  ON TABLE tb3 TO ROLE user_role2");
+    statement.execute("GRANT ROLE user_role1 TO GROUP " + USERGROUP1);
+    statement.execute("GRANT ROLE user_role2 TO GROUP " + USERGROUP2);
+    statement.execute("load data local inpath '" + dataFile.getPath() + "' into table db_2.tb2" );
+    statement.execute("load data local inpath '" + dataFile.getPath() + "' into table db_2.tb3" );
+    statement.close();
+    connection.close();
+
+    connection =context.createConnection(USER1_1);
+    statement = context.createStatement(connection);
+    statement.execute("use " + DB1);
+    statement.execute("CREATE table db_1.t1 as select tb1.id, tb3.val, tb2.num from db_1.tb1,db_2.tb3,db_2.tb2");
+    statement.close();
+    connection.close();
+
+    connection =context.createConnection(USER2_1);
+    statement = context.createStatement(connection);
+    //The db_1.tb1 and db_2.tb3 is same with db_2.tb2.
+    ResultSet res = statement.executeQuery("select * from db_2.tb2 limit 2");
+    List<String> expectedResult = new ArrayList<String>();
+    List<String> returnedResult = new ArrayList<String>();
+    expectedResult.add("238");
+    expectedResult.add("86");
+    while(res.next()){
+      returnedResult.add(res.getString(1).trim());
+    }
+    validateReturnedResult(expectedResult, returnedResult);
+    expectedResult.clear();
+    returnedResult.clear();
+
+    statement.execute("use " + DB1);
+    statement.execute("CREATE VIEW db_1.v1 as select tb1.id, tb3.val, tb2.num from db_1.tb1,db_2.tb3,db_2.tb2");
+    statement.close();
+    connection.close();
+
+  }
 }