小编Fra*_*nia的帖子

如果新值大小相同,SQL Server 更新 nvarchar 语句是否会覆盖磁盘上的相同地址?

是否可以在 T-SQL 更新语句中覆盖相同的磁盘地址?出于安全或匿名原因,用例将阻止恢复磁盘上的原始文本。

CREATE TABLE Test(
  Id int, 
  Message nvarchar(1000))
GO

INSERT INTO Test (Id, Message) VALUES (1, 'Hello!')
GO
Run Code Online (Sandbox Code Playgroud)

所以在这一点上,“你好!” 写入磁盘。如果运行更新语句,是否可以保证(或至少很有可能)覆盖磁盘上的相同位置?

UPDATE Test SET Message = '000000' WHERE Id = 1
GO
Run Code Online (Sandbox Code Playgroud)

在 SQL Server 实现中,原始 'Hello!' 的概率是多少?价值将不再在磁盘上?

我假设新值的大小相同。我的猜测是,如果新值的大小不同,那么 SQL Server 会将更新后的值写入新位置,留下“你好!” 在原来的位置,但现在标记为免费。我还假设删除对磁盘上的原始值没有任何影响,而只是将该位置标记为空闲。

如果情况并非如此,或者不能保证,或者至少很有可能,是否有另一种方法可以从磁盘中删除该值?

这里的要求不是达到保护政府机密安全的程度。这更像是一种营销声明,即已删除的项目确实已经消失并且无法恢复。

我知道这里有很多警告。我知道 SQL 语言没有解决这个问题。我特别询问 SQL Server 的实现。答案可能是它是不可知的。只是想知道是否有文档或常识,或者是否有人测试了实现细节。

我们正在使用不加密 SQL Server 磁盘的托管服务。我们在写入数据库之前对值进行加密。只是在研究“腰带和牙套”解决方案。

sql-server database-internals update

6
推荐指数
1
解决办法
784
查看次数

标签 统计

database-internals ×1

sql-server ×1

update ×1