Azure SQL数据库和执行作为用户- c#连接池

本文关键字:用户 连接 SQL 数据库 执行 Azure | 更新日期: 2023-09-27 18:06:10

我有一个Azure SQL数据库和一些使用它的c#业务应用程序。我一直在努力减少攻击面,更好地理解性能。

在SQL Azure包含的数据库我有:
1)一个SQL认证用户,登录名为'ReaderUser',有一个固定的长而疯狂的密码。2)使用CREATE USER [] without login
创建未登录的用户3)包含数据的表,由USER和Row级别的安全保护。ReaderUser不能访问任何数据,它只是一个"代理"用户。4) ReaderUser可以模拟任何其他非管理用户("不登录"创建的品种)。数据只能被它们中的任何一个读取。

当用户访问我们开发的应用程序时,使用ReaderUser建立数据库连接。应用程序使用。net 4.6.2 ADO.net连接。连接字符串是加密和固定的。也就是说,它不会改变任何用户,他们都使用相同的连接字符串。

当应用程序用户登录时,将登录的应用程序标识(Active Directory UPN)传递给数据库,以便使用

设置正确的用户上下文:
EXECUTE AS USER = 'myuser@mydomain.com' WITH NO REVERT;

用户然后访问应用程序,并且只看到他们的数据,因为受到行级安全性的限制。

我的问题是,如何将连接池?它们是按每个用户还是按每个ReaderUser登录(连接字符串)池?用户可以使用相同的连接字符串从多个应用程序同时连接。我浏览了一些文章,但我无法得到关于这个特定场景的明确解释。有人能告诉我吗?

Azure SQL数据库和执行作为用户- c#连接池

希望在连接池中使用EXECUTE AS的应用程序必须使用特殊的cookie语法:

指定WITH NO REVERT COOKIE = @varbinary_variable子句时,SQL Server数据库引擎将cookie值传递给@varbinary_variable。只有当调用REVERT WITH COOKIE = @varbinary_variable语句包含相同的@varbinary_variable值时,该语句设置的执行上下文才能恢复到以前的上下文。

该选项在使用连接池的环境中很有用。连接池是对一组数据库连接的维护,以供应用服务器上的应用程序重用。因为传递给@varbinary_variable的值只有EXECUTE AS语句的调用者知道,所以调用者可以保证他们建立的执行上下文不能被其他人更改。

所以你的应用程序负责恢复执行上下文,使用特殊的cookie,在将连接返回到池中。