繁体   English   中英

Azure SQL数据库和以用户身份执行-C#连接池

[英]Azure SQL Database and EXECUTE AS USER - C# Connection Pooling

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

在SQL Azure包含的数据库中,我具有:
1)具有名为“ ReaderUser”的登录名的SQL身份验证用户,具有固定的长密码和疯狂密码。
2)使用以下命令在数据库中创建的未登录用户:CREATE USER [] WITH LOGIN
3)带有数据的表,由USER和行级安全保护。 ReaderUser无法访问任何数据,它仅仅是“代理”用户。
4)ReaderUser可以模拟任何其他非管理用户(创建的各种类型的“未登录”)。 数据只能由任何一个读取。

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

当应用程序用户登录时,已登录的应用程序标识(Active Directory UPN)随后传递给数据库,以使用以下方法设置正确的用户上下文:

EXECUTE AS USER = 'myuser@mydomain.com' WITH NO REVERT;

然后,用户访问该应用程序并仅查看其数据,这受行级安全性的约束。

我的问题是,如何将连接池化? 是按用户还是按ReaderUser登录(连接字符串)来合并它们? 用户可以使用相同的连接字符串同时从多个应用程序连接。 我已经浏览了几篇文章,但是对于这种特定情况我无法获得清晰的解释。 谁能阐明一些想法?

希望将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还原执行上下文。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM