Uploaded image for project: 'C# Driver'
  1. C# Driver
  2. CSHARP-2190

Permissions issue when using BulkWrite

    XMLWordPrintableJSON

Details

    • Icon: Task Task
    • Resolution: Done
    • Icon: Major - P3 Major - P3
    • None
    • 2.5
    • None

    Description

      Hello.
      I have a mongodb replicaset cluster with 3 members.
      Using shell I can test bulkwrite operation, which works fine

      use admin
      db.auth("SportsEtl", "<some password>") // returns 1 (OK)
       
      use SomeTestDb
      db.Markets.bulkWrite([
         { replaceOne :
            {
               "filter" : {_id:"4"},
               "replacement" : { _id:"4", item: "text", defaultQty: 100, status: "A", points: 100 },
               "upsert" : true
            }
         }
      ],
      { ordered : true }
       )
       
      Returns  "acknowledged" : true, an rest of payload.
      

      Now I'm trying to do the same with C# driver

      This is my connection string
      mongodb://SportsEtl:<some password>@server1:27018,server2:27018,server3:27018/admin?AUTHMechanism=SCRAM-SHA-1

      Initialization

      var mongoConfig = MongoClientSettings.FromUrl(new MongoUrl(mongoUrl));
      var mongoClient = new MongoClient(mongoConfig);
      var db = mongoClient.GetDatabase("SomeTestDb");
      

      Code that works fine

      _appMetadataCollection = db.GetCollection<AppMetadata>("AppMetadata");
      public void UpdateAppMetadata(AppMetadata appMetadata)
      {
                  _appMetadataCollection.DeleteMany(FilterDefinition<AppMetadata>.Empty);
                  _appMetadataCollection.InsertOne(appMetadata);
      }
      

      Code that fails

      static readonly BulkWriteOptions _bulkWriteOptions = new BulkWriteOptions { IsOrdered = true, BypassDocumentValidation = true };
      _marketsCollection = db.GetCollection<Dto.Market>("Markets");
       
      public void UpdateMarkets(List<Dto.Market> marketsBatch)
      {
      var models = marketsBatch
                          .Select(m => new ReplaceOneModel<Dto.Market>(new BsonDocument("_id", m.Id), m) {IsUpsert = true})
                          .ToList();
       
                      _marketsCollection.BulkWrite(models, _bulkWriteOptions);
      }
      

      Exception message:

      MongoDB.Driver.MongoCommandException: Command update failed: not authorized on SomeTestDb to execute command { update: \"Markets\", ordered: true, bypassDocumentValidation: true, $db: \"SomeTestDb\" }.
         at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.ProcessReply(ConnectionId connectionId, ReplyMessage`1 reply)
         at MongoDB.Driver.Core.WireProtocol.CommandWireProtocol`1.Execute(IConnection connection, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocol[TResult](IWireProtocol`1 protocol, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Servers.Server.ServerChannel.Command[TResult](DatabaseNamespace databaseNamespace, BsonDocument command, IElementNameValidator commandValidator, Func`1 responseHandling, Boolean slaveOk, IBsonSerializer`1 resultSerializer, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.ExecuteProtocol(IChannelHandle channel, BsonDocument command, Func`1 responseHandling, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.ExecuteBatch(IChannelHandle channel, BatchableSource`1 requestSource, Int32 originalIndex, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.ExecuteBatches(IChannelHandle channel, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase.Execute(IChannelHandle channel, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteBatch(IChannelHandle channel, Run run, Boolean isLast, CancellationToken cancellationToken)
         at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.Execute(IWriteBinding binding, CancellationToken cancellationToken)
         at MongoDB.Driver.OperationExecutor.ExecuteWriteOperation[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken)
         at MongoDB.Driver.MongoCollectionImpl`1.ExecuteWriteOperation[TResult](IWriteOperation`1 operation, CancellationToken cancellationToken)
         at MongoDB.Driver.MongoCollectionImpl`1.BulkWrite(IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken)
      <my project stack goes here>
      ;
      

      Please suggest what's going - why auth works fine for insert, delete and update but fails for bulk. How can I fix that.

      Thanks.

      Attachments

        Activity

          People

            Unassigned Unassigned
            dkholod Denys Kholod
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: