我正在使用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缺陷(或者我错过了共享访问签名的概念吗?。任何方法可以解决这个问题吗?
谢谢!
答案 0 :(得分:2)
实现共享访问权限的方式可以为用户授予这些访问权限:删除,列表,无,读取,写入(See this article)。如果您希望用户能够创建blob,则具有此级别的粒度,那么他们也可以更新blob。虽然您可以通过发出没有删除权限的SAS来阻止用户删除blob,但是您无法阻止用户修改blob,除非您还拒绝创建它们,这两者都受“写入”权限控制。