标签: azure-cosmosdb

避免Azure DocumentDB存储过程中的SQL注入

我怎样才能避免sql注入Azure DocumentDB存储过程?

除了清理输入(白名单字符)之外,这里的最佳做法是什么?

例如,以下从MSDN示例改编的存储过程:

function simple_sp(s1) {
   var context = getContext();
   var collection = context.getCollection();
   var response = context.getResponse();

   collection.queryDocuments(collection.getSelfLink(), 
      'SELECT * FROM Families f where f.id  = "' + s1 + '"', {}, 
      function(res){}
   );
}
Run Code Online (Sandbox Code Playgroud)

该s1参数是将sql注入查询的标准示例.到目前为止,我还没有找到一种参数化查询的方法.

sql-injection azure-cosmosdb

7
推荐指数
1
解决办法
1575
查看次数

使用存储过程的Azure documentdb批量插入

嗨我正在使用16个集合来插入大约3-4百万个json对象,范围从每个对象5-10k.我使用存储过程来插入这些文件.我有22个容量单位.

function bulkImport(docs) {
    var collection = getContext().getCollection();
    var collectionLink = collection.getSelfLink();

    // The count of imported docs, also used as current doc index.
    var count = 0;

    // Validate input.
    if (!docs) throw new Error("The array is undefined or null.");

    var docsLength = docs.length;
    if (docsLength == 0) {
        getContext().getResponse().setBody(0);
    }

    // Call the CRUD API to create a document.
    tryCreateOrUpdate(docs[count], callback);

    // Note that there are 2 exit conditions:
    // 1) The createDocument request was not accepted. 
    // …
Run Code Online (Sandbox Code Playgroud)

bulkinsert azure azure-cosmosdb

7
推荐指数
2
解决办法
6712
查看次数

有谁想出如何将JSON字符串保存到DocumentDB集合中?

我试图制作一个快速而又脏的NLog DocumentDB目标,但似乎无法直接将JSON保存到DocumentDB中.

使用C#库似乎DocumentClient.CreateDocumentAsync()的document参数只需要一个"复杂类型",我看不到其他可能采用JSON字符串的方法.

还有谁知道如何直接保存JSON?

json azure-cosmosdb

7
推荐指数
1
解决办法
2194
查看次数

Azure DocumentDB偶尔会抛出SocketException/GoneException

更新(2/8/17):

见下面的答案.

更新(2/7/17):

我发现重启可以让我从Visual Studio 2015成功运行Web应用程序,并多次点击端点.但是,当我停止应用程序并重新启动它时,它很可能会失败.然后它将重复失败,直到我重新启动计算机.重启VS'15还不够好.

一旦它开始失败,从VS代码运行应用程序或从命令行运行dotnet.exe表现出相同的行为.

原始邮寄:

我们有一个微服务系统设置,可以从几个API和Azure Functions调用DocumentDB集合.它与API端(嵌套在一起)间歇性地失败.据我们所知,只要它偶尔起作用,调用它的代码大多是正确的.Azure功能可以正常工作.SocketExceptionGoneException

编辑澄清:"间歇性地",我的意思是它可能每天短暂工作一次或两次,然后在没有通话的剩余时间进入失败状态.这不像每100个左右的呼叫失败一样.这更像是1或2次成功呼叫后的不间断故障.

通过编写一个简单的控制台应用程序来从DocumentDB中读取并将结果打印到Debug输出,我能够重新创建相同的异常.这运行一两次没有任何问题,然后每次都开始抛出以下异常.它会在有几个小时之前执行此操作,然后再拨打几个电话,然后重新投入.

虽然下面的测试器是原始的,但主API充分利用了vNext项目结构.它使用单个DocumentClient进行连接(通过本机DI注入),它几乎完全异步从控制器一直到调用db的服务层.我们使用一个单独的库来管理对DocumentDB的访问(如果它们不存在则创建集合,添加扩展方法,简单的CRUD操作等),但是如下所示直接调用会产生相同的结果.

我注意到的一件事是它对于DocumentDB客户端("Microsoft.Azure.DocumentDB.Core": "1.0.0")的核心版本而言比在net46版本中更成功.由于其他库,我们的API需要4.6.

我可以在多台机器,多个网络,多种连接类型上重新创建它.

问题:为什么我们会收到此异常,我们如何解决?

Azure信息:

  • 美国东部2
  • 1000 RU/s
  • 标准层
  • 会话一致性
  • 懒惰索引策略:

    {"indexingMode":"lazy","automatic":true,"includedPaths":[{"path":"/*","indices":[{"kind":"Range","dataType":"Number ",""precision": - 1},{"kind":"Hash","dataType":"String","precision":3}]}],"excludedPaths":[]}

考试班

using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Microsoft.Azure.Documents.Client;
using Microsoft.Azure.Documents.Linq;
using Newtonsoft.Json;

namespace TestConnection
{
    public class Program
    {
        public static void Main(string[] args)
        {
            try
            {
                using (var client = new DocumentClient(
                    new Uri("https://<our-docdb-name>.documents.azure.com:443/"),
                    "our access key",
                    new ConnectionPolicy
                    {
                        ConnectionMode …
Run Code Online (Sandbox Code Playgroud)

c# azure .net-core azure-cosmosdb

7
推荐指数
1
解决办法
2098
查看次数

Azure Cosmos DB - 无限空间?

设置我们的第一个Cosmos DB实例,我们对它存储大量数据的能力非常感兴趣.设置集合时,我可以选择10GB或无限制.我选择无限.但是,当我开始探索该集合时,它表示我的数据最大值为100GB.这非常令人困惑.我将要导入一个大小超过500GB的SQL Server数据库,我们预计在不到一年的时间内它会增长到1TB.所以我们需要"无限"的尺寸.

我如何实际获得无限制,为什么它在设置集合时让我选择它,如果它不是真正可用的?

编辑:我想澄清一些事情:Microsoft非常明确地指示Azure客户在这里使用Azure标记在Stack Overflow或Twitter支持上发布有关Azure服务的任何问题.我没有Twitter,所以我在这里,而且,从拥有这些经验的微软以外的其他人那里获得帮助总是很棒的.对于那些因为你认为这是一个应该针对MS支持而不是在这里的问题而对你投降的人,请教育自己.然后发现自己是Stack Overflow elitists之外的生活,他们喜欢从一页到另一页"向我们讲授低级新手的教训".对于其他99%总是非常有帮助的人 - 谢谢.非常诚挚地谢谢你.我希望有一天能有所回报.结束咆哮.

azure azure-cosmosdb

7
推荐指数
1
解决办法
737
查看次数

更新Azure Cosmos数据库分区密钥以重新分发现有数据(文档数据库)

目前,我的数据是在azure cosmos db(DocumentDB)中使用错误或未优化的分区键.现在我想更新分区密钥并重新分发我的数据,但无法弄明白.我该怎么做?

azure azure-cosmosdb

7
推荐指数
1
解决办法
2639
查看次数

Cosmos db graph与Azure Sql Server - 性能和成本

想象一下社交网络应用程序.用户关注其他用户和用户拍照.照片上有其他用户的标签.

我正在尝试为该应用程序获得有效的Cosmos数据库实现.我提供了SQL Server版本以及基准测试.

这是图表: 在此输入图像描述

这是它的表格版本:

在此输入图像描述

这是Gremlin查询:

g.V('c39f435b-350e-4d08-a7b6-dfcadbe4e9c5')
.out('follows').as('name')
.out('took').order(local).by('postedAt', decr).as('id', 'postedAt')
.select('id', 'name', 'postedAt').by(id).by('name').by('postedAt')
.limit(10)
Run Code Online (Sandbox Code Playgroud)

这是等效的SQL查询(实际上是linq):

Follows
.Where(f => f.FollowerId == "c39f435b-350e-4d08-a7b6-dfcadbe4e9c5")
.Select(f => f.Followees)
.SelectMany(f => f.Photos)
.OrderByDescending(f => f.PostedAt)
.Select(f => new { f.User.Name, f.Id, f.PostedAt})
.Take(10)
Run Code Online (Sandbox Code Playgroud)

该用户跟随136个用户,他们共同拍摄了257张照片.

SQL Server和Cosmos db都位于West Europe Azure位置.我在法国.我在Linpad上做了一些测试.

  • Gremlin查询运行时间超过1.20秒,消耗约330 RU.仅供参考,400RU/s的费用为20美元/月.
  • SQL查询在70毫秒内运行.db是10 DTU(S0的1个实例).因此它的成本为12.65eur /月

如何使用cosmos db更快更便宜地获取Feed?

注意:为了让RU充电,我正在使用Microsoft.Azure.Graph.但我也可以使用Gremlin.Net并得到类似的结果.

azure graph-databases gremlin azure-cosmosdb

7
推荐指数
1
解决办法
2301
查看次数

在CosmosDB中索引数组

为什么CosmosDB默认不进行索引?默认索引路径是

"path": "/*"
Run Code Online (Sandbox Code Playgroud)

这不是指"索引一切"吗?不是"除了数组之外的所有索引".

如果我将我的数组字段添加到索引中,如下所示:

"path": "/tags/[]/?"
Run Code Online (Sandbox Code Playgroud)

它将工作并开始索引特定的数组字段.

但我的问题是为什么不"索引一切"索引一切?

编辑:这是一篇描述我所看到的行为的博客文章.http://www.devwithadam.com/2017/08/querying-for-items-in-array-in-cosmosdb.html Array_Contains查询非常慢,显然没有使用索引.如果您明确地将相关字段添加到索引中,那么查询很快(显然它们开始使用索引).

azure azure-cosmosdb

7
推荐指数
1
解决办法
1556
查看次数

如何将Azure DocumentDB Document类转换为POCO类?

有没有一种方法可以将Microsoft.Azure.Documents.Document对象转换为我的类类型?

我用编写了一个Azure函数类CosmosDBTrigger。触发器接收的数组Microsoft.Azure.Documents.Document。我喜欢使用Document该类,以便可以访问有关记录本身的元数据,但是我也想以静态方式与我的类类型中的数据进行交互。

调用时,我看到了数据的JSON表示形式ToString。是否应该使用Newtonsoft将JSON手动转换为我的类类型?

c# azure azure-cosmosdb

7
推荐指数
2
解决办法
2043
查看次数

Azure数据工厂从foreach价值中获取数据

我有一个查找活动,可从Blob中的容器获取值。我有一个foreach活动,它与查找活动有关

在此处输入图片说明

在设置下,其值为:

@activity('LookupMessageType').output.value
Run Code Online (Sandbox Code Playgroud)

我还有另一个在该foreach活动中运行的复制活动。它将数据从cosmos DB复制到Azure Data Lake。
在此处输入图片说明

这是源数据集中的查询:

select c.Tag, data.assetTag, data.timestamp, data.jsonVersion, data.messageType, data.speed from c join data in c.data
where (data.speed>  item().speed_Value) AND
(data.timestamp >= '@{formatDateTime(addhours(pipeline().TriggerTime, -1), 'yyyy-MM-ddTHH:mm:ssZ' )}' 
AND data.timestamp < '@{formatDateTime(pipeline().TriggerTime, 'yyyy-MM-ddTHH:mm:ssZ' )}')
Run Code Online (Sandbox Code Playgroud)

运行此管道时出现错误:

{
    "errorCode": "2200",
    "message": "Failure happened on 'Source' side. ErrorCode=UserErrorDocumentDBReadError,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=DocumentDb operation failed: Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":231,\"end\":235},\"code\":\"SC2005\",\"message\":\"'item' is not a recognized built-in function name.\"}]}\r\nActivityId: *redacted*, documentdb-dotnet-sdk/1.21.1 Host/64-bit MicrosoftWindowsNT/6.2.9200.0.,Source=Microsoft.DataTransfer.ClientLibrary.DocumentDb,''Type=Microsoft.Azure.Documents.BadRequestException,Message=Message: {\"errors\":[{\"severity\":\"Error\",\"location\":{\"start\":231,\"end\":235},\"code\":\"SC2005\",\"message\":\"'item' is not a recognized built-in function name.\"}]}\r\nActivityId: redacted, documentdb-dotnet-sdk/1.21.1 Host/64-bit MicrosoftWindowsNT/6.2.9200.0,Source=Microsoft.Azure.Documents.Client,''Type=System.Runtime.InteropServices.COMException,Message=Exception from HRESULT: 0x800A0B00,Source=,'",
    "failureType": "UserError", …
Run Code Online (Sandbox Code Playgroud)

azure azure-data-factory azure-cosmosdb

7
推荐指数
1
解决办法
5057
查看次数