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

Azure 使用共享访问签名删除没有“删除”权限的blob内容,azure,azure-storage-blobs,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 block

我正在使用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缺陷还是我缺少共享访问签名的概念?。有什么办法克服这个问题吗


谢谢

共享访问权限的实现方式可以授予用户以下访问权限:删除、列出、无、读取、写入。使用此粒度级别,如果您希望用户能够创建blob,那么他们也将能够更新blob。尽管您可以通过在没有“删除”权限的情况下发出SAS来阻止用户删除blob,但您不能阻止用户修改blob,除非您还拒绝用户创建blob的能力,这两个blob都由“写入”权限控制。

如果我没有错的话,您并不是在真正删除blob。您只是在覆盖blob,如果您在共享访问签名中包含写入权限,则可以这样做。是的,但您必须同意,通过上载空字符串覆盖blob与删除blob是相同的,我的意思是,您不会删除文件本身,但另一方面,一个空blob等于根本没有blob文件,我不这么认为。虽然我同意你的blob对你没有用,但我不符合删除的条件。如果用户上传一些垃圾数据而不是空字符串,会怎么样?你还会考虑删除BLUB吗?这取决于旧数据是否已被删除。用户可以上传他想要的任何数据,只要现有数据仍然存在。您的客户机是否只提供SAS,他们是否编写了如上所述的代码,或者此代码是您编写的?如果是后者,您可以在上传之前拍摄blob的快照,以便获得blob的最后一个工作副本。