2014-01-23 36 views
0

我使用Azure blob存儲來存儲來自客戶端的數據。使用共享訪問簽名刪除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); 

這是一個藍色的缺陷(或我失蹤的共享訪問簽名任何方式?概念爲了解決這個問題

感謝

+0

如果我沒有弄錯,你並不是真的刪除了這個blob。如果您在共享訪問簽名中包含寫入權限,則只需覆蓋您可以執行的blob。 –

+0

是真的,但您必須同意通過上傳空字符串覆蓋blob與刪除blob相同(我的意思是,您不會刪除文件本身,但另一方面,空blob等於根本沒有blob文件) – yonisha

+0

我不這麼認爲。雖然我同意你的blob對你沒有用處,但我不會被刪除。如果用戶上傳一些垃圾數據而不是空字符串呢?你還會認爲這個blob被刪除了嗎? –

回答

1

的方式共享訪問權限來實現用戶可被授予這些訪問權限:?!刪除,列出,無,讀取,寫入(See this article)在這個級別的粒度,如果你贏了你的用戶能夠創建一個blob,那麼他們也將能夠更新一個blob。儘管您可以通過發佈不具有刪除權限的SAS來阻止用戶刪除斑點,但您不能阻止用戶修改斑點,除非您還拒絕用戶創建的能力,兩者均受「寫入」權限控制。