Azure SQL数据库和EXECUTE AS USER - C#连接池

Mur*_*oft 2 c# sql-server ado.net database-connection azure-sql-database

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

在SQL Azure包含的数据库中,我有:
1)一个SQL身份验证用户,其登录名为"ReaderUser",具有固定的长而疯狂的密码.
2)在数据库中创建的用户无需登录使用:CREATE USER [] WITHOUT 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;
Run Code Online (Sandbox Code Playgroud)

然后,用户访问应用程序并仅查看其数据,受行级别安全性的限制.

我的问题是,如何汇集联系?它们是按用户还是按ReaderUser登录(连接字符串)汇集?用户可以使用相同的连接字符串同时从多个应用程序连接.我已经浏览了几篇文章,但我无法对这个具体情况做出明确的解释.任何人都能解释一下吗?

Rem*_*anu 5

希望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恢复执行上下文.