首页 > 解决方案 > 如何在 SQL 中为 EF Core 中的 RLS 设置会话上下文

问题描述

我们有一个在 .Net Core 3.1 中开发的 Web api,它与 Azure SQL db 通信并作为 Azure Web 应用程序运行。该数据库是多租户应用程序的单个数据库,并受行级安全性保护。它需要在执行任何 SQL 语句之前设置会话上下文。会话上下文是租户表的主键,是一个整数。

我了解到我可以使用EF Core 拦截器并设置会话上下文。然而,出于安全原因,我们无法在 URL 中发送/接收租户 ID 作为参数,因此我们使用了另一个看起来像加密字符串的标识符。考虑到我们有一个租户标识符,将会话上下文设置为租户 ID 的最有效方法是什么?API 是无状态的,所以我不能使用会话,控制器不需要身份验证,所以我也没有登录用户。最后一个选项,可能也是最丑陋的方法是在服务器端硬编码和维护一个列表,这样我就不必每次都进行数据库访问。

标签: sql-serverasp.net-coreentity-framework-core

解决方案


考虑到@JeroenMostert 的评论,我决定进行一次数据库之旅,因为它不会很昂贵,因为数据不会返回给客户端。但是在获得一些好的知识和理解之后,我肯定会考虑使用内存优化表。


推荐阅读