The Row-Level Security
(RLS) feature in Azure SQL Database now supports block predicates. In contrast to filter predicates, which limit the rows visible to a user, block predicates prevent a user from inserting, updating, or deleting rows that violate your access criteria. You should use filter and block predicates together to control read and write access to specific rows in a table.
For example, RLS is commonly used to prevent tenants from accessing each other’s data in multitenant databases. You can use a filter predicate to limit which rows are visible to each tenant, and now you can reuse the same function as a block predicate to prevent cross-tenant inserts or updates:
CREATE SECURITY POLICY Security.tenantAccessPolicy
ADD FILTER PREDICATE Security.fn_tenantAccessPredicate(TenantId) ON dbo.MyTable,
ADD BLOCK PREDICATE Security.fn_tenantAccessPredicate(TenantId) ON dbo.MyTable
For more information, including demos and code samples, check out our announcement blog post: Row-Level Security Block Predicates are Generally Available