[
https://issues.apache.org/jira/browse/HIVE-26248?focusedWorklogId=800804&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-800804
]
ASF GitHub Bot logged work on HIVE-26248:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 16/Aug/22 03:16
Start Date: 16/Aug/22 03:16
Worklog Time Spent: 10m
Work Description: nrg4878 commented on code in PR #3312:
URL: https://github.com/apache/hive/pull/3312#discussion_r946296512
##########
ql/src/test/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/TestHiveMetaStoreAuthorizer.java:
##########
@@ -360,4 +362,53 @@ public void testQShowTablesUnauthorizedUser() throws
Exception {
}
}
}
+
+ @Test
+ public void testR_CreateDataConnector_unAuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(unAuthorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ String err = e.getMessage();
+ String expected = "Operation type " +
HiveOperationType.CREATEDATACONNECTOR+ " not allowed for user:" +
unAuthorizedUser;
+ assertEquals(expected, err);
+ }
+ }
+
+ @Test
+ public void testS_CreateDataConnector_authorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ // No Exception for create database for authorized user
+ }
+ }
+
+ @Test
+ public void testT_AlterDataConnector_AuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+
+ DataConnector newConnector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3308/hive");
+ hmsHandler.create_dataconnector(connector);
+ hmsHandler.alter_dataconnector(dcName, newConnector);
+ } catch (Exception e) {
+ // No Exception for create table for authorized user
+ }
+ }
+
+ @Test
+ public void testU_DropDataConnector_authorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ hmsHandler.drop_dataconnector(dcName, true, true);
+ } catch (Exception e) {
+ // No Exception for dropDatabase for authorized user
Review Comment:
ditto as above. This method seems to catch Exception and ignore it. So this
will never throw an exception. Shouldn't the test fail if we got an exception?
##########
ql/src/test/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/TestHiveMetaStoreAuthorizer.java:
##########
@@ -360,4 +362,53 @@ public void testQShowTablesUnauthorizedUser() throws
Exception {
}
}
}
+
+ @Test
+ public void testR_CreateDataConnector_unAuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(unAuthorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ String err = e.getMessage();
+ String expected = "Operation type " +
HiveOperationType.CREATEDATACONNECTOR+ " not allowed for user:" +
unAuthorizedUser;
+ assertEquals(expected, err);
+ }
+ }
+
+ @Test
+ public void testS_CreateDataConnector_authorizedUser() throws Exception {
Review Comment:
This method catches Exception within the try/catch, will not throw an
exception.
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterDataConnectorEvent.java:
##########
@@ -0,0 +1,106 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreAlterDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation AlterDataConnector
+ */
+
+public class AlterDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(AlterDataConnectorEvent.class);
+
+ private String COMMAND_STR = "alter connector";
+
+ public AlterDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.ALTERDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getOldDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== AlterDataConnectorEvent.getInputHObjs(): ret={}", ret);
+ }
+
+ return ret;
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateDataConnectorEvent.java:
##########
@@ -0,0 +1,93 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreCreateDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation CreateDataConnector
+ */
+
+public class CreateDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(CreateDataConnectorEvent.class);
+
+ private String COMMAND_STR = "create connector";
+
+ public CreateDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.CREATEDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ return Collections.emptyList();
+ }
+
+ private List<HivePrivilegeObject> getOutputHObjs() {
+ LOG.debug("==> CreateDataConnectorEvent.getOutputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreCreateDataConnectorEvent event = (PreCreateDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== CreateDataConnectorEvent.getOutputHObjs(): ret={}", ret);
+ }
+
+ return ret;
+
Review Comment:
nit: remove empty line
##########
ql/src/test/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/TestHiveMetaStoreAuthorizer.java:
##########
@@ -360,4 +362,53 @@ public void testQShowTablesUnauthorizedUser() throws
Exception {
}
}
}
+
+ @Test
+ public void testR_CreateDataConnector_unAuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(unAuthorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ String err = e.getMessage();
+ String expected = "Operation type " +
HiveOperationType.CREATEDATACONNECTOR+ " not allowed for user:" +
unAuthorizedUser;
+ assertEquals(expected, err);
+ }
+ }
+
+ @Test
+ public void testS_CreateDataConnector_authorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ // No Exception for create database for authorized user
Review Comment:
This method seems to catch Exception and ignore it. So this will never throw
an exception. Shouldn't the test fail if we got an exception?
##########
ql/src/test/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/TestHiveMetaStoreAuthorizer.java:
##########
@@ -360,4 +362,53 @@ public void testQShowTablesUnauthorizedUser() throws
Exception {
}
}
}
+
+ @Test
+ public void testR_CreateDataConnector_unAuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(unAuthorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ String err = e.getMessage();
+ String expected = "Operation type " +
HiveOperationType.CREATEDATACONNECTOR+ " not allowed for user:" +
unAuthorizedUser;
+ assertEquals(expected, err);
+ }
+ }
+
+ @Test
+ public void testS_CreateDataConnector_authorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ // No Exception for create database for authorized user
+ }
+ }
+
+ @Test
+ public void testT_AlterDataConnector_AuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+
+ DataConnector newConnector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3308/hive");
+ hmsHandler.create_dataconnector(connector);
+ hmsHandler.alter_dataconnector(dcName, newConnector);
+ } catch (Exception e) {
+ // No Exception for create table for authorized user
Review Comment:
ditto as above. This method seems to catch Exception and ignore it. So this
will never throw an exception. Shouldn't the test fail if we got an exception?
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterDataConnectorEvent.java:
##########
@@ -0,0 +1,106 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreAlterDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation AlterDataConnector
+ */
+
+public class AlterDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(AlterDataConnectorEvent.class);
+
+ private String COMMAND_STR = "alter connector";
+
+ public AlterDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.ALTERDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getOldDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterDataConnectorEvent.java:
##########
@@ -0,0 +1,106 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreAlterDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation AlterDataConnector
+ */
+
+public class AlterDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(AlterDataConnectorEvent.class);
+
+ private String COMMAND_STR = "alter connector";
+
+ public AlterDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.ALTERDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getOldDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterDataConnectorEvent.java:
##########
@@ -0,0 +1,106 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreAlterDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation AlterDataConnector
+ */
+
+public class AlterDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(AlterDataConnectorEvent.class);
+
+ private String COMMAND_STR = "alter connector";
+
+ public AlterDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.ALTERDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getOldDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== AlterDataConnectorEvent.getInputHObjs(): ret={}", ret);
+ }
+
+ return ret;
+
+ }
+
+ private List<HivePrivilegeObject> getOutputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getOutputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getNewDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== AlterDataConnectorEvent.getOutputHObjs(): ret={}", ret);
+ }
+
+ return ret;
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterDataConnectorEvent.java:
##########
@@ -0,0 +1,106 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreAlterDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation AlterDataConnector
+ */
+
+public class AlterDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(AlterDataConnectorEvent.class);
+
+ private String COMMAND_STR = "alter connector";
+
+ public AlterDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.ALTERDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getOldDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== AlterDataConnectorEvent.getInputHObjs(): ret={}", ret);
+ }
+
+ return ret;
+
+ }
+
+ private List<HivePrivilegeObject> getOutputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getOutputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getNewDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateDataConnectorEvent.java:
##########
@@ -0,0 +1,93 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreCreateDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation CreateDataConnector
+ */
+
+public class CreateDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(CreateDataConnectorEvent.class);
+
+ private String COMMAND_STR = "create connector";
+
+ public CreateDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.CREATEDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ return Collections.emptyList();
+ }
+
+ private List<HivePrivilegeObject> getOutputHObjs() {
+ LOG.debug("==> CreateDataConnectorEvent.getOutputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreCreateDataConnectorEvent event = (PreCreateDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== CreateDataConnectorEvent.getOutputHObjs(): ret={}", ret);
+ }
+
+ return ret;
+
+ }
+
+ private String buildCommandString(String cmdStr, DataConnector connector) {
+ String ret = cmdStr;
+
+ if (connector != null) {
+ String dcName = connector.getName();
+ ret = ret + (StringUtils.isNotEmpty(dcName) ? " " + dcName : "");
+ }
+
+ return ret;
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/DropDataConnectorEvent.java:
##########
@@ -0,0 +1,88 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreDropDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation DropDataConnector
+ */
+
+public class DropDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(DropDataConnectorEvent.class);
+
+ private String COMMAND_STR = "drop connector";
+
+ public DropDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.DROPDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> DropDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreDropDataConnectorEvent event = (PreDropDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getDataConnector();
+
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== DropDataConnectorEvent.getInputHObjs(): ret={}", ret);
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateDataConnectorEvent.java:
##########
@@ -0,0 +1,93 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreCreateDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation CreateDataConnector
+ */
+
+public class CreateDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(CreateDataConnectorEvent.class);
+
+ private String COMMAND_STR = "create connector";
+
+ public CreateDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.CREATEDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ return Collections.emptyList();
+ }
+
+ private List<HivePrivilegeObject> getOutputHObjs() {
+ LOG.debug("==> CreateDataConnectorEvent.getOutputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreCreateDataConnectorEvent event = (PreCreateDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
Review Comment:
nit: remove empty line
##########
ql/src/test/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/TestHiveMetaStoreAuthorizer.java:
##########
@@ -360,4 +362,53 @@ public void testQShowTablesUnauthorizedUser() throws
Exception {
}
}
}
+
+ @Test
+ public void testR_CreateDataConnector_unAuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(unAuthorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ String err = e.getMessage();
+ String expected = "Operation type " +
HiveOperationType.CREATEDATACONNECTOR+ " not allowed for user:" +
unAuthorizedUser;
+ assertEquals(expected, err);
+ }
+ }
+
+ @Test
+ public void testS_CreateDataConnector_authorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+ } catch (Exception e) {
+ // No Exception for create database for authorized user
+ }
+ }
+
+ @Test
+ public void testT_AlterDataConnector_AuthorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ DataConnector connector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3306/hive");
+ hmsHandler.create_dataconnector(connector);
+
+ DataConnector newConnector = new DataConnector(dcName, "mysql",
"jdbc:mysql://localhost:3308/hive");
+ hmsHandler.create_dataconnector(connector);
+ hmsHandler.alter_dataconnector(dcName, newConnector);
+ } catch (Exception e) {
+ // No Exception for create table for authorized user
+ }
+ }
+
+ @Test
+ public void testU_DropDataConnector_authorizedUser() throws Exception {
+
UserGroupInformation.setLoginUser(UserGroupInformation.createRemoteUser(authorizedUser));
+ try {
+ hmsHandler.drop_dataconnector(dcName, true, true);
+ } catch (Exception e) {
+ // No Exception for dropDatabase for authorized user
Review Comment:
nit: comment says "dropDatabase". It should say "dropConnector"
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/DropDataConnectorEvent.java:
##########
@@ -0,0 +1,88 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreDropDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation DropDataConnector
+ */
+
+public class DropDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(DropDataConnectorEvent.class);
+
+ private String COMMAND_STR = "drop connector";
+
+ public DropDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.DROPDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> DropDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreDropDataConnectorEvent event = (PreDropDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getDataConnector();
+
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateDataConnectorEvent.java:
##########
@@ -0,0 +1,93 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreCreateDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation CreateDataConnector
+ */
+
+public class CreateDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(CreateDataConnectorEvent.class);
+
+ private String COMMAND_STR = "create connector";
+
+ public CreateDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.CREATEDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ return Collections.emptyList();
+ }
+
+ private List<HivePrivilegeObject> getOutputHObjs() {
+ LOG.debug("==> CreateDataConnectorEvent.getOutputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreCreateDataConnectorEvent event = (PreCreateDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/DropDataConnectorEvent.java:
##########
@@ -0,0 +1,88 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreDropDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation DropDataConnector
+ */
+
+public class DropDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(DropDataConnectorEvent.class);
+
+ private String COMMAND_STR = "drop connector";
+
+ public DropDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.DROPDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> DropDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreDropDataConnectorEvent event = (PreDropDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getDataConnector();
+
+ ret.add(getHivePrivilegeObject(connector));
+
Review Comment:
nit: remove empty line
##########
ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/AlterDataConnectorEvent.java:
##########
@@ -0,0 +1,106 @@
+/*
+ * 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.hadoop.hive.ql.security.authorization.plugin.metastore.events;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hadoop.hive.metastore.api.DataConnector;
+import org.apache.hadoop.hive.metastore.events.PreAlterDataConnectorEvent;
+import org.apache.hadoop.hive.metastore.events.PreEventContext;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.HivePrivilegeObject;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthorizableEvent;
+import
org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.HiveMetaStoreAuthzInfo;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/*
+ Authorizable Event for HiveMetaStore operation AlterDataConnector
+ */
+
+public class AlterDataConnectorEvent extends HiveMetaStoreAuthorizableEvent {
+ private static final Logger LOG =
LoggerFactory.getLogger(AlterDataConnectorEvent.class);
+
+ private String COMMAND_STR = "alter connector";
+
+ public AlterDataConnectorEvent(PreEventContext preEventContext) {
+ super(preEventContext);
+ }
+
+ @Override
+ public HiveMetaStoreAuthzInfo getAuthzContext() {
+ HiveMetaStoreAuthzInfo ret =
+ new HiveMetaStoreAuthzInfo(preEventContext,
HiveOperationType.ALTERDATACONNECTOR, getInputHObjs(),
+ getOutputHObjs(), COMMAND_STR);
+
+ return ret;
+ }
+
+ private List<HivePrivilegeObject> getInputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getInputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getOldDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
+ LOG.debug("<== AlterDataConnectorEvent.getInputHObjs(): ret={}", ret);
+ }
+
+ return ret;
+
+ }
+
+ private List<HivePrivilegeObject> getOutputHObjs() {
+ LOG.debug("==> AlterDataConnectorEvent.getOutputHObjs()");
+
+ List<HivePrivilegeObject> ret = new ArrayList<>();
+ PreAlterDataConnectorEvent event = (PreAlterDataConnectorEvent)
preEventContext;
+ DataConnector connector = event.getNewDataConnector();
+
+ if (connector != null) {
+ ret.add(getHivePrivilegeObject(connector));
+
+ COMMAND_STR = buildCommandString(COMMAND_STR, connector);
+
Review Comment:
nit: remove empty line
Issue Time Tracking
-------------------
Worklog Id: (was: 800804)
Time Spent: 2h (was: 1h 50m)
> Add data connector authorization on HMS server-side
> ---------------------------------------------------
>
> Key: HIVE-26248
> URL: https://issues.apache.org/jira/browse/HIVE-26248
> Project: Hive
> Issue Type: Sub-task
> Affects Versions: 4.0.0-alpha-1, 4.0.0-alpha-2
> Reporter: zhangbutao
> Assignee: zhangbutao
> Priority: Major
> Labels: pull-request-available
> Time Spent: 2h
> Remaining Estimate: 0h
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)