1

我在我的 SQL Server 数据库中的临时表上使用行级安全性。为了遵守 GDPR,我不仅需要能够删除当前表中的这些数据,还要删除它的 _History 表(时态表)。

在RLS之前,我曾经这样做:

ALTER TABLE [dbo].[Table] SET (SYSTEM_VERSIONING = OFF);
DELETE FROM [dbo].[Table_History] WHERE UserID=@userID;
ALTER TABLE [dbo].[Table] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[Table_History]));

但是现在,这会产生错误:

Cannot ALTER 'Table' because it is being referenced by object 'fn_Table_Predicate'.

在启用 RLS 的情况下启用和禁用系统版本控制的正确方法是什么?

4

1 回答 1

3

我的情况

在更改引用另一个视图的视图时,我遇到了类似的问题。为了示例,我已重命名视图:

当试图改变我的观点时,我收到了这条消息:

无法更改“AAAAA”,因为它被对象“BBBBB”引用。

我的观点 BBBBB 是使用“WITH SCHEMABINDING”创建的

我如何解决它

所以我改变了我的观点 BBBBB 只是删除了“WITH SCHEMABINDING”(其余逻辑保持不变)。
然后我改变了我的看法 AAAA。
完成后,我改变了我的观点 BBBBB 再次添加“WITH SCHEMABINDING”

希望这可以帮助。

于 2020-03-17T20:30:39.177 回答