Permissions issue when using BulkWrite

XMLWordPrintableJSON

    • Type: Task
    • Resolution: Done
    • Priority: Major - P3
    • None
    • Affects Version/s: 2.5
    • Component/s: None
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      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.

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

              Created:
              Updated:
              Resolved: