diff --git a/core/src/main/java/org/apache/sqoop/security/SecurityConstants.java b/core/src/main/java/org/apache/sqoop/security/SecurityConstants.java
index fd548624..6f32e04b 100644
--- a/core/src/main/java/org/apache/sqoop/security/SecurityConstants.java
+++ b/core/src/main/java/org/apache/sqoop/security/SecurityConstants.java
@@ -66,6 +66,15 @@ public final class SecurityConstants {
public static final String PREFIX_AUTHENTICATION_KERBEROS_CONFIG =
PREFIX_AUTHENTICATION_CONFIG + "kerberos.";
+ /**
+ * The config specifies the default user.
+ */
+ public static final String AUTHENTICATION_DEFAULT_USER =
+ PREFIX_AUTHENTICATION_CONFIG + "default.user";
+
+ public static final String AUTHENTICATION_DEFAULT_USER_DEFAULT =
+ "sqoop.anonymous.user";
+
/**
* The config specifies the kerberos principal.
* org.apache.sqoop.security.authentication.kerberos.principal.
diff --git a/core/src/main/java/org/apache/sqoop/security/SecurityError.java b/core/src/main/java/org/apache/sqoop/security/SecurityError.java
index 9f85b9e1..988e425a 100644
--- a/core/src/main/java/org/apache/sqoop/security/SecurityError.java
+++ b/core/src/main/java/org/apache/sqoop/security/SecurityError.java
@@ -64,7 +64,10 @@ public enum SecurityError implements ErrorCode {
AUTH_0013("Unable to get principal from http request"),
/** Authorization Exception, used by authorization implementation, etc. Sentry. */
- AUTH_0014("Authorization exception");
+ AUTH_0014("Authorization exception"),
+
+ /** Don't support to grant/remoke privileges for default user. */
+ AUTH_0015("Cannot grant/revoke privileges for default user");
private final String message;
diff --git a/dist/src/main/server/conf/sqoop.properties b/dist/src/main/server/conf/sqoop.properties
index ba6e09f8..fe8bcce2 100755
--- a/dist/src/main/server/conf/sqoop.properties
+++ b/dist/src/main/server/conf/sqoop.properties
@@ -158,6 +158,9 @@ org.apache.sqoop.execution.engine=org.apache.sqoop.execution.mapreduce.Mapreduce
#org.apache.sqoop.security.authentication.proxyuser.#USER#.groups=*
#org.apache.sqoop.security.authentication.proxyuser.#USER#.hosts=*
+# Default user, default value is "sqoop.anonymous.user"
+#org.apache.sqoop.security.authentication.default.user=
+
#
# Authorization configuration
#
diff --git a/server/src/main/java/org/apache/sqoop/handler/AuthorizationRequestHandler.java b/server/src/main/java/org/apache/sqoop/handler/AuthorizationRequestHandler.java
index 43f04179..1ed63e45 100644
--- a/server/src/main/java/org/apache/sqoop/handler/AuthorizationRequestHandler.java
+++ b/server/src/main/java/org/apache/sqoop/handler/AuthorizationRequestHandler.java
@@ -20,6 +20,7 @@
import org.apache.log4j.Logger;
import org.apache.sqoop.audit.AuditLoggerManager;
import org.apache.sqoop.common.SqoopException;
+import org.apache.sqoop.core.SqoopConfiguration;
import org.apache.sqoop.error.code.CommonRepositoryError;
import org.apache.sqoop.repository.Repository;
import org.apache.sqoop.repository.RepositoryManager;
@@ -31,6 +32,7 @@
import org.apache.sqoop.model.MRole;
import org.apache.sqoop.security.AuthorizationHandler;
import org.apache.sqoop.security.AuthorizationManager;
+import org.apache.sqoop.security.SecurityConstants;
import org.apache.sqoop.security.SecurityError;
import org.apache.sqoop.server.RequestContext;
import org.apache.sqoop.server.RequestHandler;
@@ -308,6 +310,15 @@ private JsonBean grantRevokePrivilege(RequestContext ctx, boolean isGrant) {
// Get privilege object
List privileges = privilegesBean == null ? null : privilegesBean.getPrivileges();
+ String defaultUser = SqoopConfiguration.getInstance().getContext().getString(
+ SecurityConstants.AUTHENTICATION_DEFAULT_USER,
+ SecurityConstants.AUTHENTICATION_DEFAULT_USER_DEFAULT);
+ for (MPrincipal principal : principals) {
+ if (defaultUser.equals(principal.getName())) {
+ throw new SqoopException(SecurityError.AUTH_0015);
+ }
+ }
+
if (privileges != null) {
for (MPrivilege privilege : privileges) {
checkResourceExists(privilege.getResource());
diff --git a/server/src/main/java/org/apache/sqoop/server/RequestContext.java b/server/src/main/java/org/apache/sqoop/server/RequestContext.java
index 492440ff..f8401aad 100644
--- a/server/src/main/java/org/apache/sqoop/server/RequestContext.java
+++ b/server/src/main/java/org/apache/sqoop/server/RequestContext.java
@@ -20,7 +20,9 @@
import org.apache.hadoop.security.authentication.client.PseudoAuthenticator;
import org.apache.hadoop.security.token.delegation.web.HttpUserGroupInformation;
import org.apache.sqoop.common.SqoopException;
+import org.apache.sqoop.core.SqoopConfiguration;
import org.apache.sqoop.security.AuthenticationManager;
+import org.apache.sqoop.security.SecurityConstants;
import org.apache.sqoop.server.common.ServerError;
import javax.servlet.http.HttpServletRequest;
@@ -121,10 +123,18 @@ public Locale getAcceptLanguageHeader() {
* @return Name of user sending the request
*/
public String getUserName() {
+ String userName;
if (AuthenticationManager.getInstance().getAuthenticationHandler().isSecurityEnabled()) {
- return HttpUserGroupInformation.get().getShortUserName();
+ userName = HttpUserGroupInformation.get().getShortUserName();
} else {
- return request.getParameter(PseudoAuthenticator.USER_NAME);
+ userName = request.getParameter(PseudoAuthenticator.USER_NAME);
}
+
+ if (userName == null || userName.trim().isEmpty()) {
+ userName = SqoopConfiguration.getInstance().getContext().getString(
+ SecurityConstants.AUTHENTICATION_DEFAULT_USER,
+ SecurityConstants.AUTHENTICATION_DEFAULT_USER_DEFAULT);
+ }
+ return userName;
}
}