使用共享访问签名删除没有“删除”权限的blob内容

时间:2014-01-23 07:17:20

标签: azure azure-storage-blobs

我正在使用Azure blob存储来存储来自客户端的数据。

客户端使用共享访问签名并且没有“删除”权限。

尽管如此,我可以使用以下代码删除没有“删除”权限的blob内容:

// sharedKey doesn't contain 'Delete' permission
var credentials = new StorageCredentials(sharedKey);
var blob = new CloudBlockBlob(blobPath, credentials);
var blockIds = new List<string>();

// If not getting all current blocks ids, all current data will be lost.
// if (blob.Exists())
// {
//  blockIds.AddRange(blob.DownloadBlockList().Select(b => b.Name));
// }

var blockId =
Convert.ToBase64String(
    Encoding.Default.GetBytes(blockIds.Count.ToString("d6",    CultureInfo.InvariantCulture)));
 blockIds.Add(blockId);

byte[] eventInBytes = Encoding.Default.GetBytes(string.Format(CultureInfo.InvariantCulture, "{0}\n",   formattedEvent));

using (var eventStream = new MemoryStream(eventInBytes))
{
    blob.PutBlock(blockId, eventStream, null);
}

blob.PutBlockList(blockIds);

这是Azure缺陷(或者我错过了共享访问签名的概念吗?。任何方法可以解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

实现共享访问权限的方式可以为用户授予这些访问权限:删除,列表,无,读取,写入(See this article)。如果您希望用户能够创建blob,则具有此级别的粒度,那么他们也可以更新blob。虽然您可以通过发出没有删除权限的SAS来阻止用户删除blob,但是您无法阻止用户修改blob,除非您还拒绝创建它们,这两者都受“写入”权限控制。