diff --git a/README.md b/README.md
index afb133a..7152e9b 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-access
+Sentry
 ======
 
-Access Server
\ No newline at end of file
+Sentry Authorization
diff --git a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestHiveAuthzConf.java b/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestHiveAuthzConf.java
deleted file mode 100644
index e17822e..0000000
--- a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestHiveAuthzConf.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.access.binding.hive;
-
-import org.apache.access.binding.hive.conf.HiveAuthzConf;
-import org.apache.access.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.google.common.io.Resources;
-
-public class TestHiveAuthzConf {
-  private HiveAuthzConf authzConf;
-
-  @Before
-  public void setUp() {
-    authzConf =  new HiveAuthzConf(Resources.getResource("access-site.xml"));
-  }
-
-  @Test
-  public void testConfig() {
-    Assert.assertEquals("org.apache.access.provider.file.fooProvider",
-        authzConf.get(AuthzConfVars.AUTHZ_PROVIDER.getVar()));
-  }
-
-  @Test
-  public void testConfigOverload() {
-    authzConf.set(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE.getVar(), "fooFile");
-    Assert.assertEquals("fooFile",
-        authzConf.get(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE.getVar()));
-  }
-}
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPerDBConfiguration.java b/access-tests/src/test/java/org/apache/access/tests/e2e/TestPerDBConfiguration.java
deleted file mode 100644
index 17ab997..0000000
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPerDBConfiguration.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.access.tests.e2e;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-
-import junit.framework.Assert;
-
-import org.junit.After;
-import org.junit.Test;
-
-import com.google.common.base.Charsets;
-import com.google.common.base.Joiner;
-import com.google.common.io.Files;
-import com.google.common.io.Resources;
-
-/**
- * Test privileges per database policy files
- */
-public class TestPerDBConfiguration extends AbstractTestWithStaticLocalFS {
-  private static final String MULTI_TYPE_DATA_FILE_NAME = "emp.dat";
-  private static final String DB2_POLICY_FILE = "db2-policy-file.ini";
-
-  private Context context;
-
-  @After
-  public void teardown() throws Exception {
-    if (context != null) {
-      context.close();
-    }
-  }
-
-  @Test
-  public void testPerDB() throws Exception {
-    context = createContext();
-    File policyFile = context.getPolicyFile();
-    File db2PolicyFile = new File(policyFile.getParent(), DB2_POLICY_FILE);
-    File dataDir = context.getDataDir();
-    //copy data file to test dir
-    File dataFile = new File(dataDir, MULTI_TYPE_DATA_FILE_NAME);
-    FileOutputStream to = new FileOutputStream(dataFile);
-    Resources.copy(Resources.getResource(MULTI_TYPE_DATA_FILE_NAME), to);
-    to.close();
-    //delete existing policy file; create new policy file
-    assertTrue("Could not delete " + policyFile, context.deletePolicyFile());
-    assertTrue("Could not delete " + db2PolicyFile,!db2PolicyFile.exists() || db2PolicyFile.delete());
-
-    String[] policyFileContents = {
-        // groups : role -> group
-        "[groups]",
-        "admin = all_server",
-        "user_group1 = select_tbl1",
-        "user_group2 = select_tbl2",
-        // roles: privileges -> role
-        "[roles]",
-        "all_server = server=server1",
-        "select_tbl1 = server=server1->db=db1->table=tbl1->action=select",
-        // users: users -> groups
-        "[users]",
-        "hive = admin",
-        "user_1 = user_group1",
-        "user_2 = user_group2",
-        "[databases]",
-        "db2 = " + db2PolicyFile.getPath(),
-    };
-    context.makeNewPolicy(policyFileContents);
-
-    String[] db2PolicyFileContents = {
-        "[groups]",
-        "user_group2 = select_tbl2",
-        "[roles]",
-        "select_tbl2 = server=server1->db=db2->table=tbl2->action=select"
-    };
-    Files.write(Joiner.on("\n").join(db2PolicyFileContents), db2PolicyFile, Charsets.UTF_8);
-
-    // setup db objects needed by the test
-    Connection connection = context.createConnection("hive", "hive");
-    Statement statement = context.createStatement(connection);
-
-    statement.execute("DROP DATABASE IF EXISTS db1 CASCADE");
-    statement.execute("DROP DATABASE IF EXISTS db2 CASCADE");
-    statement.execute("CREATE DATABASE db1");
-    statement.execute("USE db1");
-    statement.execute("CREATE TABLE tbl1(B INT, A STRING) " +
-                      " row format delimited fields terminated by '|'  stored as textfile");
-    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl1");
-    statement.execute("DROP DATABASE IF EXISTS db2 CASCADE");
-    statement.execute("CREATE DATABASE db2");
-    statement.execute("USE db2");
-    statement.execute("CREATE TABLE tbl2(B INT, A STRING) " +
-                      " row format delimited fields terminated by '|'  stored as textfile");
-    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl2");
-    statement.close();
-    connection.close();
-
-    // test execution
-    connection = context.createConnection("user_1", "password");
-    statement = context.createStatement(connection);
-    statement.execute("USE db1");
-    // test user1 can execute query on tbl1
-    verifyCount(statement, "SELECT COUNT(*) FROM tbl1");
-
-    // user1 cannot query db2.tbl2
-    context.assertAuthzException(statement, "USE db2");
-    context.assertAuthzException(statement, "SELECT COUNT(*) FROM db2.tbl2");
-    statement.close();
-    connection.close();
-
-    // test per-db file for db2
-
-    connection = context.createConnection("user_2", "password");
-    statement = context.createStatement(connection);
-    statement.execute("USE db2");
-    // test user2 can execute query on tbl2
-    verifyCount(statement, "SELECT COUNT(*) FROM tbl2");
-
-    // user2 cannot query db1.tbl1
-    context.assertAuthzException(statement, "SELECT COUNT(*) FROM db1.tbl1");
-    context.assertAuthzException(statement, "USE db1");
-
-    statement.close();
-    connection.close();
-
-    //test cleanup
-    connection = context.createConnection("hive", "hive");
-    statement = context.createStatement(connection);
-    statement.execute("DROP DATABASE db1 CASCADE");
-    statement.execute("DROP DATABASE db2 CASCADE");
-    statement.close();
-    connection.close();
-  }
-  private void verifyCount(Statement statement, String query) throws SQLException {
-    ResultSet resultSet = statement.executeQuery(query);
-    int count = 0;
-    int countRows = 0;
-
-    while (resultSet.next()) {
-      count = resultSet.getInt(1);
-      countRows++;
-    }
-    assertTrue("Incorrect row count", countRows == 1);
-    assertTrue("Incorrect result", count == 12);
-  }
-}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 37bc597..0378382 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <version>4.4.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>access</artifactId>
+  <artifactId>sentry</artifactId>
   <version>1.1.0-SNAPSHOT</version>
   <description>Access component</description>
   <name>Access</name>
@@ -65,11 +65,25 @@
     <guava.version>11.0.2</guava.version>
     <shiro.version>1.2.1</shiro.version>
     <slf4j.version>1.6.1</slf4j.version>
+    <derby.version>10.4.2.0</derby.version>
+    <libthrift.version>0.9.0-cdh4-1</libthrift.version>
   </properties>
 
   <dependencyManagement>
     <dependencies>
       <dependency>
+        <groupId>org.apache.derby</groupId>
+        <artifactId>derby</artifactId>
+        <version>${derby.version}</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.thrift</groupId>
+        <artifactId>libthrift</artifactId>
+        <version>${libthrift.version}</version>
+        <scope>provided</scope>
+      </dependency>
+      <dependency>
         <groupId>org.apache.hive</groupId>
         <artifactId>hive-common</artifactId>
         <version>${hive.version}</version>
@@ -142,7 +156,7 @@
       </dependency>
       <dependency>
         <groupId>com.cloudera.cdh</groupId>
-        <artifactId>access-core</artifactId>
+        <artifactId>sentry-core</artifactId>
         <version>${project.version}</version>
       </dependency>
       <dependency>
@@ -219,30 +233,30 @@
       </dependency>
       <dependency>
         <groupId>com.cloudera.cdh</groupId>
-        <artifactId>access-binding-hive</artifactId>
+        <artifactId>sentry-binding-hive</artifactId>
         <version>${project.version}</version>
         <scope>test</scope>
        </dependency>
       <dependency>
         <groupId>com.cloudera.cdh</groupId>
-        <artifactId>access-provider-file</artifactId>
+        <artifactId>sentry-provider-file</artifactId>
         <version>${project.version}</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>com.cloudera.cdh</groupId>
-        <artifactId>access-dist</artifactId>
+        <artifactId>sentry-dist</artifactId>
         <version>${project.version}</version>
       </dependency>
     </dependencies>
   </dependencyManagement>
 
   <modules>
-    <module>access-core</module>
-    <module>access-binding</module>
-    <module>access-provider</module>
-    <module>access-tests</module>
-    <module>access-dist</module>
+    <module>sentry-core</module>
+    <module>sentry-binding</module>
+    <module>sentry-provider</module>
+    <module>sentry-tests</module>
+    <module>sentry-dist</module>
   </modules>
 
   <build>
diff --git a/access-binding/pom.xml b/sentry-binding/pom.xml
similarity index 91%
rename from access-binding/pom.xml
rename to sentry-binding/pom.xml
index 6a1779a..d771d36 100644
--- a/access-binding/pom.xml
+++ b/sentry-binding/pom.xml
@@ -20,17 +20,17 @@
 
   <parent>
     <groupId>com.cloudera.cdh</groupId>
-    <artifactId>access</artifactId>
+    <artifactId>sentry</artifactId>
     <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <groupId>com.cloudera.cdh</groupId>
-  <artifactId>access-binding</artifactId>
+  <artifactId>sentry-binding</artifactId>
   <name>Access Bindings</name>
   <packaging>pom</packaging>
 
   <modules>
-    <module>access-binding-hive</module>
+    <module>sentry-binding-hive</module>
   </modules>
 
 </project>
diff --git a/access-binding/access-binding-hive/pom.xml b/sentry-binding/sentry-binding-hive/pom.xml
similarity index 77%
rename from access-binding/access-binding-hive/pom.xml
rename to sentry-binding/sentry-binding-hive/pom.xml
index 5874799..03a68c1 100644
--- a/access-binding/access-binding-hive/pom.xml
+++ b/sentry-binding/sentry-binding-hive/pom.xml
@@ -21,15 +21,31 @@
 
   <parent>
     <groupId>com.cloudera.cdh</groupId>
-    <artifactId>access-binding</artifactId>
+    <artifactId>sentry-binding</artifactId>
     <version>1.1.0-SNAPSHOT</version>
   </parent>
 
-  <artifactId>access-binding-hive</artifactId>
+  <artifactId>sentry-binding-hive</artifactId>
   <name>Access Binding for Hive</name>
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.thrift</groupId>
+      <artifactId>libthrift</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.derby</groupId>
+      <artifactId>derby</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.thrift</groupId>
+      <artifactId>libthrift</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.derby</groupId>
+      <artifactId>derby</artifactId>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>
@@ -48,11 +64,11 @@
     </dependency>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-core</artifactId>
+      <artifactId>sentry-core</artifactId>
     </dependency>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-provider-file</artifactId>
+      <artifactId>sentry-provider-file</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/sentry-binding/sentry-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingSessionHook.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingSessionHook.java
new file mode 100644
index 0000000..fefe18f
--- /dev/null
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingSessionHook.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.access.binding.hive;
+
+import org.apache.hive.service.cli.HiveSQLException;
+import org.apache.hive.service.cli.session.HiveSessionHookContext;
+
+/**
+ * The session hook wrapper for backward compatibility
+ */
+public class HiveAuthzBindingSessionHook
+    implements org.apache.hive.service.cli.session.HiveSessionHook {
+
+  private org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook underlyingHook;
+  public HiveAuthzBindingSessionHook() {
+    underlyingHook = new org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook();
+  }
+  @Override
+  public void run(HiveSessionHookContext sessionHookContext) throws HiveSQLException {
+    underlyingHook.run(sessionHookContext);
+  }
+
+}
diff --git a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingHook.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingHook.java
similarity index 86%
rename from access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingHook.java
rename to sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingHook.java
index 681f3aa..89c7c65 100644
--- a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingHook.java
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingHook.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive;
+package org.apache.sentry.binding.hive;
 
 import static org.apache.hadoop.hive.metastore.MetaStoreUtils.DEFAULT_DATABASE_NAME;
 
@@ -29,19 +29,6 @@
 import java.util.List;
 import java.util.Set;
 
-import org.apache.access.binding.hive.authz.HiveAuthzBinding;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges.HiveOperationScope;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges.HiveOperationType;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivilegesMap;
-import org.apache.access.binding.hive.conf.HiveAuthzConf;
-import org.apache.access.core.AccessURI;
-import org.apache.access.core.Action;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Authorizable.AuthorizableType;
-import org.apache.access.core.Database;
-import org.apache.access.core.Subject;
-import org.apache.access.core.Table;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.ql.HiveDriverFilterHook;
@@ -51,6 +38,7 @@
 import org.apache.hadoop.hive.ql.exec.Task;
 import org.apache.hadoop.hive.ql.hooks.Entity;
 import org.apache.hadoop.hive.ql.hooks.Entity.Type;
+import org.apache.hadoop.hive.ql.hooks.Hook;
 import org.apache.hadoop.hive.ql.hooks.ReadEntity;
 import org.apache.hadoop.hive.ql.hooks.WriteEntity;
 import org.apache.hadoop.hive.ql.metadata.AuthorizationException;
@@ -64,6 +52,20 @@
 import org.apache.hadoop.hive.ql.parse.SemanticException;
 import org.apache.hadoop.hive.ql.plan.HiveOperation;
 import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.sentry.binding.hive.authz.HiveAuthzBinding;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivilegesMap;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges.HiveOperationScope;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges.HiveOperationType;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Action;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Subject;
+import org.apache.sentry.core.Table;
+import org.apache.hadoop.hive.common.JavaUtils;
+import org.apache.sentry.core.Authorizable.AuthorizableType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -84,6 +86,7 @@
 
   public HiveAuthzBindingHook() throws Exception {
     SessionState session = SessionState.get();
+    boolean depreicatedConfigFile = false;
     if(session == null) {
       throw new IllegalStateException("Session has not been started");
     }
@@ -91,16 +94,26 @@
     if(hiveConf == null) {
       throw new IllegalStateException("Session HiveConf is null");
     }
-    String hiveAuthzConf = hiveConf.get(HiveAuthzConf.HIVE_ACCESS_CONF_URL);
+    String hiveAuthzConf = hiveConf.get(HiveAuthzConf.HIVE_SENTRY_CONF_URL);
     if(hiveAuthzConf == null || (hiveAuthzConf = hiveAuthzConf.trim()).isEmpty()) {
-      throw new IllegalArgumentException("Configuration key " + HiveAuthzConf.HIVE_ACCESS_CONF_URL
+      hiveAuthzConf = hiveConf.get(HiveAuthzConf.HIVE_ACCESS_CONF_URL);
+      depreicatedConfigFile = true;
+    }
+
+    if(hiveAuthzConf == null || (hiveAuthzConf = hiveAuthzConf.trim()).isEmpty()) {
+      throw new IllegalArgumentException("Configuration key " + HiveAuthzConf.HIVE_SENTRY_CONF_URL
           + " value '" + hiveAuthzConf + "' is invalid.");
     }
     try {
       authzConf = new HiveAuthzConf(new URL(hiveAuthzConf));
     } catch (MalformedURLException e) {
-      throw new IllegalArgumentException("Configuration key " + HiveAuthzConf.HIVE_ACCESS_CONF_URL
-          + " specifies a malformed URL '" + hiveAuthzConf + "'", e);
+      if (depreicatedConfigFile) {
+        throw new IllegalArgumentException("Configuration key " + HiveAuthzConf.HIVE_ACCESS_CONF_URL
+            + " specifies a malformed URL '" + hiveAuthzConf + "'", e);
+      } else {
+        throw new IllegalArgumentException("Configuration key " + HiveAuthzConf.HIVE_SENTRY_CONF_URL
+            + " specifies a malformed URL '" + hiveAuthzConf + "'", e);
+      }
     }
     hiveAuthzBinding = new HiveAuthzBinding(hiveConf, authzConf);
   }
@@ -270,11 +283,27 @@
     try {
       authorizeWithHiveBindings(context, stmtAuthObject, stmtOperation);
     } catch (AuthorizationException e) {
+      executeOnFailureHooks(context, e);
       throw new SemanticException("No valid privileges", e);
     }
     hiveAuthzBinding.set(context.getConf());
   }
 
+  private void executeOnFailureHooks(HiveSemanticAnalyzerHookContext context,
+      AuthorizationException e) {
+    SentryOnFailureHookContext hookCtx = new SentryOnFailureHookContextImpl(
+        context.getCommand(), context.getInputs(), context.getOutputs(),
+        currDB, currTab, udfURI, partitionURI, context.getUserName(),
+        context.getIpAddress(), e);
+    try {
+      for (Hook aofh : getHooks(HiveAuthzConf.AuthzConfVars.AUTHZ_ONFAILURE_HOOKS)) {
+        ((SentryOnFailureHook)aofh).run(hookCtx);
+      }
+    } catch (Exception ex) {
+      LOG.error("Error executing hook:", ex);
+    }
+  }
+
   /**
    * Convert the input/output entities into authorizables. generate
    * authorizables for cases like Database and metadata operations where the
@@ -626,4 +655,57 @@
       return false;
     }
   }
+
+  /**
+   * Returns a set of hooks specified in a configuration variable.
+   *
+   * See getHooks(HiveAuthzConf.AuthzConfVars hookConfVar, Class<T> clazz)
+   * @param hookConfVar
+   * @return
+   * @throws Exception
+   */
+  private List<Hook> getHooks(HiveAuthzConf.AuthzConfVars hookConfVar) throws Exception {
+    return getHooks(hookConfVar, Hook.class);
+  }
+
+  /**
+   * Returns the hooks specified in a configuration variable.  The hooks are returned in a list in
+   * the order they were specified in the configuration variable.
+   *
+   * @param hookConfVar The configuration variable specifying a comma separated list of the hook
+   *                    class names.
+   * @param clazz       The super type of the hooks.
+   * @return            A list of the hooks cast as the type specified in clazz, in the order
+   *                    they are listed in the value of hookConfVar
+   * @throws Exception
+   */
+  private <T extends Hook> List<T> getHooks(HiveAuthzConf.AuthzConfVars hookConfVar, Class<T> clazz)
+      throws Exception {
+
+    List<T> hooks = new ArrayList<T>();
+    String csHooks = authzConf.get(hookConfVar.getVar(), "");
+    if (csHooks == null) {
+      return hooks;
+    }
+
+    csHooks = csHooks.trim();
+    if (csHooks.equals("")) {
+      return hooks;
+    }
+
+    String[] hookClasses = csHooks.split(",");
+
+    for (String hookClass : hookClasses) {
+      try {
+        T hook =
+            (T) Class.forName(hookClass.trim(), true, JavaUtils.getClassLoader()).newInstance();
+        hooks.add(hook);
+      } catch (ClassNotFoundException e) {
+        LOG.error(hookConfVar.getVar() + " Class not found:" + e.getMessage());
+        throw e;
+      }
+    }
+
+    return hooks;
+  }
 }
diff --git a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingPreExecHook.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingPreExecHook.java
similarity index 89%
rename from access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingPreExecHook.java
rename to sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingPreExecHook.java
index 6e07818..28812c5 100644
--- a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingPreExecHook.java
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingPreExecHook.java
@@ -14,20 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive;
+package org.apache.sentry.binding.hive;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.access.binding.hive.authz.HiveAuthzBinding;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges.HiveExtendedOperation;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivilegesMap;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Subject;
 import org.apache.hadoop.hive.ql.QueryPlan;
 import org.apache.hadoop.hive.ql.hooks.ExecuteWithHookContext;
 import org.apache.hadoop.hive.ql.hooks.HookContext;
 import org.apache.hadoop.hive.ql.plan.HiveOperation;
+import org.apache.sentry.binding.hive.authz.HiveAuthzBinding;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivilegesMap;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges.HiveExtendedOperation;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Subject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingSessionHook.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingSessionHook.java
similarity index 81%
rename from access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingSessionHook.java
rename to sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingSessionHook.java
index be334dd..f584b9b 100644
--- a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/HiveAuthzBindingSessionHook.java
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/HiveAuthzBindingSessionHook.java
@@ -14,23 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive;
+package org.apache.sentry.binding.hive;
 
-import org.apache.access.binding.hive.conf.HiveAuthzConf;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hive.service.cli.HiveSQLException;
 import org.apache.hive.service.cli.session.HiveSessionHookContext;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
 
 public class HiveAuthzBindingSessionHook
     implements org.apache.hive.service.cli.session.HiveSessionHook {
 
   public static final String SEMANTIC_HOOK =
-    "org.apache.access.binding.hive.HiveAuthzBindingHook";
+    "org.apache.sentry.binding.hive.HiveAuthzBindingHook";
   public static final String PRE_EXEC_HOOK =
-    "org.apache.access.binding.hive.HiveAuthzBindingPreExecHook";
+    "org.apache.sentry.binding.hive.HiveAuthzBindingPreExecHook";
   public static final String FILTER_HOOK =
-    "org.apache.access.binding.hive.HiveAuthzBindingHook";
+    "org.apache.sentry.binding.hive.HiveAuthzBindingHook";
   public static final String SCRATCH_DIR_PERMISSIONS = "700";
   public static final String ACCESS_RESTRICT_LIST =
     ConfVars.SEMANTIC_ANALYZER_HOOK.varname + "," +
@@ -48,11 +48,13 @@
     ConfVars.HIVESTATSDBCONNECTIONSTRING.varname + "," +
     ConfVars.SCRATCHDIRPERMISSION.varname + "," +
     HiveAuthzConf.HIVE_ACCESS_CONF_URL + "," +
-    HiveAuthzConf.HIVE_ACCESS_SUBJECT_NAME;
+    HiveAuthzConf.HIVE_SENTRY_CONF_URL + "," +
+    HiveAuthzConf.HIVE_ACCESS_SUBJECT_NAME + "," +
+    HiveAuthzConf.HIVE_SENTRY_SUBJECT_NAME;
 
   /**
-   * The session hook for access authorization that sets the required session level configuration
-   * 1. Setup the access hooks -
+   * The session hook for sentry authorization that sets the required session level configuration
+   * 1. Setup the sentry hooks -
    *    semantic, exec and filter hooks
    * 2. Set additional config properties required for auth
    *      set HIVE_EXTENDED_ENITITY_CAPTURE = true
@@ -62,7 +64,7 @@
    */
   @Override
   public void run(HiveSessionHookContext sessionHookContext) throws HiveSQLException {
-    // Add access hooks to the session configuration
+    // Add sentry hooks to the session configuration
     HiveConf sessionConf = sessionHookContext.getSessionConf();
 
     appendConfVar(sessionConf, ConfVars.SEMANTIC_ANALYZER_HOOK, SEMANTIC_HOOK);
@@ -76,18 +78,19 @@
 
     // set user name
     sessionConf.set(HiveAuthzConf.HIVE_ACCESS_SUBJECT_NAME, sessionHookContext.getSessionUser());
+    sessionConf.set(HiveAuthzConf.HIVE_SENTRY_SUBJECT_NAME, sessionHookContext.getSessionUser());
 
     // setup restrict list
     sessionConf.addToRestrictList(ACCESS_RESTRICT_LIST);
   }
 
-  // Setup given access hooks
-  private void appendConfVar(HiveConf sessionConf, ConfVars confVar, String accessConfVal) {
+  // Setup given sentry hooks
+  private void appendConfVar(HiveConf sessionConf, ConfVars confVar, String sentryConfVal) {
     String currentValue = sessionConf.getVar(confVar);
     if ((currentValue == null) || currentValue.isEmpty()) {
-      currentValue = accessConfVal;
+      currentValue = sentryConfVal;
     } else {
-      currentValue = accessConfVal + "," + currentValue;
+      currentValue = sentryConfVal + "," + currentValue;
     }
     sessionConf.setVar(confVar, currentValue);
   }
diff --git a/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHook.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHook.java
new file mode 100644
index 0000000..45a2925
--- /dev/null
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHook.java
@@ -0,0 +1,38 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sentry.binding.hive;
+
+import org.apache.hadoop.hive.ql.hooks.Hook;
+
+/**
+ *
+ * SentryOnFailureHook allows Sentry to be extended
+ * with custom logic to be executed upon authorization failure.
+ *
+ */
+public interface SentryOnFailureHook extends Hook {
+
+  /**
+   *
+   * @param context
+   *     The hook context passed to each hook.
+   * @throws Exception
+   */
+  void run(SentryOnFailureHookContext context) throws Exception;
+}
diff --git a/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHookContext.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHookContext.java
new file mode 100644
index 0000000..3b179e6
--- /dev/null
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHookContext.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sentry.binding.hive;
+
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Table;
+import org.apache.hadoop.hive.ql.exec.Task;
+import org.apache.hadoop.hive.ql.hooks.ReadEntity;
+import org.apache.hadoop.hive.ql.hooks.WriteEntity;
+import org.apache.hadoop.hive.ql.metadata.AuthorizationException;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Context information provided by Access to implementations
+ * of AccessOnFailureHook
+ */
+public interface SentryOnFailureHookContext  {
+
+  /**
+   * @return the command attempted by user
+   */
+  public String getCommand();
+
+  /**
+    * @return the set of read entities
+    */
+  public Set<ReadEntity> getInputs();
+
+  /**
+   * @return the set of write entities
+   */
+  public Set<WriteEntity> getOutputs();
+
+  /**
+   * @return the user name
+   */
+  public String getUserName();
+
+  /**
+   * @return the ip address
+   */
+  public String getIpAddress();
+
+  /**
+   * @return the database object
+   */
+  public Database getDatabase();
+
+  /**
+   * @return the table object
+   */
+  public Table getTable();
+
+  /**
+   * @return the udf URI
+   */
+  public AccessURI getUdfURI();
+
+  /**
+   * @return the partition URI
+   */
+  public AccessURI getPartitionURI();
+
+  /**
+   * @return the authorization failure exception
+   */
+  public AuthorizationException getException();
+
+}
diff --git a/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHookContextImpl.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHookContextImpl.java
new file mode 100644
index 0000000..c1d31ce
--- /dev/null
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/SentryOnFailureHookContextImpl.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sentry.binding.hive;
+
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Table;
+import org.apache.hadoop.hive.ql.exec.Task;
+import org.apache.hadoop.hive.ql.hooks.ReadEntity;
+import org.apache.hadoop.hive.ql.hooks.WriteEntity;
+import org.apache.hadoop.hive.ql.metadata.AuthorizationException;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+public class SentryOnFailureHookContextImpl implements SentryOnFailureHookContext {
+
+  private final String command;
+  private final Set<ReadEntity> inputs;
+  private final Set<WriteEntity> outputs;
+  private final String userName;
+  private final String ipAddress;
+  private final Database database;
+  private final Table table;
+  private final AccessURI udfURI;
+  private final AccessURI partitionURI;
+  private final AuthorizationException authException;
+
+  public SentryOnFailureHookContextImpl(String command,
+      Set<ReadEntity> inputs, Set<WriteEntity> outputs, Database db,
+      Table tab, AccessURI udfURI, AccessURI partitionURI,
+      String userName, String ipAddress, AuthorizationException e) {
+    this.command = command;
+    this.inputs = inputs;
+    this.outputs = outputs;
+    this.userName = userName;
+    this.ipAddress = ipAddress;
+    this.database = db;
+    this.table = tab;
+    this.udfURI = udfURI;
+    this.partitionURI = partitionURI;
+    this.authException = e;
+  }
+
+  @Override
+  public String getCommand() {
+    return command;
+  }
+
+  @Override
+  public Set<ReadEntity> getInputs() {
+    return inputs;
+  }
+
+  @Override
+  public Set<WriteEntity> getOutputs() {
+    return outputs;
+  }
+
+  @Override
+  public String getUserName() {
+    return userName;
+  }
+
+  @Override
+  public String getIpAddress() {
+    return ipAddress;
+  }
+
+  @Override
+  public Database getDatabase() {
+    return database;
+  }
+
+  @Override
+  public Table getTable() {
+    return table;
+  }
+
+  @Override
+  public AccessURI getUdfURI() {
+    return udfURI;
+  }
+
+  @Override
+  public AccessURI getPartitionURI() {
+    return partitionURI;
+  }
+
+  @Override
+  public AuthorizationException getException() {
+    return authException;
+  }
+}
diff --git a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzBinding.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzBinding.java
similarity index 94%
rename from access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzBinding.java
rename to sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzBinding.java
index 441d790..5190ba6 100644
--- a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzBinding.java
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzBinding.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive.authz;
+package org.apache.sentry.binding.hive.authz;
 
 import java.lang.reflect.Constructor;
 import java.util.EnumSet;
@@ -23,15 +23,6 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.access.binding.hive.conf.HiveAuthzConf;
-import org.apache.access.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
-import org.apache.access.core.Action;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Authorizable.AuthorizableType;
-import org.apache.access.core.AuthorizationProvider;
-import org.apache.access.core.NoAuthorizationProvider;
-import org.apache.access.core.Server;
-import org.apache.access.core.Subject;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.CommonConfigurationKeys;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -39,6 +30,15 @@
 import org.apache.hadoop.hive.ql.metadata.AuthorizationException;
 import org.apache.hadoop.hive.ql.plan.HiveOperation;
 import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
+import org.apache.sentry.core.Action;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.AuthorizationProvider;
+import org.apache.sentry.core.NoAuthorizationProvider;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.core.Subject;
+import org.apache.sentry.core.Authorizable.AuthorizableType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzPrivileges.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzPrivileges.java
similarity index 96%
rename from access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzPrivileges.java
rename to sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzPrivileges.java
index fbfcb31..2c480ef 100644
--- a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzPrivileges.java
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzPrivileges.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive.authz;
+package org.apache.sentry.binding.hive.authz;
 
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.access.core.Action;
-import org.apache.access.core.Authorizable.AuthorizableType;
+import org.apache.sentry.core.Action;
+import org.apache.sentry.core.Authorizable.AuthorizableType;
 
 /**
  * Hive objects with required access privileges mapped to auth provider privileges
diff --git a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzPrivilegesMap.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzPrivilegesMap.java
similarity index 96%
rename from access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzPrivilegesMap.java
rename to sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzPrivilegesMap.java
index f6d3d16..7b6c598 100644
--- a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/authz/HiveAuthzPrivilegesMap.java
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/authz/HiveAuthzPrivilegesMap.java
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive.authz;
+package org.apache.sentry.binding.hive.authz;
 
 import java.util.EnumSet;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges.HiveExtendedOperation;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges.HiveOperationScope;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges.HiveOperationType;
-import org.apache.access.core.Action;
-import org.apache.access.core.Authorizable.AuthorizableType;
 import org.apache.hadoop.hive.ql.plan.HiveOperation;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges.HiveExtendedOperation;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges.HiveOperationScope;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges.HiveOperationType;
+import org.apache.sentry.core.Action;
+import org.apache.sentry.core.Authorizable.AuthorizableType;
 
 public class HiveAuthzPrivilegesMap {
   private static final Map <HiveOperation, HiveAuthzPrivileges> hiveAuthzStmtPrivMap =
diff --git a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/conf/HiveAuthzConf.java b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/conf/HiveAuthzConf.java
similarity index 60%
rename from access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/conf/HiveAuthzConf.java
rename to sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/conf/HiveAuthzConf.java
index 59650bf..bfd58fa 100644
--- a/access-binding/access-binding-hive/src/main/java/org/apache/access/binding/hive/conf/HiveAuthzConf.java
+++ b/sentry-binding/sentry-binding-hive/src/main/java/org/apache/sentry/binding/hive/conf/HiveAuthzConf.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive.conf;
+package org.apache.sentry.binding.hive.conf;
 
 import java.net.URL;
 import java.util.HashMap;
@@ -22,6 +22,7 @@
 import java.util.Map.Entry;
 
 import org.apache.hadoop.conf.Configuration;
+import org.mortbay.log.Log;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -29,23 +30,37 @@
 public class HiveAuthzConf extends Configuration {
 
   /**
-   * Configuration key used in hive-site.xml to point at access-site.xml
+   * Configuration key used in hive-site.xml to point at sentry-site.xml
    */
   public static final String HIVE_ACCESS_CONF_URL = "hive.access.conf.url";
+  public static final String HIVE_SENTRY_CONF_URL = "hive.sentry.conf.url";
   public static final String HIVE_ACCESS_SUBJECT_NAME = "hive.access.subject.name";
+  public static final String HIVE_SENTRY_SUBJECT_NAME = "hive.sentry.subject.name";
 
   /**
    * Config setting definitions
    */
   public static enum AuthzConfVars {
-    AUTHZ_PROVIDER("hive.access.provider",
-        "org.apache.access.provider.file.ResourceAuthorizationProvider"),
-        AUTHZ_PROVIDER_RESOURCE("hive.access.provider.resource", ""),
-        AUTHZ_SERVER_NAME("hive.access.server", "HS2"),
-        AUTHZ_RESTRICT_DEFAULT_DB("hive.access.restrict.defaultDB", "false"),
-        ACCESS_TESTING_MODE("hive.access.testing.mode", "false"),
-        AUTHZ_UDF_WHITELIST("hive.access.udf.whitelist", HIVE_UDF_WHITE_LIST),
-        AUTHZ_ALLOW_HIVE_IMPERSONATION("hive.access.allow.hive.impersonation", "false"),
+    AUTHZ_PROVIDER("hive.sentry.provider",
+        "org.apache.sentry.provider.file.ResourceAuthorizationProvider"),
+        AUTHZ_PROVIDER_RESOURCE("hive.sentry.provider.resource", ""),
+        AUTHZ_SERVER_NAME("hive.sentry.server", "HS2"),
+        AUTHZ_RESTRICT_DEFAULT_DB("hive.sentry.restrict.defaultDB", "false"),
+        ACCESS_TESTING_MODE("hive.sentry.testing.mode", "false"),
+        AUTHZ_UDF_WHITELIST("hive.sentry.udf.whitelist", HIVE_UDF_WHITE_LIST),
+        AUTHZ_ALLOW_HIVE_IMPERSONATION("hive.sentry.allow.hive.impersonation", "false"),
+        AUTHZ_ONFAILURE_HOOKS("hive.sentry.failure.hooks", ""),
+
+        AUTHZ_PROVIDER_DEPRECATED("hive.access.provider",
+        "org.apache.sentry.provider.file.ResourceAuthorizationProvider"),
+        AUTHZ_PROVIDER_RESOURCE_DEPRECATED("hive.access.provider.resource", ""),
+        AUTHZ_SERVER_NAME_DEPRECATED("hive.access.server", "HS2"),
+        AUTHZ_RESTRICT_DEFAULT_DB_DEPRECATED("hive.access.restrict.defaultDB", "false"),
+        ACCESS_TESTING_MODE_DEPRECATED("hive.access.testing.mode", "false"),
+        AUTHZ_UDF_WHITELIST_DEPRECATED("hive.access.udf.whitelist", HIVE_UDF_WHITE_LIST),
+        AUTHZ_ALLOW_HIVE_IMPERSONATION_DEPRECATED("hive.access.allow.hive.impersonation", "false"),
+        AUTHZ_ONFAILURE_HOOKS_DEPRECATED("hive.access.failure.hooks", ""),
+
         ;
 
     private final String varName;
@@ -93,10 +108,23 @@
     "variance,weekofyear,when,xpath,xpath_boolean,xpath_double,xpath_float,xpath_int,xpath_long," +
     "xpath_number,xpath_short,xpath_string,year";
 
+  private static final Map<String, AuthzConfVars> deprecatedConfigs =
+      new HashMap<String, AuthzConfVars>();
+  static {
+   deprecatedConfigs.put(AuthzConfVars.AUTHZ_PROVIDER_DEPRECATED.getVar(), AuthzConfVars.AUTHZ_PROVIDER);
+   deprecatedConfigs.put(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE_DEPRECATED.getVar(), AuthzConfVars.AUTHZ_PROVIDER_RESOURCE);
+   deprecatedConfigs.put(AuthzConfVars.AUTHZ_SERVER_NAME_DEPRECATED.getVar(), AuthzConfVars.AUTHZ_SERVER_NAME);
+   deprecatedConfigs.put(AuthzConfVars.AUTHZ_RESTRICT_DEFAULT_DB_DEPRECATED.getVar(), AuthzConfVars.AUTHZ_RESTRICT_DEFAULT_DB);
+   deprecatedConfigs.put(AuthzConfVars.ACCESS_TESTING_MODE_DEPRECATED.getVar(), AuthzConfVars.ACCESS_TESTING_MODE);
+   deprecatedConfigs.put(AuthzConfVars.AUTHZ_UDF_WHITELIST_DEPRECATED.getVar(), AuthzConfVars.AUTHZ_UDF_WHITELIST);
+   deprecatedConfigs.put(AuthzConfVars.AUTHZ_ALLOW_HIVE_IMPERSONATION_DEPRECATED.getVar(), AuthzConfVars.AUTHZ_ALLOW_HIVE_IMPERSONATION);
+   deprecatedConfigs.put(AuthzConfVars.AUTHZ_ONFAILURE_HOOKS_DEPRECATED.getVar(), AuthzConfVars.AUTHZ_ONFAILURE_HOOKS);
+  };
+
   @SuppressWarnings("unused")
   private static final Logger LOG = LoggerFactory
       .getLogger(HiveAuthzConf.class);
-  public static final String AUTHZ_SITE_FILE = "access-site.xml";
+  public static final String AUTHZ_SITE_FILE = "sentry-site.xml";
 
   public HiveAuthzConf(URL hiveAuthzSiteURL) {
     super(false);
@@ -134,8 +162,17 @@
   public String get(String varName) {
     String retVal = super.get(varName);
     if (retVal == null) {
-      retVal = AuthzConfVars.getDefault(varName);
+      // check if the deprecated value is set here
+      if (deprecatedConfigs.containsKey(varName)) {
+        retVal = super.get(deprecatedConfigs.get(varName).getVar());
+      }
+      if (retVal == null) {
+        retVal = AuthzConfVars.getDefault(varName);
+      } else {
+        Log.info("Using the deprecated config setting " + deprecatedConfigs.get(varName).getVar() +
+            " instead of " + varName);
+      }
     }
     return retVal;
   }
-}
\ No newline at end of file
+}
diff --git a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/MockUserToGroupMapping.java b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/MockUserToGroupMapping.java
similarity index 91%
rename from access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/MockUserToGroupMapping.java
rename to sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/MockUserToGroupMapping.java
index e46e7a5..881712b 100644
--- a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/MockUserToGroupMapping.java
+++ b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/MockUserToGroupMapping.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.access.binding.hive;
+package org.apache.sentry.binding.hive;
 
 import java.util.List;
 
-import org.apache.access.provider.file.GroupMappingService;
+import org.apache.sentry.provider.file.GroupMappingService;
 
 import com.google.common.collect.Lists;
 
diff --git a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestHiveAuthzBindings.java b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestHiveAuthzBindings.java
similarity index 94%
rename from access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestHiveAuthzBindings.java
rename to sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestHiveAuthzBindings.java
index c3f254b..20d4e8f 100644
--- a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestHiveAuthzBindings.java
+++ b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestHiveAuthzBindings.java
@@ -14,31 +14,31 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive;
+package org.apache.sentry.binding.hive;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.apache.access.binding.hive.authz.HiveAuthzBinding;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivileges;
-import org.apache.access.binding.hive.authz.HiveAuthzPrivilegesMap;
-import org.apache.access.binding.hive.conf.HiveAuthzConf;
-import org.apache.access.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
-import org.apache.access.core.AccessConstants;
-import org.apache.access.core.AccessURI;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Database;
-import org.apache.access.core.Server;
-import org.apache.access.core.Subject;
-import org.apache.access.core.Table;
-import org.apache.access.provider.file.PolicyFiles;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.ql.metadata.AuthorizationException;
 import org.apache.hadoop.hive.ql.plan.HiveOperation;
+import org.apache.sentry.binding.hive.authz.HiveAuthzBinding;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivileges;
+import org.apache.sentry.binding.hive.authz.HiveAuthzPrivilegesMap;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
+import org.apache.sentry.core.AccessConstants;
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.core.Subject;
+import org.apache.sentry.core.Table;
+import org.apache.sentry.provider.file.PolicyFiles;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -103,7 +103,7 @@
 
     // create auth configuration
     authzConf.set(AuthzConfVars.AUTHZ_PROVIDER.getVar(),
-        "org.apache.access.provider.file.LocalGroupResourceAuthorizationProvider");
+        "org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider");
     authzConf.set(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE.getVar(),
         new File(baseDir, RESOURCE_PATH).getPath());
     authzConf.set(AuthzConfVars.AUTHZ_SERVER_NAME.getVar(), SERVER1);
diff --git a/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestHiveAuthzConf.java b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestHiveAuthzConf.java
new file mode 100644
index 0000000..de59546
--- /dev/null
+++ b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestHiveAuthzConf.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sentry.binding.hive;
+
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.common.io.Resources;
+
+public class TestHiveAuthzConf {
+  private HiveAuthzConf authzConf;
+  private HiveAuthzConf authzDepConf;
+
+  @Before
+  public void setUp() {
+    authzConf =  new HiveAuthzConf(Resources.getResource("sentry-site.xml"));
+    authzDepConf =  new HiveAuthzConf(Resources.getResource("access-site.xml"));
+  }
+
+  @Test
+  public void testConfig() {
+    Assert.assertEquals("org.apache.sentry.provider.file.fooProvider",
+        authzDepConf.get(AuthzConfVars.AUTHZ_PROVIDER_DEPRECATED.getVar()));
+    Assert.assertEquals("org.apache.sentry.provider.file.fooProvider",
+        authzConf.get(AuthzConfVars.AUTHZ_PROVIDER.getVar()));
+  }
+
+  @Test
+  public void testConfigOverload() {
+    authzConf.set(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE.getVar(), "fooFile");
+    Assert.assertEquals("fooFile",
+        authzConf.get(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE.getVar()));
+    authzDepConf.set(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE_DEPRECATED.getVar(), "fooFile");
+    Assert.assertEquals("fooFile",
+        authzDepConf.get(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE_DEPRECATED.getVar()));
+  }
+
+  /**
+   * Check the deprecated properties from the config files that doesn't explicitly set it
+   */
+  @Test
+  public void testDeprecatedConfig() {
+    Assert.assertEquals("classpath:test-authz-provider.ini",
+        authzConf.get(AuthzConfVars.AUTHZ_PROVIDER_RESOURCE_DEPRECATED.getVar()));
+  }
+}
diff --git a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestURI.java b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestURI.java
similarity index 95%
rename from access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestURI.java
rename to sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestURI.java
index 91c803f..1853559 100644
--- a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/TestURI.java
+++ b/sentry-binding/sentry-binding-hive/src/test/java/org/apache/sentry/binding/hive/TestURI.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.binding.hive;
+package org.apache.sentry.binding.hive;
 
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
 import org.apache.hadoop.hive.ql.session.SessionState;
+import org.apache.sentry.binding.hive.HiveAuthzBindingHook;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
diff --git a/access-binding/access-binding-hive/src/test/resources/access-site.xml b/sentry-binding/sentry-binding-hive/src/test/resources/access-site.xml
similarity index 94%
rename from access-binding/access-binding-hive/src/test/resources/access-site.xml
rename to sentry-binding/sentry-binding-hive/src/test/resources/access-site.xml
index 6a5ddff..1936c21 100644
--- a/access-binding/access-binding-hive/src/test/resources/access-site.xml
+++ b/sentry-binding/sentry-binding-hive/src/test/resources/access-site.xml
@@ -20,7 +20,7 @@
 <configuration>
   <property>
     <name>hive.access.provider</name>
-    <value>org.apache.access.provider.file.fooProvider</value>
+    <value>org.apache.sentry.provider.file.fooProvider</value>
   </property>
   <property>
     <name>hive.access.provider.resource</name>
diff --git a/access-binding/access-binding-hive/src/test/resources/log4j.properties b/sentry-binding/sentry-binding-hive/src/test/resources/log4j.properties
similarity index 100%
rename from access-binding/access-binding-hive/src/test/resources/log4j.properties
rename to sentry-binding/sentry-binding-hive/src/test/resources/log4j.properties
diff --git a/access-binding/access-binding-hive/src/test/resources/access-site.xml b/sentry-binding/sentry-binding-hive/src/test/resources/sentry-site.xml
similarity index 84%
copy from access-binding/access-binding-hive/src/test/resources/access-site.xml
copy to sentry-binding/sentry-binding-hive/src/test/resources/sentry-site.xml
index 6a5ddff..beef40d 100644
--- a/access-binding/access-binding-hive/src/test/resources/access-site.xml
+++ b/sentry-binding/sentry-binding-hive/src/test/resources/sentry-site.xml
@@ -19,16 +19,16 @@
 
 <configuration>
   <property>
-    <name>hive.access.provider</name>
-    <value>org.apache.access.provider.file.fooProvider</value>
+    <name>hive.sentry.provider</name>
+    <value>org.apache.sentry.provider.file.fooProvider</value>
   </property>
   <property>
-    <name>hive.access.provider.resource</name>
+    <name>hive.sentry.provider.resource</name>
     <value>classpath:test-authz-provider.ini</value>
   </property>
   <property>
-    <name>hive.access.server</name>
+    <name>hive.sentry.server</name>
     <value>myHS2</value>
   </property>
 </configuration>
-    
+
diff --git a/access-binding/access-binding-hive/src/test/resources/test-authz-provider.ini b/sentry-binding/sentry-binding-hive/src/test/resources/test-authz-provider.ini
similarity index 100%
rename from access-binding/access-binding-hive/src/test/resources/test-authz-provider.ini
rename to sentry-binding/sentry-binding-hive/src/test/resources/test-authz-provider.ini
diff --git a/access-core/pom.xml b/sentry-core/pom.xml
similarity index 94%
rename from access-core/pom.xml
rename to sentry-core/pom.xml
index 5ceaf16..5466009 100644
--- a/access-core/pom.xml
+++ b/sentry-core/pom.xml
@@ -20,12 +20,12 @@
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>com.cloudera.cdh</groupId>
-    <artifactId>access</artifactId>
+    <artifactId>sentry</artifactId>
     <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <groupId>com.cloudera.cdh</groupId>
-  <artifactId>access-core</artifactId>
+  <artifactId>sentry-core</artifactId>
   <name>Access core</name>
 
   <dependencies>
diff --git a/access-core/src/main/java/org/apache/access/core/AccessConstants.java b/sentry-core/src/main/java/org/apache/sentry/core/AccessConstants.java
similarity index 96%
rename from access-core/src/main/java/org/apache/access/core/AccessConstants.java
rename to sentry-core/src/main/java/org/apache/sentry/core/AccessConstants.java
index 38a2ba0..7551a1d 100644
--- a/access-core/src/main/java/org/apache/access/core/AccessConstants.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/AccessConstants.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public class AccessConstants {
 
diff --git a/access-core/src/main/java/org/apache/access/core/AccessURI.java b/sentry-core/src/main/java/org/apache/sentry/core/AccessURI.java
similarity index 97%
rename from access-core/src/main/java/org/apache/access/core/AccessURI.java
rename to sentry-core/src/main/java/org/apache/sentry/core/AccessURI.java
index 42c18eb..e6d817e 100644
--- a/access-core/src/main/java/org/apache/access/core/AccessURI.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/AccessURI.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public class AccessURI implements Authorizable {
   /**
diff --git a/access-core/src/main/java/org/apache/access/core/Action.java b/sentry-core/src/main/java/org/apache/sentry/core/Action.java
similarity index 96%
rename from access-core/src/main/java/org/apache/access/core/Action.java
rename to sentry-core/src/main/java/org/apache/sentry/core/Action.java
index 3a847c9..94e1984 100644
--- a/access-core/src/main/java/org/apache/access/core/Action.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/Action.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public enum Action {
 
diff --git a/access-core/src/main/java/org/apache/access/core/Authorizable.java b/sentry-core/src/main/java/org/apache/sentry/core/Authorizable.java
similarity index 96%
rename from access-core/src/main/java/org/apache/access/core/Authorizable.java
rename to sentry-core/src/main/java/org/apache/sentry/core/Authorizable.java
index 73df183..2849a9f 100644
--- a/access-core/src/main/java/org/apache/access/core/Authorizable.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/Authorizable.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public interface Authorizable {
 
diff --git a/access-core/src/main/java/org/apache/access/core/AuthorizationProvider.java b/sentry-core/src/main/java/org/apache/sentry/core/AuthorizationProvider.java
similarity index 97%
rename from access-core/src/main/java/org/apache/access/core/AuthorizationProvider.java
rename to sentry-core/src/main/java/org/apache/sentry/core/AuthorizationProvider.java
index b5ac574..c026fce 100644
--- a/access-core/src/main/java/org/apache/access/core/AuthorizationProvider.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/AuthorizationProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 import java.util.EnumSet;
 import java.util.List;
diff --git a/access-core/src/main/java/org/apache/access/core/Database.java b/sentry-core/src/main/java/org/apache/sentry/core/Database.java
similarity index 97%
rename from access-core/src/main/java/org/apache/access/core/Database.java
rename to sentry-core/src/main/java/org/apache/sentry/core/Database.java
index 2f3c038..169057d 100644
--- a/access-core/src/main/java/org/apache/access/core/Database.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/Database.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public class Database implements Authorizable {
 
diff --git a/access-core/src/main/java/org/apache/access/core/NoAuthorizationProvider.java b/sentry-core/src/main/java/org/apache/sentry/core/NoAuthorizationProvider.java
similarity index 97%
rename from access-core/src/main/java/org/apache/access/core/NoAuthorizationProvider.java
rename to sentry-core/src/main/java/org/apache/sentry/core/NoAuthorizationProvider.java
index 1e448b7..a0a6201 100644
--- a/access-core/src/main/java/org/apache/access/core/NoAuthorizationProvider.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/NoAuthorizationProvider.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 import java.util.EnumSet;
 import java.util.List;
diff --git a/access-core/src/main/java/org/apache/access/core/Server.java b/sentry-core/src/main/java/org/apache/sentry/core/Server.java
similarity index 97%
rename from access-core/src/main/java/org/apache/access/core/Server.java
rename to sentry-core/src/main/java/org/apache/sentry/core/Server.java
index 0c95666..caed9a9 100644
--- a/access-core/src/main/java/org/apache/access/core/Server.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/Server.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public class Server implements Authorizable {
 
diff --git a/access-core/src/main/java/org/apache/access/core/ServerResource.java b/sentry-core/src/main/java/org/apache/sentry/core/ServerResource.java
similarity index 95%
rename from access-core/src/main/java/org/apache/access/core/ServerResource.java
rename to sentry-core/src/main/java/org/apache/sentry/core/ServerResource.java
index bdbdd57..91334dc 100644
--- a/access-core/src/main/java/org/apache/access/core/ServerResource.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/ServerResource.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public enum ServerResource {
   UDFS();
diff --git a/access-core/src/main/java/org/apache/access/core/Subject.java b/sentry-core/src/main/java/org/apache/sentry/core/Subject.java
similarity index 96%
rename from access-core/src/main/java/org/apache/access/core/Subject.java
rename to sentry-core/src/main/java/org/apache/sentry/core/Subject.java
index 111895e..fa5cd6e 100644
--- a/access-core/src/main/java/org/apache/access/core/Subject.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/Subject.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public class Subject {
 
diff --git a/access-core/src/main/java/org/apache/access/core/Table.java b/sentry-core/src/main/java/org/apache/sentry/core/Table.java
similarity index 97%
rename from access-core/src/main/java/org/apache/access/core/Table.java
rename to sentry-core/src/main/java/org/apache/sentry/core/Table.java
index 47cc724..9053d9a 100644
--- a/access-core/src/main/java/org/apache/access/core/Table.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/Table.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public class Table implements TableOrView {
 
diff --git a/access-core/src/main/java/org/apache/access/core/TableOrView.java b/sentry-core/src/main/java/org/apache/sentry/core/TableOrView.java
similarity index 95%
rename from access-core/src/main/java/org/apache/access/core/TableOrView.java
rename to sentry-core/src/main/java/org/apache/sentry/core/TableOrView.java
index 1cbb2e0..d6f8837 100644
--- a/access-core/src/main/java/org/apache/access/core/TableOrView.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/TableOrView.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public interface TableOrView extends Authorizable {
 
diff --git a/access-core/src/main/java/org/apache/access/core/View.java b/sentry-core/src/main/java/org/apache/sentry/core/View.java
similarity index 97%
rename from access-core/src/main/java/org/apache/access/core/View.java
rename to sentry-core/src/main/java/org/apache/sentry/core/View.java
index bed52ed..471a09c 100644
--- a/access-core/src/main/java/org/apache/access/core/View.java
+++ b/sentry-core/src/main/java/org/apache/sentry/core/View.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.core;
+package org.apache.sentry.core;
 
 public class View implements TableOrView {
 
diff --git a/access-core/src/test/java/org/apache/access/core/TestURI.java b/sentry-core/src/test/java/org/apache/sentry/core/TestURI.java
similarity index 94%
rename from access-core/src/test/java/org/apache/access/core/TestURI.java
rename to sentry-core/src/test/java/org/apache/sentry/core/TestURI.java
index 6cb7689..5507285 100644
--- a/access-core/src/test/java/org/apache/access/core/TestURI.java
+++ b/sentry-core/src/test/java/org/apache/sentry/core/TestURI.java
@@ -1,4 +1,4 @@
-package org.apache.access.core;
+package org.apache.sentry.core;
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -17,6 +17,7 @@
  */
 
 
+import org.apache.sentry.core.AccessURI;
 import org.junit.Test;
 
 public class TestURI {
diff --git a/access-dist/pom.xml b/sentry-dist/pom.xml
similarity index 88%
rename from access-dist/pom.xml
rename to sentry-dist/pom.xml
index d37ab2d..30a3494 100644
--- a/access-dist/pom.xml
+++ b/sentry-dist/pom.xml
@@ -19,24 +19,24 @@
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>com.cloudera.cdh</groupId>
-    <artifactId>access</artifactId>
+    <artifactId>sentry</artifactId>
     <version>1.1.0-SNAPSHOT</version>
   </parent>
-  <artifactId>access-dist</artifactId>
+  <artifactId>sentry-dist</artifactId>
   <name>Access Distribution</name>
   <description>Access distribution</description>
   <dependencies>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-core</artifactId>
+      <artifactId>sentry-core</artifactId>
     </dependency>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-binding-hive</artifactId>
+      <artifactId>sentry-binding-hive</artifactId>
     </dependency>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-provider-file</artifactId>
+      <artifactId>sentry-provider-file</artifactId>
     </dependency>
   </dependencies>
   <build>
@@ -53,7 +53,7 @@
             </goals>
             <inherited>false</inherited>
             <configuration>
-              <finalName>access-${project.version}</finalName>
+              <finalName>sentry-${project.version}</finalName>
               <descriptors>
                 <descriptor>src/main/assembly/src.xml</descriptor>
               </descriptors>
diff --git a/access-dist/src/main/assembly/src.xml b/sentry-dist/src/main/assembly/src.xml
similarity index 80%
rename from access-dist/src/main/assembly/src.xml
rename to sentry-dist/src/main/assembly/src.xml
index 1964f40..05ea8f7 100644
--- a/access-dist/src/main/assembly/src.xml
+++ b/sentry-dist/src/main/assembly/src.xml
@@ -28,7 +28,7 @@
     <format>tar.gz</format>
   </formats>
 
-  <baseDirectory>access-${project.version}</baseDirectory>
+  <baseDirectory>sentry-${project.version}</baseDirectory>
 
   <moduleSets>
 
@@ -36,13 +36,13 @@
       <useAllReactorProjects>true</useAllReactorProjects>
 
       <includes>
-        <include>com.cloudera.cdh:access-binding</include>
-        <include>com.cloudera.cdh:access-binding-hive</include>
-        <include>com.cloudera.cdh:access-core</include>
-        <include>com.cloudera.cdh:access-provider</include>
-        <include>com.cloudera.cdh:access-provider-file</include>
-        <include>com.cloudera.cdh:access-tests</include>
-        <include>com.cloudera.cdh:access-dist</include>
+        <include>com.cloudera.cdh:sentry-binding</include>
+        <include>com.cloudera.cdh:sentry-binding-hive</include>
+        <include>com.cloudera.cdh:sentry-core</include>
+        <include>com.cloudera.cdh:sentry-provider</include>
+        <include>com.cloudera.cdh:sentry-provider-file</include>
+        <include>com.cloudera.cdh:sentry-tests</include>
+        <include>com.cloudera.cdh:sentry-dist</include>
       </includes>
 
       <binaries>
@@ -85,11 +85,11 @@
       <directory>../</directory>
 
       <excludes>
-        <exclude>access-binding/**</exclude>
-        <exclude>access-core/**</exclude>
-        <exclude>access-dist/**</exclude>
-        <exclude>access-provider/**</exclude>
-        <exclude>access-test/**</exclude>
+        <exclude>sentry-binding/**</exclude>
+        <exclude>sentry-core/**</exclude>
+        <exclude>sentry-dist/**</exclude>
+        <exclude>sentry-provider/**</exclude>
+        <exclude>sentry-test/**</exclude>
         <exclude>**/target/**</exclude>
         <exclude>**/.classpath</exclude>
         <exclude>**/.project</exclude>
diff --git a/access-provider/pom.xml b/sentry-provider/pom.xml
similarity index 91%
rename from access-provider/pom.xml
rename to sentry-provider/pom.xml
index 6f42075..f9f9915 100644
--- a/access-provider/pom.xml
+++ b/sentry-provider/pom.xml
@@ -20,17 +20,17 @@
 
   <parent>
     <groupId>com.cloudera.cdh</groupId>
-    <artifactId>access</artifactId>
+    <artifactId>sentry</artifactId>
     <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <groupId>com.cloudera.cdh</groupId>
-  <artifactId>access-provider</artifactId>
+  <artifactId>sentry-provider</artifactId>
   <name>Access Providers</name>
   <packaging>pom</packaging>
 
   <modules>
-    <module>access-provider-file</module>
+    <module>sentry-provider-file</module>
   </modules>
 
 </project>
diff --git a/access-provider/access-provider-file/pom.xml b/sentry-provider/sentry-provider-file/pom.xml
similarity index 94%
rename from access-provider/access-provider-file/pom.xml
rename to sentry-provider/sentry-provider-file/pom.xml
index 289a6e5..fdee8cc 100644
--- a/access-provider/access-provider-file/pom.xml
+++ b/sentry-provider/sentry-provider-file/pom.xml
@@ -20,12 +20,12 @@
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>com.cloudera.cdh</groupId>
-    <artifactId>access-provider</artifactId>
+    <artifactId>sentry-provider</artifactId>
     <version>1.1.0-SNAPSHOT</version>
   </parent>
 
   <groupId>com.cloudera.cdh</groupId>
-  <artifactId>access-provider-file</artifactId>
+  <artifactId>sentry-provider-file</artifactId>
   <name>Access Provider File</name>
 
   <dependencies>
@@ -67,7 +67,7 @@
     </dependency>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-core</artifactId>
+      <artifactId>sentry-core</artifactId>
     </dependency>
   </dependencies>
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/AbstractRoleValidator.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/AbstractRoleValidator.java
similarity index 88%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/AbstractRoleValidator.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/AbstractRoleValidator.java
index 28fdfff..35889e4 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/AbstractRoleValidator.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/AbstractRoleValidator.java
@@ -14,14 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
-import static org.apache.access.provider.file.PolicyFileConstants.AUTHORIZABLE_SPLITTER;
-import static org.apache.access.provider.file.PolicyFileConstants.PRIVILEGE_PREFIX;
+import static org.apache.sentry.provider.file.PolicyFileConstants.AUTHORIZABLE_SPLITTER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.PRIVILEGE_PREFIX;
 
 import java.util.List;
 
-import org.apache.access.core.Authorizable;
+import org.apache.sentry.core.Authorizable;
 import org.apache.shiro.config.ConfigurationException;
 
 import com.google.common.annotations.VisibleForTesting;
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/Authorizables.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/Authorizables.java
similarity index 82%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/Authorizables.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/Authorizables.java
index bb7cffc..4062473 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/Authorizables.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/Authorizables.java
@@ -14,15 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
-import org.apache.access.core.AccessURI;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Authorizable.AuthorizableType;
-import org.apache.access.core.Database;
-import org.apache.access.core.Server;
-import org.apache.access.core.Table;
-import org.apache.access.core.View;
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.core.Table;
+import org.apache.sentry.core.View;
+import org.apache.sentry.core.Authorizable.AuthorizableType;
 
 public class Authorizables {
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/DatabaseMustMatch.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/DatabaseMustMatch.java
similarity index 92%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/DatabaseMustMatch.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/DatabaseMustMatch.java
index ea1c0a7..ef6486b 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/DatabaseMustMatch.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/DatabaseMustMatch.java
@@ -14,10 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Database;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
 import org.apache.shiro.config.ConfigurationException;
 
 public class DatabaseMustMatch extends AbstractRoleValidator {
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/DatabaseRequiredInRole.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/DatabaseRequiredInRole.java
similarity index 62%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/DatabaseRequiredInRole.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/DatabaseRequiredInRole.java
index 7a3c42a..fd0f2c1 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/DatabaseRequiredInRole.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/DatabaseRequiredInRole.java
@@ -14,12 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import javax.annotation.Nullable;
 
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Database;
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
 import org.apache.shiro.config.ConfigurationException;
 
 public class DatabaseRequiredInRole extends AbstractRoleValidator {
@@ -33,16 +34,34 @@
       Iterable<Authorizable> authorizables = parseRole(role);
       /*
        * Each permission in a non-global file must have a database
-       * object.
+       * object except for URIs.
+       *
+       * We allow URIs to be specified in the per DB policy file for
+       * ease of mangeability. URIs will contain to remain server scope
+       * objects.
        */
       boolean foundDatabaseInAuthorizables = false;
+      boolean foundURIInAuthorizables = false;
+      boolean allowURIInAuthorizables = false;
+
+      if ("true".equalsIgnoreCase(
+          System.getProperty(SimplePolicyEngine.ACCESS_ALLOW_URI_PER_DB_POLICYFILE))) {
+        allowURIInAuthorizables = true;
+      }
+
       for(Authorizable authorizable : authorizables) {
         if(authorizable instanceof Database) {
           foundDatabaseInAuthorizables = true;
-          break;
+        }
+        if (authorizable instanceof AccessURI) {
+          if (foundDatabaseInAuthorizables) {
+            String msg = "URI object is specified at DB scope in " + role;
+            throw new ConfigurationException(msg);
+          }
+          foundURIInAuthorizables = true;
         }
       }
-      if(!foundDatabaseInAuthorizables) {
+      if(!foundDatabaseInAuthorizables && !(foundURIInAuthorizables && allowURIInAuthorizables)) {
         String msg = "Missing database object in " + role;
         throw new ConfigurationException(msg);
       }
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/GroupMappingService.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/GroupMappingService.java
similarity index 95%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/GroupMappingService.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/GroupMappingService.java
index ebfdf30..6af2edf 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/GroupMappingService.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/GroupMappingService.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.util.List;
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/HadoopGroupMappingService.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/HadoopGroupMappingService.java
similarity index 96%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/HadoopGroupMappingService.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/HadoopGroupMappingService.java
index 9e22730..1bbb125 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/HadoopGroupMappingService.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/HadoopGroupMappingService.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.IOException;
 import java.util.Collections;
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/HadoopGroupResourceAuthorizationProvider.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/HadoopGroupResourceAuthorizationProvider.java
similarity index 96%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/HadoopGroupResourceAuthorizationProvider.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/HadoopGroupResourceAuthorizationProvider.java
index ac2b199..f99ae8c 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/HadoopGroupResourceAuthorizationProvider.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/HadoopGroupResourceAuthorizationProvider.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.IOException;
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/KeyValue.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java
similarity index 93%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/KeyValue.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java
index 2921eb7..622736a 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/KeyValue.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/KeyValue.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.access.provider.file;
-import static org.apache.access.provider.file.PolicyFileConstants.KV_JOINER;
-import static org.apache.access.provider.file.PolicyFileConstants.KV_SPLITTER;
+package org.apache.sentry.provider.file;
+import static org.apache.sentry.provider.file.PolicyFileConstants.KV_JOINER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.KV_SPLITTER;
 
 import java.util.List;
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/LocalGroupMappingService.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/LocalGroupMappingService.java
similarity index 98%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/LocalGroupMappingService.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/LocalGroupMappingService.java
index 2c876ea..fa3e804 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/LocalGroupMappingService.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/LocalGroupMappingService.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.IOException;
 import java.util.Collections;
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/LocalGroupResourceAuthorizationProvider.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/LocalGroupResourceAuthorizationProvider.java
similarity index 96%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/LocalGroupResourceAuthorizationProvider.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/LocalGroupResourceAuthorizationProvider.java
index 5df64d1..ef595c8 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/LocalGroupResourceAuthorizationProvider.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/LocalGroupResourceAuthorizationProvider.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.IOException;
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyEngine.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyEngine.java
similarity index 94%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyEngine.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyEngine.java
index cbee32b..954e1d5 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyEngine.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyEngine.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.util.List;
 
-import org.apache.access.core.Authorizable;
+import org.apache.sentry.core.Authorizable;
 
 import com.google.common.collect.ImmutableSetMultimap;
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFile.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFile.java
similarity index 96%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFile.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFile.java
index c52c703..fafe79b 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFile.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFile.java
@@ -15,11 +15,11 @@
  * limitations under the License.
  */
 
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
-import static org.apache.access.provider.file.PolicyFileConstants.DATABASES;
-import static org.apache.access.provider.file.PolicyFileConstants.GROUPS;
-import static org.apache.access.provider.file.PolicyFileConstants.ROLES;
+import static org.apache.sentry.provider.file.PolicyFileConstants.DATABASES;
+import static org.apache.sentry.provider.file.PolicyFileConstants.GROUPS;
+import static org.apache.sentry.provider.file.PolicyFileConstants.ROLES;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFileConstants.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFileConstants.java
similarity index 97%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFileConstants.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFileConstants.java
index 0f80b0a..d28cde2 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFileConstants.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFileConstants.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Splitter;
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFiles.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFiles.java
similarity index 98%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFiles.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFiles.java
index 652a0e0..ff4c984 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/PolicyFiles.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/PolicyFiles.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.FileNotFoundException;
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ResourceAuthorizationProvider.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ResourceAuthorizationProvider.java
similarity index 89%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ResourceAuthorizationProvider.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ResourceAuthorizationProvider.java
index 5aece44..60282e6 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ResourceAuthorizationProvider.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ResourceAuthorizationProvider.java
@@ -14,24 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
-import static org.apache.access.provider.file.PolicyFileConstants.AUTHORIZABLE_JOINER;
-import static org.apache.access.provider.file.PolicyFileConstants.KV_JOINER;
-import static org.apache.access.provider.file.PolicyFileConstants.PRIVILEGE_NAME;
+import static org.apache.sentry.provider.file.PolicyFileConstants.AUTHORIZABLE_JOINER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.KV_JOINER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.PRIVILEGE_NAME;
 
 import java.util.ArrayList;
 import java.util.EnumSet;
 import java.util.List;
 
-import org.apache.access.core.Action;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.AuthorizationProvider;
-import org.apache.access.core.Database;
-import org.apache.access.core.Server;
-import org.apache.access.core.ServerResource;
-import org.apache.access.core.Subject;
-import org.apache.access.core.Table;
+import org.apache.sentry.core.Action;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.AuthorizationProvider;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.core.ServerResource;
+import org.apache.sentry.core.Subject;
+import org.apache.sentry.core.Table;
 import org.apache.shiro.authz.Permission;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/RoleValidator.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/RoleValidator.java
similarity index 95%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/RoleValidator.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/RoleValidator.java
index 02ea02f..323a18a 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/RoleValidator.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/RoleValidator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import javax.annotation.Nullable;
 
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/Roles.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/Roles.java
similarity index 78%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/Roles.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/Roles.java
index 71ccdcd..556be01 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/Roles.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/Roles.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import javax.annotation.Nullable;
 
@@ -24,6 +24,7 @@
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.ImmutableSetMultimap;
+import com.google.common.io.Resources;
 
 public class Roles {
   private static final Logger LOGGER = LoggerFactory
@@ -41,14 +42,27 @@
     this.globalRoles = globalRoles;
     this.perDatabaseRoles = perDatabaseRoles;
   }
-  public ImmutableSet<String> getRoles(@Nullable String database, String group) {
+  public ImmutableSet<String> getRoles(@Nullable String database, String group, Boolean isURI) {
     ImmutableSet.Builder<String> resultBuilder = ImmutableSet.builder();
+    String allowURIPerDbFile = 
+        System.getProperty(SimplePolicyEngine.ACCESS_ALLOW_URI_PER_DB_POLICYFILE);
+    Boolean consultPerDbRolesForURI = isURI && ("true".equalsIgnoreCase(allowURIPerDbFile));
+
     if(database != null) {
       ImmutableSetMultimap<String, String> dbPolicies =  perDatabaseRoles.get(database);
       if(dbPolicies != null && dbPolicies.containsKey(group)) {
         resultBuilder.addAll(dbPolicies.get(group));
       }
     }
+    if (consultPerDbRolesForURI) {
+      for(String db:perDatabaseRoles.keySet()) {
+        ImmutableSetMultimap<String, String> dbPolicies =  perDatabaseRoles.get(db);
+        if(dbPolicies != null && dbPolicies.containsKey(group)) {
+          resultBuilder.addAll(dbPolicies.get(group));
+        }
+      }
+    }
+
     if(globalRoles.containsKey(group)) {
       resultBuilder.addAll(globalRoles.get(group));
     }
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ServerNameMustMatch.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ServerNameMustMatch.java
similarity index 92%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ServerNameMustMatch.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ServerNameMustMatch.java
index 020c07b..1d2a8c6 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ServerNameMustMatch.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ServerNameMustMatch.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import javax.annotation.Nullable;
 
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Server;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Server;
 import org.apache.shiro.config.ConfigurationException;
 
 public class ServerNameMustMatch extends AbstractRoleValidator {
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ServersAllIsInvalid.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ServersAllIsInvalid.java
similarity index 91%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ServersAllIsInvalid.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ServersAllIsInvalid.java
index c13fbb7..8ee1c43 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/ServersAllIsInvalid.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/ServersAllIsInvalid.java
@@ -14,12 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import javax.annotation.Nullable;
 
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Server;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Server;
 import org.apache.shiro.config.ConfigurationException;
 
 public class ServersAllIsInvalid extends AbstractRoleValidator {
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/SimplePolicyEngine.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/SimplePolicyEngine.java
similarity index 91%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/SimplePolicyEngine.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/SimplePolicyEngine.java
index 21f6d9c..868736c 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/SimplePolicyEngine.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/SimplePolicyEngine.java
@@ -14,9 +14,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
-import static org.apache.access.provider.file.PolicyFileConstants.*;
+import static org.apache.sentry.provider.file.PolicyFileConstants.DATABASES;
+import static org.apache.sentry.provider.file.PolicyFileConstants.GROUPS;
+import static org.apache.sentry.provider.file.PolicyFileConstants.ROLES;
+import static org.apache.sentry.provider.file.PolicyFileConstants.ROLE_SPLITTER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.USERS;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -29,11 +33,12 @@
 
 import javax.annotation.Nullable;
 
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Database;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
 import org.apache.shiro.config.ConfigurationException;
 import org.apache.shiro.config.Ini;
 import org.apache.shiro.util.PermissionUtils;
@@ -63,6 +68,7 @@
   private final String serverName;
   private final List<Path> perDbResources = Lists.newArrayList();
   private final AtomicReference<Roles> rolesReference;
+  public final static String ACCESS_ALLOW_URI_PER_DB_POLICYFILE = "sentry.allow.uri.db.policyfile";
 
   public SimplePolicyEngine(String resourcePath, String serverName) throws IOException {
     this(new Configuration(), new Path(resourcePath), serverName);
@@ -118,11 +124,11 @@
             if(perDbIni.containsKey(DATABASES)) {
               throw new ConfigurationException("Per-db policy files cannot contain " + DATABASES + " section");
             }
-            perDatabaseRoles.put(database, parseIni(database, perDbIni));
+            ImmutableSetMultimap<String, String> currentDbRoles = parseIni(database, perDbIni);
+            perDatabaseRoles.put(database, currentDbRoles);
             perDbResources.add(perDbPolicy);
           } catch (Exception e) {
             LOGGER.error("Error processing key " + entry.getKey() + ", skipping " + entry.getValue(), e);
-            throw e;
           }
         }
       }
@@ -239,17 +245,22 @@
   public ImmutableSetMultimap<String, String> getPermissions(List<Authorizable> authorizables, List<String> groups) {
     Roles roles = rolesReference.get();
     String database = null;
+    Boolean isURI = false;
     for(Authorizable authorizable : authorizables) {
       if(authorizable instanceof Database) {
         database = authorizable.getName();
       }
+      if (authorizable instanceof AccessURI) {
+        isURI = true;
+      }
     }
+
     if(LOGGER.isDebugEnabled()) {
       LOGGER.debug("Getting permissions for {} via {}", groups, database);
     }
     ImmutableSetMultimap.Builder<String, String> resultBuilder = ImmutableSetMultimap.builder();
     for(String group : groups) {
-      resultBuilder.putAll(group, roles.getRoles(database, group));
+      resultBuilder.putAll(group, roles.getRoles(database, group, isURI));
     }
     ImmutableSetMultimap<String, String> result = resultBuilder.build();
     if(LOGGER.isDebugEnabled()) {
@@ -257,4 +268,4 @@
     }
     return result;
   }
-}
\ No newline at end of file
+}
diff --git a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/WildcardPermission.java b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/WildcardPermission.java
similarity index 95%
rename from access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/WildcardPermission.java
rename to sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/WildcardPermission.java
index 20ba719..e989d82 100644
--- a/access-provider/access-provider-file/src/main/java/org/apache/access/provider/file/WildcardPermission.java
+++ b/sentry-provider/sentry-provider-file/src/main/java/org/apache/sentry/provider/file/WildcardPermission.java
@@ -19,19 +19,19 @@
 
 // copied from apache shiro
 
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
-import static org.apache.access.provider.file.PolicyFileConstants.AUTHORIZABLE_JOINER;
-import static org.apache.access.provider.file.PolicyFileConstants.AUTHORIZABLE_SPLITTER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.AUTHORIZABLE_JOINER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.AUTHORIZABLE_SPLITTER;
 
 import java.io.Serializable;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.List;
 
-import org.apache.access.core.AccessConstants;
-import org.apache.access.core.Authorizable.AuthorizableType;
 import org.apache.commons.lang.text.StrSubstitutor;
+import org.apache.sentry.core.AccessConstants;
+import org.apache.sentry.core.Authorizable.AuthorizableType;
 import org.apache.shiro.authz.Permission;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/AbstractTestSimplePolicyEngine.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/AbstractTestSimplePolicyEngine.java
similarity index 96%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/AbstractTestSimplePolicyEngine.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/AbstractTestSimplePolicyEngine.java
index 8bb101f..bfa2d68 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/AbstractTestSimplePolicyEngine.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/AbstractTestSimplePolicyEngine.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.IOException;
@@ -24,9 +24,10 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Database;
 import org.apache.commons.io.FileUtils;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.provider.file.PolicyEngine;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/MockGroupMappingServiceProvider.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/MockGroupMappingServiceProvider.java
similarity index 93%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/MockGroupMappingServiceProvider.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/MockGroupMappingServiceProvider.java
index be04259..74956fc 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/MockGroupMappingServiceProvider.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/MockGroupMappingServiceProvider.java
@@ -14,11 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.sentry.provider.file.GroupMappingService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestAuthorizables.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestAuthorizables.java
similarity index 89%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestAuthorizables.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestAuthorizables.java
index 853b20f..f81b574 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestAuthorizables.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestAuthorizables.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNull;
 
-import org.apache.access.core.AccessURI;
-import org.apache.access.core.Database;
-import org.apache.access.core.Server;
-import org.apache.access.core.Table;
-import org.apache.access.core.View;
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.core.Table;
+import org.apache.sentry.core.View;
+import org.apache.sentry.provider.file.Authorizables;
 import org.junit.Test;
 
 public class TestAuthorizables {
diff --git a/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestDatabaseRequiredInRole.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestDatabaseRequiredInRole.java
new file mode 100644
index 0000000..fc35043
--- /dev/null
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestDatabaseRequiredInRole.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sentry.provider.file;
+
+import junit.framework.Assert;
+
+import org.apache.shiro.config.ConfigurationException;
+import org.junit.Test;
+
+public class TestDatabaseRequiredInRole {
+
+  @Test
+  public void testURIInPerDbPolicyFile() throws Exception {
+    DatabaseRequiredInRole dbRequiredInRole = new DatabaseRequiredInRole();
+    System.setProperty("sentry.allow.uri.db.policyfile", "true");
+    dbRequiredInRole.validate("db1",
+      "server=server1->URI=file:///user/hive/warehouse/tab1");
+    System.setProperty("sentry.allow.uri.db.policyfile", "false");
+  }
+
+  @Test
+  public void testURIWithDBInPerDbPolicyFile() throws Exception {
+    DatabaseRequiredInRole dbRequiredInRole = new DatabaseRequiredInRole();
+    try {
+      dbRequiredInRole.validate("db1",
+        "server=server1->db=db1->URI=file:///user/hive/warehouse/tab1");
+      Assert.fail("Expected ConfigurationException");
+    } catch (ConfigurationException e) {
+      ;
+    }
+  }
+}
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestKeyValue.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java
similarity index 93%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestKeyValue.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java
index 3f419bc..1fd64f1 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestKeyValue.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestKeyValue.java
@@ -16,11 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
-import static org.apache.access.provider.file.PolicyFileConstants.KV_JOINER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.KV_JOINER;
 
+import org.apache.sentry.provider.file.KeyValue;
 import org.junit.Test;
 
 public class TestKeyValue {
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestLocalGroupMapping.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestLocalGroupMapping.java
similarity index 93%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestLocalGroupMapping.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestLocalGroupMapping.java
index 939a0c1..f1d8192 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestLocalGroupMapping.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestLocalGroupMapping.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.IOException;
@@ -23,6 +23,8 @@
 
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.fs.Path;
+import org.apache.sentry.provider.file.LocalGroupMappingService;
+import org.apache.sentry.provider.file.PolicyFiles;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestPolicyParsingNegative.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestPolicyParsingNegative.java
similarity index 72%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestPolicyParsingNegative.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestPolicyParsingNegative.java
index 3e9fe0f..7285806 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestPolicyParsingNegative.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestPolicyParsingNegative.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.IOException;
@@ -22,10 +22,13 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Database;
-import org.apache.access.core.Server;
 import org.apache.commons.io.FileUtils;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.provider.file.PolicyEngine;
+import org.apache.sentry.provider.file.PolicyFile;
+import org.apache.sentry.provider.file.SimplePolicyEngine;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -105,7 +108,7 @@
         Arrays.asList(new Authorizable[] {
             new Server("server1")
     }), Lists.newArrayList("admin")).get("admin");
-    Assert.assertTrue(permissions.toString(), permissions.isEmpty());
+    Assert.assertEquals(permissions.toString(), "[server=server1]");
     // test to ensure [databases] fails parsing of per-db file
     // by removing the user mapping from the per-db policy file
     policyFile.removeGroupsFromUser("admin1", "admin")
@@ -115,7 +118,7 @@
         Arrays.asList(new Authorizable[] {
             new Server("server1")
     }), Lists.newArrayList("admin")).get("admin");
-    Assert.assertTrue(permissions.toString(), permissions.isEmpty());
+    Assert.assertEquals(permissions.toString(), "[server=server1]");
   }
   @Test
   public void testDatabaseRequiredInRole() throws Exception {
@@ -177,4 +180,61 @@
     Assert.assertTrue(permissions.toString(), permissions.isEmpty());
   }
 
+  /**
+   * Create policy file with multiple per db files.
+   * Verify that a file with bad format is the only one that's ignored
+   * @throws Exception
+   */
+  @Test
+  public void testMultiDbWithErrors() throws Exception {
+    File db1PolicyFile = new File(baseDir, "db1.ini");
+    File db2PolicyFile = new File(baseDir, "db2.ini");
+
+    // global policy file
+    append("[databases]", globalPolicyFile);
+    append("db1 = " + db1PolicyFile.getPath(), globalPolicyFile);
+    append("db2 = " + db2PolicyFile.getPath(), globalPolicyFile);
+    append("[groups]", globalPolicyFile);
+    append("db3_group = db3_rule", globalPolicyFile);
+    append("[roles]", globalPolicyFile);
+    append("db3_rule = server=server1->db=db3->table=sales->action=select", globalPolicyFile);
+
+    //db1 policy file with badly formatted rule
+    append("[groups]", db1PolicyFile);
+    append("db1_group = bad_rule", db1PolicyFile);
+    append("[roles]", db1PolicyFile);
+    append("bad_rule = server=server1->db=customers->=purchases->action=", db1PolicyFile);
+
+    //db2 policy file with proper rule
+    append("[groups]", db2PolicyFile);
+    append("db2_group = db2_rule", db2PolicyFile);
+    append("[roles]", db2PolicyFile);
+    append("db2_rule = server=server1->db=db2->table=purchases->action=select", db2PolicyFile);
+
+    PolicyEngine policy = new SimplePolicyEngine(globalPolicyFile.getPath(), "server1");
+
+    // verify that the db1 rule is empty
+    ImmutableSet<String> permissions = policy.getPermissions(
+        Arrays.asList(new Authorizable[] {
+            new Server("server1"),
+            new Database("db1")
+    }), Lists.newArrayList("db1_group")).get("db1_group");
+    Assert.assertTrue(permissions.toString(), permissions.isEmpty());
+
+    permissions = policy.getPermissions(
+        Arrays.asList(new Authorizable[] {
+            new Server("server1"),
+            new Database("db2")
+    }), Lists.newArrayList("db2_group")).get("db2_group");
+    Assert.assertEquals(permissions.toString(), 1, permissions.size());
+
+    permissions = policy.getPermissions(
+        Arrays.asList(new Authorizable[] {
+            new Server("server1"),
+            new Database("db2")
+    }), Lists.newArrayList("db2_group")).get("db2_group");
+    Assert.assertEquals(permissions.toString(), 1, permissions.size());
+
+  }
+
 }
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestResourceAuthorizationProviderGeneralCases.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestResourceAuthorizationProviderGeneralCases.java
similarity index 93%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestResourceAuthorizationProviderGeneralCases.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestResourceAuthorizationProviderGeneralCases.java
index 27a94ad..a8a946d 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestResourceAuthorizationProviderGeneralCases.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestResourceAuthorizationProviderGeneralCases.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.IOException;
@@ -24,14 +24,18 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.core.AccessConstants;
-import org.apache.access.core.Action;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.Database;
-import org.apache.access.core.Server;
-import org.apache.access.core.Subject;
-import org.apache.access.core.Table;
 import org.apache.commons.io.FileUtils;
+import org.apache.sentry.core.AccessConstants;
+import org.apache.sentry.core.Action;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.Database;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.core.Subject;
+import org.apache.sentry.core.Table;
+import org.apache.sentry.provider.file.HadoopGroupResourceAuthorizationProvider;
+import org.apache.sentry.provider.file.PolicyFiles;
+import org.apache.sentry.provider.file.ResourceAuthorizationProvider;
+import org.apache.sentry.provider.file.SimplePolicyEngine;
 import org.junit.After;
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestResourceAuthorizationProviderSpecialCases.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestResourceAuthorizationProviderSpecialCases.java
similarity index 91%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestResourceAuthorizationProviderSpecialCases.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestResourceAuthorizationProviderSpecialCases.java
index 7dd7cd8..14e2ff5 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestResourceAuthorizationProviderSpecialCases.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestResourceAuthorizationProviderSpecialCases.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.IOException;
@@ -23,13 +23,15 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.core.AccessURI;
-import org.apache.access.core.Action;
-import org.apache.access.core.Authorizable;
-import org.apache.access.core.AuthorizationProvider;
-import org.apache.access.core.Server;
-import org.apache.access.core.Subject;
 import org.apache.commons.io.FileUtils;
+import org.apache.sentry.core.AccessURI;
+import org.apache.sentry.core.Action;
+import org.apache.sentry.core.Authorizable;
+import org.apache.sentry.core.AuthorizationProvider;
+import org.apache.sentry.core.Server;
+import org.apache.sentry.core.Subject;
+import org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider;
+import org.apache.sentry.provider.file.PolicyFile;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestSimplePolicyEngineDFS.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestSimplePolicyEngineDFS.java
similarity index 93%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestSimplePolicyEngineDFS.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestSimplePolicyEngineDFS.java
index ef0f109..92e3b03 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestSimplePolicyEngineDFS.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestSimplePolicyEngineDFS.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.IOException;
@@ -25,6 +25,8 @@
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.apache.sentry.provider.file.PolicyFiles;
+import org.apache.sentry.provider.file.SimplePolicyEngine;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestSimplePolicyEngineLocalFS.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestSimplePolicyEngineLocalFS.java
similarity index 90%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestSimplePolicyEngineLocalFS.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestSimplePolicyEngineLocalFS.java
index 3093e4a..73cd673 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestSimplePolicyEngineLocalFS.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestSimplePolicyEngineLocalFS.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 
 import java.io.File;
 import java.io.IOException;
@@ -22,6 +22,8 @@
 import junit.framework.Assert;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.sentry.provider.file.PolicyFiles;
+import org.apache.sentry.provider.file.SimplePolicyEngine;
 
 public class TestSimplePolicyEngineLocalFS extends AbstractTestSimplePolicyEngine {
 
diff --git a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestWildcardPermission.java b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestWildcardPermission.java
similarity index 96%
rename from access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestWildcardPermission.java
rename to sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestWildcardPermission.java
index 2b230c6..77c3838 100644
--- a/access-provider/access-provider-file/src/test/java/org/apache/access/provider/file/TestWildcardPermission.java
+++ b/sentry-provider/sentry-provider-file/src/test/java/org/apache/sentry/provider/file/TestWildcardPermission.java
@@ -16,15 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.access.provider.file;
+package org.apache.sentry.provider.file;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertFalse;
 import static junit.framework.Assert.assertTrue;
-import static org.apache.access.provider.file.PolicyFileConstants.AUTHORIZABLE_JOINER;
-import static org.apache.access.provider.file.PolicyFileConstants.KV_JOINER;
-import static org.apache.access.provider.file.PolicyFileConstants.KV_SEPARATOR;
+import static org.apache.sentry.provider.file.PolicyFileConstants.AUTHORIZABLE_JOINER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.KV_JOINER;
+import static org.apache.sentry.provider.file.PolicyFileConstants.KV_SEPARATOR;
 
-import org.apache.access.core.AccessConstants;
+import org.apache.sentry.core.AccessConstants;
+import org.apache.sentry.provider.file.KeyValue;
+import org.apache.sentry.provider.file.WildcardPermission;
 import org.apache.shiro.authz.Permission;
 import org.junit.Test;
 
diff --git a/access-provider/access-provider-file/src/test/resources/log4j.properties b/sentry-provider/sentry-provider-file/src/test/resources/log4j.properties
similarity index 100%
rename from access-provider/access-provider-file/src/test/resources/log4j.properties
rename to sentry-provider/sentry-provider-file/src/test/resources/log4j.properties
diff --git a/access-provider/access-provider-file/src/test/resources/test-authz-provider-local-group-mapping.ini b/sentry-provider/sentry-provider-file/src/test/resources/test-authz-provider-local-group-mapping.ini
similarity index 100%
rename from access-provider/access-provider-file/src/test/resources/test-authz-provider-local-group-mapping.ini
rename to sentry-provider/sentry-provider-file/src/test/resources/test-authz-provider-local-group-mapping.ini
diff --git a/access-provider/access-provider-file/src/test/resources/test-authz-provider-other-group.ini b/sentry-provider/sentry-provider-file/src/test/resources/test-authz-provider-other-group.ini
similarity index 100%
rename from access-provider/access-provider-file/src/test/resources/test-authz-provider-other-group.ini
rename to sentry-provider/sentry-provider-file/src/test/resources/test-authz-provider-other-group.ini
diff --git a/access-provider/access-provider-file/src/test/resources/test-authz-provider.ini b/sentry-provider/sentry-provider-file/src/test/resources/test-authz-provider.ini
similarity index 100%
rename from access-provider/access-provider-file/src/test/resources/test-authz-provider.ini
rename to sentry-provider/sentry-provider-file/src/test/resources/test-authz-provider.ini
diff --git a/access-tests/pom.xml b/sentry-tests/pom.xml
similarity index 92%
rename from access-tests/pom.xml
rename to sentry-tests/pom.xml
index 5ce26d5..22e6cde 100644
--- a/access-tests/pom.xml
+++ b/sentry-tests/pom.xml
@@ -19,20 +19,36 @@
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>com.cloudera.cdh</groupId>
-    <artifactId>access</artifactId>
+    <artifactId>sentry</artifactId>
     <version>1.1.0-SNAPSHOT</version>
   </parent>
-  <artifactId>access-tests</artifactId>
+  <artifactId>sentry-tests</artifactId>
   <name>Access Tests</name>
-  <description>end to end tests for access project</description>
+  <description>end to end tests for sentry project</description>
   <properties>
     <hadoop-dist></hadoop-dist>
     <hive-dist>${hadoop-dist}</hive-dist>
   </properties>
   <dependencies>
     <dependency>
+      <groupId>org.apache.thrift</groupId>
+      <artifactId>libthrift</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.derby</groupId>
+      <artifactId>derby</artifactId>
+    </dependency>
+    <dependency>
+     <groupId>org.apache.thrift</groupId>
+      <artifactId>libthrift</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.derby</groupId>
+      <artifactId>derby</artifactId>
+    </dependency>
+    <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-core</artifactId>
+      <artifactId>sentry-core</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.hive</groupId>
@@ -179,7 +195,7 @@
     </dependency>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-binding-hive</artifactId>
+      <artifactId>sentry-binding-hive</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.shiro</groupId>
@@ -188,7 +204,7 @@
     </dependency>
     <dependency>
       <groupId>com.cloudera.cdh</groupId>
-      <artifactId>access-provider-file</artifactId>
+      <artifactId>sentry-provider-file</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.hadoop</groupId>
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithHiveServer.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithHiveServer.java
similarity index 94%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithHiveServer.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithHiveServer.java
index 880e5ec..d4060d3 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithHiveServer.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithHiveServer.java
@@ -14,18 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import java.io.File;
 import java.util.Map;
 
 import junit.framework.Assert;
 
-import org.apache.access.tests.e2e.hiveserver.HiveServer;
-import org.apache.access.tests.e2e.hiveserver.HiveServerFactory;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServer;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServerFactory;
 import org.junit.After;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticConfiguration.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticConfiguration.java
similarity index 96%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticConfiguration.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticConfiguration.java
index b0600ec..40232c8 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticConfiguration.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticConfiguration.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import java.io.File;
 import java.sql.Connection;
@@ -24,10 +24,10 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.tests.e2e.hiveserver.HiveServer;
-import org.apache.access.tests.e2e.hiveserver.HiveServerFactory;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServer;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServerFactory;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.slf4j.Logger;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticDFS.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticDFS.java
similarity index 95%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticDFS.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticDFS.java
index d0fb2f0..ab30fa5 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticDFS.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticDFS.java
@@ -14,17 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import java.io.File;
 import java.io.IOException;
 
 import junit.framework.Assert;
 
-import org.apache.access.tests.e2e.hiveserver.HiveServerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServerFactory;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticLocalFS.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticLocalFS.java
similarity index 93%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticLocalFS.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticLocalFS.java
index f449247..c29c16c 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/AbstractTestWithStaticLocalFS.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/AbstractTestWithStaticLocalFS.java
@@ -14,11 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
-import org.apache.access.tests.e2e.hiveserver.HiveServerFactory;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServerFactory;
 import org.junit.BeforeClass;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/Context.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/Context.java
similarity index 98%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/Context.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/Context.java
index e7d9d9d..687b154 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/Context.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/Context.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -34,8 +34,8 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.tests.e2e.hiveserver.HiveServer;
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/MockUserToGroupMapping.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/DummySentryOnFailureHook.java
similarity index 68%
copy from access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/MockUserToGroupMapping.java
copy to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/DummySentryOnFailureHook.java
index e46e7a5..87d1b01 100644
--- a/access-binding/access-binding-hive/src/test/java/org/apache/access/binding/hive/MockUserToGroupMapping.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/DummySentryOnFailureHook.java
@@ -15,20 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.access.binding.hive;
+package org.apache.sentry.tests.e2e;
 
-import java.util.List;
+import org.apache.sentry.binding.hive.SentryOnFailureHook;
+import org.apache.sentry.binding.hive.SentryOnFailureHookContext;
 
-import org.apache.access.provider.file.GroupMappingService;
+public class DummySentryOnFailureHook implements SentryOnFailureHook {
 
-import com.google.common.collect.Lists;
+  static boolean invoked = false;
 
-public class MockUserToGroupMapping implements GroupMappingService {
-
-  // User to group 1-to-1 map
   @Override
-  public List<String> getGroups(String user) {
-    return Lists.newArrayList(user);
+  public void run(SentryOnFailureHookContext failureHookContext)
+      throws Exception {
+    invoked = true;
   }
-
 }
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/PolicyFileEditor.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/PolicyFileEditor.java
similarity index 97%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/PolicyFileEditor.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/PolicyFileEditor.java
index 8207cde..69bf2ad 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/PolicyFileEditor.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/PolicyFileEditor.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 
 
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestCrossDbOps.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestCrossDbOps.java
similarity index 98%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestCrossDbOps.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestCrossDbOps.java
index 5d585fc..c619bb0 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestCrossDbOps.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestCrossDbOps.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -32,7 +32,7 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.provider.file.PolicyFile;
+import org.apache.sentry.provider.file.PolicyFile;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -242,7 +242,7 @@
     ResultSet res = conn.getMetaData().getSchemas();
     ResultSetMetaData resMeta = res.getMetaData();
     assertEquals(2, resMeta.getColumnCount());
-    assertEquals("TABLE_SCHEMA", resMeta.getColumnName(1));
+    assertEquals("TABLE_SCHEM", resMeta.getColumnName(1));
     assertEquals("TABLE_CATALOG", resMeta.getColumnName(2));
 
     result.add("db1");
@@ -310,7 +310,7 @@
     res = conn.getMetaData().getSchemas();
     resMeta = res.getMetaData();
     assertEquals(2, resMeta.getColumnCount());
-    assertEquals("TABLE_SCHEMA", resMeta.getColumnName(1));
+    assertEquals("TABLE_SCHEM", resMeta.getColumnName(1));
     assertEquals("TABLE_CATALOG", resMeta.getColumnName(2));
 
     result.add("db2");
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestEndToEnd.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestEndToEnd.java
similarity index 98%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestEndToEnd.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestEndToEnd.java
index 878424f..a643e17 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestEndToEnd.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestEndToEnd.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import java.io.File;
 import java.io.FileOutputStream;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestExportImportPrivileges.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestExportImportPrivileges.java
similarity index 98%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestExportImportPrivileges.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestExportImportPrivileges.java
index 3bc3227..dba478e 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestExportImportPrivileges.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestExportImportPrivileges.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertTrue;
 
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestMetadataObjectRetrieval.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMetadataObjectRetrieval.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestMetadataObjectRetrieval.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMetadataObjectRetrieval.java
index a604d47..ffc79c5 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestMetadataObjectRetrieval.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMetadataObjectRetrieval.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -26,7 +26,7 @@
 import java.sql.ResultSet;
 import java.sql.Statement;
 
-import org.apache.access.provider.file.PolicyFile;
+import org.apache.sentry.provider.file.PolicyFile;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestMetadataPermissions.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMetadataPermissions.java
similarity index 98%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestMetadataPermissions.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMetadataPermissions.java
index 7b90b74..6036eaa 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestMetadataPermissions.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMetadataPermissions.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import java.sql.Connection;
 import java.sql.SQLException;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestMovingToProduction.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMovingToProduction.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestMovingToProduction.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMovingToProduction.java
index 90890d8..dba6d9f 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestMovingToProduction.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestMovingToProduction.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPerDBConfiguration.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPerDBConfiguration.java
new file mode 100644
index 0000000..e265f3d
--- /dev/null
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPerDBConfiguration.java
@@ -0,0 +1,423 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sentry.tests.e2e;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import org.apache.sentry.provider.file.SimplePolicyEngine;
+import org.junit.After;
+import org.junit.Test;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Joiner;
+import com.google.common.io.Files;
+import com.google.common.io.Resources;
+
+/**
+ * Test privileges per database policy files
+ */
+public class TestPerDBConfiguration extends AbstractTestWithStaticLocalFS {
+  private static final String MULTI_TYPE_DATA_FILE_NAME = "emp.dat";
+  private static final String DB2_POLICY_FILE = "db2-policy-file.ini";
+
+  private Context context;
+
+  @After
+  public void teardown() throws Exception {
+    if (context != null) {
+      context.close();
+    }
+  }
+
+  @Test
+  public void testPerDB() throws Exception {
+    context = createContext();
+    File policyFile = context.getPolicyFile();
+    File db2PolicyFile = new File(policyFile.getParent(), DB2_POLICY_FILE);
+    File dataDir = context.getDataDir();
+    //copy data file to test dir
+    File dataFile = new File(dataDir, MULTI_TYPE_DATA_FILE_NAME);
+    FileOutputStream to = new FileOutputStream(dataFile);
+    Resources.copy(Resources.getResource(MULTI_TYPE_DATA_FILE_NAME), to);
+    to.close();
+    //delete existing policy file; create new policy file
+    assertTrue("Could not delete " + policyFile, context.deletePolicyFile());
+    assertTrue("Could not delete " + db2PolicyFile,!db2PolicyFile.exists() || db2PolicyFile.delete());
+
+    String[] policyFileContents = {
+        // groups : role -> group
+        "[groups]",
+        "admin = all_server",
+        "user_group1 = select_tbl1",
+        "user_group2 = select_tbl2",
+        // roles: privileges -> role
+        "[roles]",
+        "all_server = server=server1",
+        "select_tbl1 = server=server1->db=db1->table=tbl1->action=select",
+        // users: users -> groups
+        "[users]",
+        "hive = admin",
+        "user_1 = user_group1",
+        "user_2 = user_group2",
+        "[databases]",
+        "db2 = " + db2PolicyFile.getPath(),
+    };
+    context.makeNewPolicy(policyFileContents);
+
+    String[] db2PolicyFileContents = {
+        "[groups]",
+        "user_group2 = select_tbl2",
+        "[roles]",
+        "select_tbl2 = server=server1->db=db2->table=tbl2->action=select"
+    };
+    Files.write(Joiner.on("\n").join(db2PolicyFileContents), db2PolicyFile, Charsets.UTF_8);
+
+    // setup db objects needed by the test
+    Connection connection = context.createConnection("hive", "hive");
+    Statement statement = context.createStatement(connection);
+
+    statement.execute("DROP DATABASE IF EXISTS db1 CASCADE");
+    statement.execute("DROP DATABASE IF EXISTS db2 CASCADE");
+    statement.execute("CREATE DATABASE db1");
+    statement.execute("USE db1");
+    statement.execute("CREATE TABLE tbl1(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl1");
+    statement.execute("DROP DATABASE IF EXISTS db2 CASCADE");
+    statement.execute("CREATE DATABASE db2");
+    statement.execute("USE db2");
+    statement.execute("CREATE TABLE tbl2(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl2");
+    statement.close();
+    connection.close();
+
+    // test execution
+    connection = context.createConnection("user_1", "password");
+    statement = context.createStatement(connection);
+    statement.execute("USE db1");
+    // test user1 can execute query on tbl1
+    verifyCount(statement, "SELECT COUNT(*) FROM tbl1");
+
+    // user1 cannot query db2.tbl2
+    context.assertAuthzException(statement, "USE db2");
+    context.assertAuthzException(statement, "SELECT COUNT(*) FROM db2.tbl2");
+    statement.close();
+    connection.close();
+
+    // test per-db file for db2
+
+    connection = context.createConnection("user_2", "password");
+    statement = context.createStatement(connection);
+    statement.execute("USE db2");
+    // test user2 can execute query on tbl2
+    verifyCount(statement, "SELECT COUNT(*) FROM tbl2");
+
+    // user2 cannot query db1.tbl1
+    context.assertAuthzException(statement, "SELECT COUNT(*) FROM db1.tbl1");
+    context.assertAuthzException(statement, "USE db1");
+
+    statement.close();
+    connection.close();
+
+    //test cleanup
+    connection = context.createConnection("hive", "hive");
+    statement = context.createStatement(connection);
+    statement.execute("DROP DATABASE db1 CASCADE");
+    statement.execute("DROP DATABASE db2 CASCADE");
+    statement.close();
+    connection.close();
+  }
+
+  /**
+   * Multiple DB files with some containing badly formatted rules
+   * The privileges should work for good files
+   * No access for bad formatted ones
+   * @throws Exception
+   */
+  @Test
+  public void testMultiPerDBwithErrors() throws Exception {
+    String DB3_POLICY_FILE = "db3-policy-file.ini";
+    String DB4_POLICY_FILE = "db4-policy-file.ini";
+
+    context = createContext();
+    File policyFile = context.getPolicyFile();
+    File db2PolicyFile = new File(policyFile.getParent(), DB2_POLICY_FILE);
+    File db3PolicyFile = new File(policyFile.getParent(), DB3_POLICY_FILE);
+    File db4PolicyFile = new File(policyFile.getParent(), DB4_POLICY_FILE);
+    File dataDir = context.getDataDir();
+    //copy data file to test dir
+    File dataFile = new File(dataDir, MULTI_TYPE_DATA_FILE_NAME);
+    FileOutputStream to = new FileOutputStream(dataFile);
+    Resources.copy(Resources.getResource(MULTI_TYPE_DATA_FILE_NAME), to);
+    to.close();
+    //delete existing policy file; create new policy file
+    assertTrue("Could not delete " + policyFile, context.deletePolicyFile());
+    assertTrue("Could not delete " + db2PolicyFile,!db2PolicyFile.exists() || db2PolicyFile.delete());
+
+    String[] policyFileContents = {
+        // groups : role -> group
+        "[groups]",
+        "admin = all_server",
+        "user_group1 = select_tbl1",
+        "user_group2 = select_tbl2",
+        // roles: privileges -> role
+        "[roles]",
+        "all_server = server=server1",
+        "select_tbl1 = server=server1->db=db1->table=tbl1->action=select",
+        // users: users -> groups
+        "[users]",
+        "hive = admin",
+        "user_1 = user_group1",
+        "user_2 = user_group2",
+        "user_3 = user_group3",
+        "user_4 = user_group4",
+        "[databases]",
+        "db2 = " + db2PolicyFile.getPath(),
+        "db3 = " + db3PolicyFile.getPath(),
+        "db4 = " + db4PolicyFile.getPath(),
+    };
+    context.makeNewPolicy(policyFileContents);
+
+    String[] db2PolicyFileContents = {
+        "[groups]",
+        "user_group2 = select_tbl2",
+        "[roles]",
+        "select_tbl2 = server=server1->db=db2->table=tbl2->action=select"
+    };
+    String[] db3PolicyFileContents = {
+        "[groups]",
+        "user_group3 = select_tbl3_BAD",
+        "[roles]",
+        "select_tbl3_BAD = server=server1->db=db3------>table->action=select"
+    };
+    String[] db4PolicyFileContents = {
+        "[groups]",
+        "user_group4 = select_tbl4",
+        "[roles]",
+        "select_tbl4 = server=server1->db=db4->table=tbl4->action=select"
+    };
+
+    Files.write(Joiner.on("\n").join(db2PolicyFileContents), db2PolicyFile, Charsets.UTF_8);
+    Files.write(Joiner.on("\n").join(db3PolicyFileContents), db3PolicyFile, Charsets.UTF_8);
+    Files.write(Joiner.on("\n").join(db4PolicyFileContents), db4PolicyFile, Charsets.UTF_8);
+
+    // setup db objects needed by the test
+    Connection connection = context.createConnection("hive", "hive");
+    Statement statement = context.createStatement(connection);
+
+    statement.execute("DROP DATABASE IF EXISTS db1 CASCADE");
+    statement.execute("CREATE DATABASE db1");
+    statement.execute("USE db1");
+    statement.execute("CREATE TABLE tbl1(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl1");
+
+    statement.execute("DROP DATABASE IF EXISTS db2 CASCADE");
+    statement.execute("CREATE DATABASE db2");
+    statement.execute("USE db2");
+    statement.execute("CREATE TABLE tbl2(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl2");
+
+    statement.execute("DROP DATABASE IF EXISTS db3 CASCADE");
+    statement.execute("CREATE DATABASE db3");
+    statement.execute("USE db3");
+    statement.execute("CREATE TABLE tbl3(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl3");
+
+    statement.execute("DROP DATABASE IF EXISTS db4 CASCADE");
+    statement.execute("CREATE DATABASE db4");
+    statement.execute("USE db4");
+    statement.execute("CREATE TABLE tbl4(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl4");
+
+    statement.close();
+    connection.close();
+
+    // test execution
+    connection = context.createConnection("user_1", "password");
+    statement = context.createStatement(connection);
+    statement.execute("USE db1");
+    // test user1 can execute query on tbl1
+    verifyCount(statement, "SELECT COUNT(*) FROM tbl1");
+    connection.close();
+
+    connection = context.createConnection("user_2", "password");
+    statement = context.createStatement(connection);
+    statement.execute("USE db2");
+    // test user1 can execute query on tbl1
+    verifyCount(statement, "SELECT COUNT(*) FROM tbl2");
+    connection.close();
+
+    // verify no access to db3 due to badly formatted rule in db3 policy file
+    connection = context.createConnection("user_3", "password");
+    statement = context.createStatement(connection);
+    context.assertAuthzException(statement, "USE db3");
+    // test user1 can execute query on tbl1
+    context.assertAuthzException(statement, "SELECT COUNT(*) FROM db3.tbl3");
+    connection.close();
+
+    connection = context.createConnection("user_4", "password");
+    statement = context.createStatement(connection);
+    statement.execute("USE db4");
+    // test user1 can execute query on tbl1
+    verifyCount(statement, "SELECT COUNT(*) FROM tbl4");
+    connection.close();
+
+    //test cleanup
+    connection = context.createConnection("hive", "hive");
+    statement = context.createStatement(connection);
+    statement.execute("DROP DATABASE db1 CASCADE");
+    statement.execute("DROP DATABASE db2 CASCADE");
+    statement.execute("DROP DATABASE db3 CASCADE");
+    statement.execute("DROP DATABASE db4 CASCADE");
+    statement.close();
+    connection.close();
+  }
+
+  @Test
+  public void testPerDBPolicyFileWithURI() throws Exception {
+    context = createContext();
+    File policyFile = context.getPolicyFile();
+    File db2PolicyFile = new File(policyFile.getParent(), DB2_POLICY_FILE);
+    File dataDir = context.getDataDir();
+    //copy data file to test dir
+    File dataFile = new File(dataDir, MULTI_TYPE_DATA_FILE_NAME);
+    FileOutputStream to = new FileOutputStream(dataFile);
+    Resources.copy(Resources.getResource(MULTI_TYPE_DATA_FILE_NAME), to);
+    to.close();
+    //delete existing policy file; create new policy file
+    assertTrue("Could not delete " + policyFile, context.deletePolicyFile());
+    assertTrue("Could not delete " + db2PolicyFile,!db2PolicyFile.exists() || db2PolicyFile.delete());
+
+    String[] policyFileContents = {
+        // groups : role -> group
+        "[groups]",
+        "admin = all_server",
+        "user_group1 = select_tbl1",
+        "user_group2 = select_tbl2",
+        // roles: privileges -> role
+        "[roles]",
+        "all_server = server=server1",
+        "select_tbl1 = server=server1->db=db1->table=tbl1->action=select",
+        // users: users -> groups
+        "[users]",
+        "hive = admin",
+        "user_1 = user_group1",
+        "user_2 = user_group2",
+        "[databases]",
+        "db2 = " + db2PolicyFile.getPath(),
+    };
+    context.makeNewPolicy(policyFileContents);
+
+    String[] db2PolicyFileContents = {
+        "[groups]",
+        "user_group2 = select_tbl2, data_read, insert_tbl2",
+        "[roles]",
+        "select_tbl2 = server=server1->db=db2->table=tbl2->action=select",
+        "insert_tbl2 = server=server1->db=db2->table=tbl2->action=insert",
+        "data_read = server=server1->URI=file://" + dataFile
+    };
+    Files.write(Joiner.on("\n").join(db2PolicyFileContents), db2PolicyFile, Charsets.UTF_8);
+    // ugly hack: needs to go away once this becomes a config property. Note that this property
+    // will not be set with external HS and this test will fail. Hope is this fix will go away
+    // by then.
+    System.setProperty(SimplePolicyEngine.ACCESS_ALLOW_URI_PER_DB_POLICYFILE, "true");
+    // setup db objects needed by the test
+    Connection connection = context.createConnection("hive", "hive");
+    Statement statement = context.createStatement(connection);
+
+    statement.execute("DROP DATABASE IF EXISTS db1 CASCADE");
+    statement.execute("DROP DATABASE IF EXISTS db2 CASCADE");
+    statement.execute("CREATE DATABASE db1");
+    statement.execute("USE db1");
+    statement.execute("CREATE TABLE tbl1(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl1");
+    statement.execute("DROP DATABASE IF EXISTS db2 CASCADE");
+    statement.execute("CREATE DATABASE db2");
+    statement.execute("USE db2");
+    statement.execute("CREATE TABLE tbl2(B INT, A STRING) " +
+                      " row format delimited fields terminated by '|'  stored as textfile");
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl2");
+    statement.close();
+    connection.close();
+
+    // test execution
+    connection = context.createConnection("user_1", "password");
+    statement = context.createStatement(connection);
+    statement.execute("USE db1");
+    // test user1 can execute query on tbl1
+    verifyCount(statement, "SELECT COUNT(*) FROM tbl1");
+
+    // user1 cannot query db2.tbl2
+    context.assertAuthzException(statement, "USE db2");
+    context.assertAuthzException(statement, "SELECT COUNT(*) FROM db2.tbl2");
+    statement.close();
+    connection.close();
+
+    // test per-db file for db2
+    connection = context.createConnection("user_2", "password");
+    statement = context.createStatement(connection);
+    statement.execute("USE db2");
+    // test user2 can execute query on tbl2
+    verifyCount(statement, "SELECT COUNT(*) FROM tbl2");
+
+    // verify user2 can execute LOAD
+    statement.execute("LOAD DATA LOCAL INPATH '" + dataFile.getPath() + "' INTO TABLE tbl2");
+
+    // user2 cannot query db1.tbl1
+    context.assertAuthzException(statement, "SELECT COUNT(*) FROM db1.tbl1");
+    context.assertAuthzException(statement, "USE db1");
+
+    statement.close();
+    connection.close();
+
+    //test cleanup
+    connection = context.createConnection("hive", "hive");
+    statement = context.createStatement(connection);
+    statement.execute("DROP DATABASE db1 CASCADE");
+    statement.execute("DROP DATABASE db2 CASCADE");
+    statement.close();
+    connection.close();
+    System.setProperty(SimplePolicyEngine.ACCESS_ALLOW_URI_PER_DB_POLICYFILE, "false");
+  }
+
+  private void verifyCount(Statement statement, String query) throws SQLException {
+    ResultSet resultSet = statement.executeQuery(query);
+    int count = 0;
+    int countRows = 0;
+
+    while (resultSet.next()) {
+      count = resultSet.getInt(1);
+      countRows++;
+    }
+    assertTrue("Incorrect row count", countRows == 1);
+    assertTrue("Incorrect result", count == 12);
+  }
+}
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPerDatabasePolicyFile.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPerDatabasePolicyFile.java
similarity index 97%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestPerDatabasePolicyFile.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPerDatabasePolicyFile.java
index f2ec906..8c0fb71 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPerDatabasePolicyFile.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPerDatabasePolicyFile.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertTrue;
 
@@ -24,7 +24,7 @@
 import java.sql.Connection;
 import java.sql.Statement;
 
-import org.apache.access.provider.file.PolicyFile;
+import org.apache.sentry.provider.file.PolicyFile;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegeAtTransform.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegeAtTransform.java
similarity index 97%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegeAtTransform.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegeAtTransform.java
index 4d71a5f..53f295d 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegeAtTransform.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegeAtTransform.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertTrue;
 
@@ -24,7 +24,7 @@
 import java.sql.Connection;
 import java.sql.Statement;
 
-import org.apache.access.provider.file.PolicyFile;
+import org.apache.sentry.provider.file.PolicyFile;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtDatabaseScope.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtDatabaseScope.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtDatabaseScope.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtDatabaseScope.java
index fdf1544..a046c8f 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtDatabaseScope.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtDatabaseScope.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -31,7 +31,7 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf.AuthzConfVars;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtFunctionScope.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtFunctionScope.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtFunctionScope.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtFunctionScope.java
index f8324b6..90d6214 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtFunctionScope.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtFunctionScope.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertFalse;
 
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtTableScope.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtTableScope.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtTableScope.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtTableScope.java
index dcaa8fe..3da96a0 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestPrivilegesAtTableScope.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestPrivilegesAtTableScope.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestRuntimeMetadataRetrieval.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestRuntimeMetadataRetrieval.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestRuntimeMetadataRetrieval.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestRuntimeMetadataRetrieval.java
index 3a90656..27871a1 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestRuntimeMetadataRetrieval.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestRuntimeMetadataRetrieval.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import java.io.File;
 import java.io.FileOutputStream;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestSandboxOps.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestSandboxOps.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestSandboxOps.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestSandboxOps.java
index 1bec36d..2996eab 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestSandboxOps.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestSandboxOps.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -26,8 +26,8 @@
 import java.sql.ResultSet;
 import java.sql.Statement;
 
-import org.apache.access.provider.file.PolicyFile;
 import org.apache.hadoop.fs.Path;
+import org.apache.sentry.provider.file.PolicyFile;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestSentryOnFailureHookLoading.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestSentryOnFailureHookLoading.java
new file mode 100644
index 0000000..139d43f
--- /dev/null
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestSentryOnFailureHookLoading.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.sentry.tests.e2e;
+
+import com.google.common.io.Resources;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServerFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+import java.util.Map;
+import junit.framework.Assert;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertFalse;
+
+public class TestSentryOnFailureHookLoading extends AbstractTestWithHiveServer {
+
+  private Context context;
+  Map<String, String > testProperties;
+  private static final String SINGLE_TYPE_DATA_FILE_NAME = "kv1.dat";
+
+  @Before
+  public void setup() throws Exception {
+    testProperties = new HashMap<String, String>();
+    testProperties.put(HiveAuthzConf.AuthzConfVars.AUTHZ_ONFAILURE_HOOKS.getVar(),
+        DummySentryOnFailureHook.class.getName());
+  }
+
+  @After
+  public void teardown() throws Exception {
+    if (context != null) {
+      context.close();
+    }
+  }
+
+  /* Admin creates database DB_2
+   * USER_1 tries to drop DB_2, but it has permissions for DB_1.
+   */
+  @Test
+  public void testOnFailureHookLoading() throws Exception {
+
+    // Do not run this test if run with external HiveServer2
+    // This test checks for a static member, which will not
+    // be set if HiveServer2 and the test run in different JVMs
+    String hiveServer2Type = System.getProperty(
+        HiveServerFactory.HIVESERVER2_TYPE);
+    if (hiveServer2Type != null &&
+        HiveServerFactory.HiveServer2Type.valueOf(hiveServer2Type.trim()) !=
+        HiveServerFactory.HiveServer2Type.InternalHiveServer2) {
+      return;
+    }
+
+    context = createContext(testProperties);
+
+    File policyFile = context.getPolicyFile();
+    File dataDir = context.getDataDir();
+    //copy data file to test dir
+    File dataFile = new File(dataDir, SINGLE_TYPE_DATA_FILE_NAME);
+    FileOutputStream to = new FileOutputStream(dataFile);
+    Resources.copy(Resources.getResource(SINGLE_TYPE_DATA_FILE_NAME), to);
+    to.close();
+    //delete existing policy file; create new policy file
+    assertTrue("Could not delete " + policyFile, context.deletePolicyFile());
+    // groups : role -> group
+    context.append("[groups]");
+    context.append("admin = all_server");
+    context.append("user_group1 = all_db1, load_data");
+    // roles: privileges -> role
+    context.append("[roles]");
+    context.append("all_server = server=server1");
+    context.append("all_db1 = server=server1->db=DB_1");
+    // users: users -> groups
+    context.append("[users]");
+    context.append("hive = admin");
+    context.append("user_1 = user_group1");
+    // setup db objects needed by the test
+    Connection connection = context.createConnection("hive", "hive");
+    Statement statement = context.createStatement(connection);
+    statement.execute("DROP DATABASE IF EXISTS DB_1 CASCADE");
+    statement.execute("DROP DATABASE IF EXISTS DB_2 CASCADE");
+    statement.execute("CREATE DATABASE DB_1");
+    statement.execute("CREATE DATABASE DB_2");
+    statement.close();
+    connection.close();
+
+    // test execution
+    connection = context.createConnection("user_1", "password");
+    statement = context.createStatement(connection);
+
+    //negative test case: user can't drop another user's database
+    assertFalse(DummySentryOnFailureHook.invoked);
+      try {
+      statement.execute("DROP DATABASE DB_2 CASCADE");
+      Assert.fail("Expected SQL exception");
+    } catch (SQLException e) {
+      assertTrue(DummySentryOnFailureHook.invoked);
+    }
+
+    statement.close();
+    connection.close();
+
+    //test cleanup
+    connection = context.createConnection("hive", "hive");
+    statement = context.createStatement(connection);
+    statement.execute("DROP DATABASE DB_1 CASCADE");
+    statement.execute("DROP DATABASE DB_2 CASCADE");
+    statement.close();
+    connection.close();
+    context.close();
+  }
+}
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestServerConfiguration.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestServerConfiguration.java
similarity index 96%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestServerConfiguration.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestServerConfiguration.java
index 971244a..aaad396 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestServerConfiguration.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestServerConfiguration.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -29,12 +29,12 @@
 import java.sql.Statement;
 import java.util.Map;
 
-import org.apache.access.binding.hive.HiveAuthzBindingSessionHook;
-import org.apache.access.binding.hive.conf.HiveAuthzConf;
-import org.apache.access.provider.file.PolicyFile;
-import org.apache.access.tests.e2e.hiveserver.HiveServerFactory;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
+import org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
+import org.apache.sentry.provider.file.PolicyFile;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServerFactory;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestUriPermissions.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestUriPermissions.java
similarity index 98%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestUriPermissions.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestUriPermissions.java
index 6c08617..cd6eb14 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestUriPermissions.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestUriPermissions.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
@@ -22,7 +22,7 @@
 
 import junit.framework.Assert;
 
-import org.apache.access.tests.e2e.hiveserver.HiveServerFactory;
+import org.apache.sentry.tests.e2e.hiveserver.HiveServerFactory;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/TestUserManagement.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestUserManagement.java
similarity index 99%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/TestUserManagement.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestUserManagement.java
index 8f82b97..fba3878 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/TestUserManagement.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/TestUserManagement.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e;
+package org.apache.sentry.tests.e2e;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/AbstractHiveServer.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/AbstractHiveServer.java
similarity index 97%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/AbstractHiveServer.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/AbstractHiveServer.java
index ae53d7f..0c2fbc3 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/AbstractHiveServer.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/AbstractHiveServer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e.hiveserver;
+package org.apache.sentry.tests.e2e.hiveserver;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/EmbeddedHiveServer.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/EmbeddedHiveServer.java
similarity index 96%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/EmbeddedHiveServer.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/EmbeddedHiveServer.java
index 9052f00..48c112c 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/EmbeddedHiveServer.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/EmbeddedHiveServer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e.hiveserver;
+package org.apache.sentry.tests.e2e.hiveserver;
 
 import org.apache.hadoop.hive.metastore.HiveMetaStore;
 import org.fest.reflect.core.Reflection;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/ExternalHiveServer.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/ExternalHiveServer.java
similarity index 94%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/ExternalHiveServer.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/ExternalHiveServer.java
index 28b82dc..6065002 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/ExternalHiveServer.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/ExternalHiveServer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e.hiveserver;
+package org.apache.sentry.tests.e2e.hiveserver;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -107,13 +107,13 @@
     String clazzPath = Preconditions.checkNotNull(System.getProperty("java.class.path"), "java.class.path");
     String sep = Preconditions.checkNotNull(System.getProperty("path.separator"), "path.separator");
     for(String item : Splitter.on(sep).omitEmptyStrings().trimResults().split(clazzPath)) {
-      if(item.endsWith("/access-tests/target/classes") ||
-          item.endsWith("/access-tests/target/test-classes")) {
+      if(item.endsWith("/sentry-tests/target/classes") ||
+          item.endsWith("/sentry-tests/target/test-classes")) {
         result.add(item);
       } else {
         File clazzPathItem = new File(item);
         String fileName = clazzPathItem.getName();
-        if(clazzPathItem.isFile() && fileName.startsWith("access-") && fileName.endsWith(".jar")) {
+        if(clazzPathItem.isFile() && fileName.startsWith("sentry-") && fileName.endsWith(".jar")) {
           result.add(item);
         }
       }
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/HiveServer.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/HiveServer.java
similarity index 95%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/HiveServer.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/HiveServer.java
index 58e161e..ce4b3e8 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/HiveServer.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/HiveServer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e.hiveserver;
+package org.apache.sentry.tests.e2e.hiveserver;
 
 public interface HiveServer {
 
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/HiveServerFactory.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/HiveServerFactory.java
similarity index 92%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/HiveServerFactory.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/HiveServerFactory.java
index 873176c..5292eaa 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/HiveServerFactory.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/HiveServerFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e.hiveserver;
+package org.apache.sentry.tests.e2e.hiveserver;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -24,12 +24,13 @@
 import java.net.URL;
 import java.util.Map;
 
-import org.apache.access.binding.hive.conf.HiveAuthzConf;
-import org.apache.access.provider.file.LocalGroupResourceAuthorizationProvider;
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.hdfs.DistributedFileSystem;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
+import org.apache.sentry.binding.hive.conf.HiveAuthzConf;
+import org.apache.sentry.provider.file.LocalGroupResourceAuthorizationProvider;
 import org.fest.reflect.core.Reflection;
 import org.junit.Assert;
 import org.slf4j.Logger;
@@ -42,8 +43,8 @@
       .getLogger(HiveServerFactory.class);
   private static final String HIVE_DRIVER_NAME = "org.apache.hive.jdbc.HiveDriver";
   private static final String DERBY_DRIVER_NAME = "org.apache.derby.jdbc.EmbeddedDriver";
-  public static final String HIVESERVER2_TYPE = "access.e2etest.hiveServer2Type";
-  public static final String KEEP_BASEDIR = "access.e2etest.keepBaseDir";
+  public static final String HIVESERVER2_TYPE = "sentry.e2etest.hiveServer2Type";
+  public static final String KEEP_BASEDIR = "sentry.e2etest.keepBaseDir";
   public static final String METASTORE_CONNECTION_URL = HiveConf.ConfVars.METASTORECONNECTURLKEY.varname;
   public static final String WAREHOUSE_DIR = HiveConf.ConfVars.METASTOREWAREHOUSE.varname;
   public static final String AUTHZ_PROVIDER = HiveAuthzConf.AuthzConfVars.AUTHZ_PROVIDER.getVar();
@@ -148,7 +149,7 @@
       .in(HiveConf.class)
       .set(null);
     HiveConf hiveConf = new HiveConf();
-    HiveAuthzConf authzConf = new HiveAuthzConf(Resources.getResource("access-site.xml"));
+    HiveAuthzConf authzConf = new HiveAuthzConf(Resources.getResource("sentry-site.xml"));
     for(Map.Entry<String, String> entry : properties.entrySet()) {
       LOGGER.info(entry.getKey() + " => " + entry.getValue());
       hiveConf.set(entry.getKey(), entry.getValue());
@@ -161,8 +162,10 @@
     out.close();
     // points hive-site.xml at access-site.xml
     hiveConf.set(HiveAuthzConf.HIVE_ACCESS_CONF_URL, accessSite.toURI().toURL().toExternalForm());
-    hiveConf.set(HiveConf.ConfVars.HIVE_SERVER2_SESSION_HOOK.varname,
-        "org.apache.access.binding.hive.HiveAuthzBindingSessionHook");
+    if(!properties.containsKey(HiveConf.ConfVars.HIVE_SERVER2_SESSION_HOOK.varname)) {
+      hiveConf.set(HiveConf.ConfVars.HIVE_SERVER2_SESSION_HOOK.varname,
+        "org.apache.sentry.binding.hive.HiveAuthzBindingSessionHook");
+    }
     out = new FileOutputStream(hiveSite);
     hiveConf.writeXml(out);
     out.close();
@@ -196,7 +199,8 @@
     return port;
   }
 
-  private static enum HiveServer2Type {
+  @VisibleForTesting
+  public static enum HiveServer2Type {
     EmbeddedHiveServer2,           // Embedded HS2, directly executed by JDBC, without thrift
     InternalHiveServer2,        // Start a thrift HS2 in the same process
     ExternalHiveServer2,   // start a remote thrift HS2
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/InternalHiveServer.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/InternalHiveServer.java
similarity index 97%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/InternalHiveServer.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/InternalHiveServer.java
index 50739c7..7e0fed7 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/InternalHiveServer.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/InternalHiveServer.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.access.tests.e2e.hiveserver;
+package org.apache.sentry.tests.e2e.hiveserver;
 
 import java.io.IOException;
 import org.apache.hadoop.hive.conf.HiveConf;
diff --git a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/UnmanagedHiveServer.java b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/UnmanagedHiveServer.java
similarity index 95%
rename from access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/UnmanagedHiveServer.java
rename to sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/UnmanagedHiveServer.java
index 7691e29..288d2f7 100644
--- a/access-tests/src/test/java/org/apache/access/tests/e2e/hiveserver/UnmanagedHiveServer.java
+++ b/sentry-tests/src/test/java/org/apache/sentry/tests/e2e/hiveserver/UnmanagedHiveServer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.access.tests.e2e.hiveserver;
+package org.apache.sentry.tests.e2e.hiveserver;
 
 import org.apache.hadoop.hive.conf.HiveConf;
 
diff --git a/access-tests/src/test/resources/access-site.xml b/sentry-tests/src/test/resources/access-site.xml
similarity index 100%
rename from access-tests/src/test/resources/access-site.xml
rename to sentry-tests/src/test/resources/access-site.xml
diff --git a/access-tests/src/test/resources/emp.dat b/sentry-tests/src/test/resources/emp.dat
similarity index 100%
rename from access-tests/src/test/resources/emp.dat
rename to sentry-tests/src/test/resources/emp.dat
diff --git a/access-tests/src/test/resources/hive-site.xml b/sentry-tests/src/test/resources/hive-site.xml
similarity index 100%
rename from access-tests/src/test/resources/hive-site.xml
rename to sentry-tests/src/test/resources/hive-site.xml
diff --git a/access-tests/src/test/resources/kv1.dat b/sentry-tests/src/test/resources/kv1.dat
similarity index 100%
rename from access-tests/src/test/resources/kv1.dat
rename to sentry-tests/src/test/resources/kv1.dat
diff --git a/access-tests/src/test/resources/log4j.properties b/sentry-tests/src/test/resources/log4j.properties
similarity index 100%
rename from access-tests/src/test/resources/log4j.properties
rename to sentry-tests/src/test/resources/log4j.properties
diff --git a/access-binding/access-binding-hive/src/test/resources/access-site.xml b/sentry-tests/src/test/resources/sentry-site.xml
similarity index 80%
copy from access-binding/access-binding-hive/src/test/resources/access-site.xml
copy to sentry-tests/src/test/resources/sentry-site.xml
index 6a5ddff..de0c9cf 100644
--- a/access-binding/access-binding-hive/src/test/resources/access-site.xml
+++ b/sentry-tests/src/test/resources/sentry-site.xml
@@ -19,16 +19,15 @@
 
 <configuration>
   <property>
-    <name>hive.access.provider</name>
-    <value>org.apache.access.provider.file.fooProvider</value>
+    <name>hive.sentry.provider</name>
+    <value>invalid</value>
   </property>
   <property>
-    <name>hive.access.provider.resource</name>
-    <value>classpath:test-authz-provider.ini</value>
+    <name>hive.sentry.provider.resource</name>
+    <value>invalid</value>
   </property>
   <property>
-    <name>hive.access.server</name>
+    <name>hive.sentry.server</name>
     <value>myHS2</value>
   </property>
 </configuration>
-    
diff --git a/access-tests/src/test/resources/test-authz-provider.ini b/sentry-tests/src/test/resources/test-authz-provider.ini
similarity index 100%
rename from access-tests/src/test/resources/test-authz-provider.ini
rename to sentry-tests/src/test/resources/test-authz-provider.ini
