Search in sources :

Example 1 with User

use of io.crate.user.User in project crate by crate.

the class SetSessionAuthorizationPlan method executeOrFail.

@Override
public void executeOrFail(DependencyCarrier executor, PlannerContext plannerContext, RowConsumer consumer, Row params, SubQueryResults subQueryResults) throws Exception {
    var sessionContext = plannerContext.transactionContext().sessionContext();
    String userName = setSessionAuthorization.user();
    User user;
    if (userName != null) {
        user = userLookup.findUser(userName);
        if (user == null) {
            throw new IllegalArgumentException("User '" + userName + "' does not exist.");
        }
    } else {
        user = sessionContext.authenticatedUser();
    }
    sessionContext.setSessionUser(user);
    consumer.accept(InMemoryBatchIterator.empty(SENTINEL), null);
}
Also used : User(io.crate.user.User)

Example 2 with User

use of io.crate.user.User in project crate by crate.

the class CreateViewPlan method executeOrFail.

@Override
public void executeOrFail(DependencyCarrier dependencies, PlannerContext plannerContext, RowConsumer consumer, Row params, SubQueryResults subQueryResults) {
    User owner = createViewStmt.owner();
    String formattedQuery = SqlFormatter.formatSql(createViewStmt.query(), makeExpressions(params));
    ensureFormattedQueryCanStillBeAnalyzed(createViewStmt.name(), dependencies.nodeContext(), dependencies.schemas(), plannerContext.transactionContext(), formattedQuery, createViewStmt.replaceExisting());
    CreateViewRequest request = new CreateViewRequest(createViewStmt.name(), formattedQuery, createViewStmt.replaceExisting(), owner == null ? null : owner.name());
    dependencies.createViewAction().execute(request, new OneRowActionListener<>(consumer, resp -> {
        if (resp.alreadyExistsFailure()) {
            throw new RelationAlreadyExists(createViewStmt.name());
        }
        return new Row1(1L);
    }));
}
Also used : ParamTypeHints(io.crate.analyze.ParamTypeHints) Literal(io.crate.sql.tree.Literal) RelationName(io.crate.metadata.RelationName) SearchPath(io.crate.metadata.SearchPath) DefaultTraversalVisitor(io.crate.sql.tree.DefaultTraversalVisitor) ArrayList(java.util.ArrayList) CreateViewStmt(io.crate.analyze.CreateViewStmt) SqlParser(io.crate.sql.parser.SqlParser) OneRowActionListener(io.crate.execution.support.OneRowActionListener) Query(io.crate.sql.tree.Query) Nullable(javax.annotation.Nullable) NodeContext(io.crate.metadata.NodeContext) ParameterExpression(io.crate.sql.tree.ParameterExpression) User(io.crate.user.User) CreateViewRequest(io.crate.execution.ddl.views.CreateViewRequest) SqlFormatter(io.crate.sql.SqlFormatter) Table(io.crate.sql.tree.Table) RowConsumer(io.crate.data.RowConsumer) List(java.util.List) Row(io.crate.data.Row) RelationAlreadyExists(io.crate.exceptions.RelationAlreadyExists) Symbol(io.crate.expression.symbol.Symbol) RelationAnalyzer(io.crate.analyze.relations.RelationAnalyzer) SubQueryResults(io.crate.planner.operators.SubQueryResults) Schemas(io.crate.metadata.Schemas) Expression(io.crate.sql.tree.Expression) Row1(io.crate.data.Row1) CoordinatorTxnCtx(io.crate.metadata.CoordinatorTxnCtx) Row1(io.crate.data.Row1) User(io.crate.user.User) RelationAlreadyExists(io.crate.exceptions.RelationAlreadyExists) CreateViewRequest(io.crate.execution.ddl.views.CreateViewRequest)

Example 3 with User

use of io.crate.user.User in project crate by crate.

the class SysShardsTableInfo method getRouting.

/**
 * Retrieves the routing for sys.shards
 * <p>
 * This routing contains ALL shards of ALL indices.
 * Any shards that are not yet assigned to a node will have a NEGATIVE shard id (see {@link UnassignedShard}
 */
public static Routing getRouting(ClusterState clusterState, RoutingProvider routingProvider, SessionContext sessionContext) {
    String[] concreteIndices = Arrays.stream(clusterState.metadata().getConcreteAllIndices()).filter(index -> !IndexParts.isDangling(index)).toArray(String[]::new);
    User user = sessionContext != null ? sessionContext.sessionUser() : null;
    if (user != null) {
        List<String> accessibleTables = new ArrayList<>(concreteIndices.length);
        for (String indexName : concreteIndices) {
            String tableName = RelationName.fqnFromIndexName(indexName);
            if (user.hasAnyPrivilege(Privilege.Clazz.TABLE, tableName)) {
                accessibleTables.add(indexName);
            }
        }
        concreteIndices = accessibleTables.toArray(new String[0]);
    }
    Map<String, Map<String, IntIndexedContainer>> locations = new TreeMap<>();
    GroupShardsIterator<ShardIterator> groupShardsIterator = clusterState.getRoutingTable().allAssignedShardsGrouped(concreteIndices, true);
    for (final ShardIterator shardIt : groupShardsIterator) {
        final ShardRouting shardRouting = shardIt.nextOrNull();
        processShardRouting(clusterState.getNodes().getLocalNodeId(), locations, shardRouting, shardIt.shardId());
    }
    return new Routing(locations);
}
Also used : ShardRouting(org.elasticsearch.cluster.routing.ShardRouting) ShardId(org.elasticsearch.index.shard.ShardId) IndexParts(io.crate.metadata.IndexParts) Arrays(java.util.Arrays) LONG(io.crate.types.DataTypes.LONG) SessionContext(io.crate.action.sql.SessionContext) Privilege(io.crate.user.Privilege) ShardIterator(org.elasticsearch.cluster.routing.ShardIterator) RelationName(io.crate.metadata.RelationName) NestableCollectExpression(io.crate.execution.engine.collect.NestableCollectExpression) ArrayList(java.util.ArrayList) GroupShardsIterator(org.elasticsearch.cluster.routing.GroupShardsIterator) SeqNoStats(org.elasticsearch.index.seqno.SeqNoStats) RetentionLease(org.elasticsearch.index.seqno.RetentionLease) ClusterState(org.elasticsearch.cluster.ClusterState) Routing(io.crate.metadata.Routing) NestableInput(io.crate.expression.NestableInput) UnassignedShard(io.crate.metadata.shard.unassigned.UnassignedShard) INTEGER(io.crate.types.DataTypes.INTEGER) IntArrayList(com.carrotsearch.hppc.IntArrayList) Map(java.util.Map) Map.entry(java.util.Map.entry) ShardRowContext(io.crate.expression.reference.sys.shard.ShardRowContext) IntIndexedContainer(com.carrotsearch.hppc.IntIndexedContainer) User(io.crate.user.User) BOOLEAN(io.crate.types.DataTypes.BOOLEAN) RowCollectExpressionFactory(io.crate.metadata.expressions.RowCollectExpressionFactory) ColumnIdent(io.crate.metadata.ColumnIdent) NestableCollectExpression.constant(io.crate.execution.engine.collect.NestableCollectExpression.constant) STRING(io.crate.types.DataTypes.STRING) RoutingProvider(io.crate.metadata.RoutingProvider) NestableCollectExpression.forFunction(io.crate.execution.engine.collect.NestableCollectExpression.forFunction) List(java.util.List) SystemTable(io.crate.metadata.SystemTable) RowGranularity(io.crate.metadata.RowGranularity) TreeMap(java.util.TreeMap) DataTypes(io.crate.types.DataTypes) User(io.crate.user.User) ArrayList(java.util.ArrayList) IntArrayList(com.carrotsearch.hppc.IntArrayList) ShardRouting(org.elasticsearch.cluster.routing.ShardRouting) Routing(io.crate.metadata.Routing) TreeMap(java.util.TreeMap) ShardIterator(org.elasticsearch.cluster.routing.ShardIterator) ShardRouting(org.elasticsearch.cluster.routing.ShardRouting) Map(java.util.Map) TreeMap(java.util.TreeMap)

Example 4 with User

use of io.crate.user.User in project crate by crate.

the class Schemas method getSimilarSchemas.

private List<String> getSimilarSchemas(User user, String schema) {
    LevenshteinDistance levenshteinDistance = new LevenshteinDistance();
    ArrayList<Candidate> candidates = new ArrayList<>();
    for (String availableSchema : schemas.keySet()) {
        if (user.hasAnyPrivilege(Privilege.Clazz.SCHEMA, availableSchema)) {
            float score = levenshteinDistance.getDistance(schema.toLowerCase(Locale.ENGLISH), availableSchema.toLowerCase(Locale.ENGLISH));
            if (score > 0.7f) {
                candidates.add(new Candidate(score, availableSchema));
            }
        }
    }
    candidates.sort(Comparator.comparing((Candidate x) -> x.score).reversed());
    return candidates.stream().limit(5).map(x -> x.name).collect(Collectors.toList());
}
Also used : Tuple(io.crate.common.collections.Tuple) Privilege(io.crate.user.Privilege) DocSchemaInfoFactory(io.crate.metadata.doc.DocSchemaInfoFactory) ClusterService(org.elasticsearch.cluster.service.ClusterService) UserDefinedFunctionsMetadata(io.crate.expression.udf.UserDefinedFunctionsMetadata) BlobSchemaInfo(io.crate.metadata.blob.BlobSchemaInfo) Operation(io.crate.metadata.table.Operation) ClusterStateListener(org.elasticsearch.cluster.ClusterStateListener) PgCatalogSchemaInfo(io.crate.metadata.pgcatalog.PgCatalogSchemaInfo) Inject(org.elasticsearch.common.inject.Inject) ArrayList(java.util.ArrayList) Sets(io.crate.common.collections.Sets) HashSet(java.util.HashSet) Metadata(org.elasticsearch.cluster.metadata.Metadata) Matcher(java.util.regex.Matcher) SchemaUnknownException(io.crate.exceptions.SchemaUnknownException) SysSchemaInfo(io.crate.metadata.sys.SysSchemaInfo) Locale(java.util.Locale) Map(java.util.Map) StreamSupport(java.util.stream.StreamSupport) QualifiedName(io.crate.sql.tree.QualifiedName) Nonnull(javax.annotation.Nonnull) Nullable(javax.annotation.Nullable) SchemaInfo(io.crate.metadata.table.SchemaInfo) InformationSchemaInfo(io.crate.metadata.information.InformationSchemaInfo) TableInfo(io.crate.metadata.table.TableInfo) ViewMetadata(io.crate.metadata.view.ViewMetadata) Iterator(java.util.Iterator) User(io.crate.user.User) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ViewsMetadata(io.crate.metadata.view.ViewsMetadata) Set(java.util.Set) ObjectCursor(com.carrotsearch.hppc.cursors.ObjectCursor) ClusterChangedEvent(org.elasticsearch.cluster.ClusterChangedEvent) AbstractLifecycleComponent(org.elasticsearch.common.component.AbstractLifecycleComponent) Collectors(java.util.stream.Collectors) UserDefinedFunctionMetadata(io.crate.expression.udf.UserDefinedFunctionMetadata) List(java.util.List) Logger(org.apache.logging.log4j.Logger) Singleton(org.elasticsearch.common.inject.Singleton) Pattern(java.util.regex.Pattern) VisibleForTesting(io.crate.common.annotations.VisibleForTesting) Comparator(java.util.Comparator) RelationUnknown(io.crate.exceptions.RelationUnknown) LogManager(org.apache.logging.log4j.LogManager) LevenshteinDistance(org.apache.lucene.search.spell.LevenshteinDistance) ArrayList(java.util.ArrayList) LevenshteinDistance(org.apache.lucene.search.spell.LevenshteinDistance)

Example 5 with User

use of io.crate.user.User in project crate by crate.

the class SqlHttpHandler method ensureSession.

@VisibleForTesting
Session ensureSession(FullHttpRequest request) {
    String defaultSchema = request.headers().get(REQUEST_HEADER_SCHEMA);
    User authenticatedUser = userFromAuthHeader(request.headers().get(HttpHeaderNames.AUTHORIZATION));
    Session session = this.session;
    if (session == null) {
        session = sqlOperations.createSession(defaultSchema, authenticatedUser);
    } else if (session.sessionContext().authenticatedUser().equals(authenticatedUser) == false) {
        session.close();
        session = sqlOperations.createSession(defaultSchema, authenticatedUser);
    }
    this.session = session;
    return session;
}
Also used : User(io.crate.user.User) Session(io.crate.action.sql.Session) VisibleForTesting(io.crate.common.annotations.VisibleForTesting)

Aggregations

User (io.crate.user.User)25 Test (org.junit.Test)11 SQLOperations (io.crate.action.sql.SQLOperations)6 ArrayList (java.util.ArrayList)6 RelationName (io.crate.metadata.RelationName)5 Privilege (io.crate.user.Privilege)5 List (java.util.List)5 SchemaUnknownException (io.crate.exceptions.SchemaUnknownException)4 CrateDummyClusterServiceUnitTest (io.crate.test.integration.CrateDummyClusterServiceUnitTest)4 Map (java.util.Map)4 Nullable (javax.annotation.Nullable)4 NoopCircuitBreaker (org.elasticsearch.common.breaker.NoopCircuitBreaker)4 SecureString (org.elasticsearch.common.settings.SecureString)4 Session (io.crate.action.sql.Session)3 SessionContext (io.crate.action.sql.SessionContext)3 VisibleForTesting (io.crate.common.annotations.VisibleForTesting)3 RelationUnknown (io.crate.exceptions.RelationUnknown)3 IntIndexedContainer (com.carrotsearch.hppc.IntIndexedContainer)2 ObjectCursor (com.carrotsearch.hppc.cursors.ObjectCursor)2 BlockingEvictingQueue (io.crate.common.collections.BlockingEvictingQueue)2