我正在使用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的能力,这两者均由“写入”权限控制。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句