Применить фильтр и блокировать предикат к новой таблице

Я работаю с базой данных SQL Server, в которой реализована безопасность на уровне строк. Чтобы получить доступ к контенту для определенного пользователя, мне нужно добавить это к запросу SQL:

EXEC SP_SET_SESSION_CONTEXT @key=N'UserId', @value=1

Это прекрасно работает для существующих таблиц в базе данных. Однако мне нужно добавить новую таблицу в базу данных, и я не могу добавить ту же безопасность в свою новую таблицу.

Так выглядят свойства существующей таблицы

Так выглядят новые свойства таблицы

Это код, который я нашел в документах Microsoft и реализовал его.

CREATE SECURITY POLICY RLS.NewTable
ADD FILTER PREDICATE RLS.fn_securitypredicate(AppUserId)   
    ON dbo.NewTable,  
ADD BLOCK PREDICATE RLS.fn_securitypredicate(AppUserId)   
    ON dbo.NewTable AFTER INSERT   
WITH (STATE = ON);

Очевидно, я получил ошибку:

Не удается найти объект «RLS.fn_securitypredicate», или этот объект не является встроенной функцией с табличным значением.

Теперь я не знаю, где найти правильный предикат блока/фильтра для использования в новой таблице.

TL;DR: где в базе данных SQL Server перечислены предикаты RLS и как мне получить к ним доступ/просмотреть их с помощью Microsoft SQL Server Management Studio?


person Aditya Srivastava    schedule 13.06.2017    source источник
comment
Вот документ Microsoft: docs.microsoft.com /ru-ru/sql/реляционные базы данных/безопасность/   -  person Aditya Srivastava    schedule 13.06.2017


Ответы (1)


Можете ли вы подтвердить, что в вашей базе данных есть функция предиката (RLS.fn_securitypredicate)?

Он появится в Sql Server MS в разделе -> Программируемость -> Функции -> Функции с табличным значением:

введите здесь описание изображения

person Rodney    schedule 14.06.2018