Невозможно ИЗМЕНИТЬ «Таблицу», поскольку на нее ссылается объект «предикат» — SQL Server RLS с Temporal

Я использую Row-Level Security для временной таблицы в моей базе данных 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?


person user1054922    schedule 07.12.2019    source источник
comment
Это не имеет ничего общего с правильным путем. Ошибка буквально говорит вам о проблеме. fn_Table_Predicate ссылается на Table с помощью SCHEMA_BINDING, поэтому вы не можете ALTER Table. Вам потребуется DROP все объекты, ссылающиеся на Table, выполнить ALTER, а затем воссоздать их.   -  person Larnu    schedule 08.12.2019
comment
Ничего себе, это большая кроличья нора, чтобы спуститься. Возможно, достаточно просто отключить SCHEMA_BINDING для предикатов.   -  person user1054922    schedule 08.12.2019


Ответы (1)


Моя ситуация

У меня была аналогичная проблема при изменении представления, которое ссылалось на другое представление. Я переименовал представления для примера:

При попытке изменить мой вид AAAAA я получил это сообщение:

Невозможно ИЗМЕНИТЬ «AAAAA», поскольку на него ссылается объект «BBBBB».

Мое представление BBBBB было создано с использованием "WITH SCHEMABINDING"

Как я это решаю

Итак, я изменил свое представление BBBBB, просто удалив "СО СХЕМОЙ ПРИВЯЗКИ" (остальная логика осталась прежней).
Затем я изменил свое представление AAAAA.
Когда это было сделано, я снова изменил свое представление BBBBB. добавив еще раз "С ПРИВЯЗКОЙ СХЕМ"

Надеюсь это поможет.

person Matias Llapur    schedule 17.03.2020