Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server MVC中的Azure AD auth将模拟传递到Azure SQL_Sql Server_Asp.net Mvc_Azure_Azure Active Directory - Fatal编程技术网

Sql server MVC中的Azure AD auth将模拟传递到Azure SQL

Sql server MVC中的Azure AD auth将模拟传递到Azure SQL,sql-server,asp.net-mvc,azure,azure-active-directory,Sql Server,Asp.net Mvc,Azure,Azure Active Directory,我所拥有的: MVC和web api通过实体框架访问azure sql数据库(在这种情况下,EF并不重要) MVC应用程序的Azure广告登录 我想做的是: 使用登录的Azure AD用户连接到Azure sql数据库(模拟用户) 现在我知道人们会告诉我,由于连接池等原因,不要这样做。但这是为一家小公司设计的,所讨论的web应用在任何给定时间最多可能有2个并发用户,所以我不担心这些事情。DBA希望使用对sql server的单独登录,以便轻松设置行级安全性。也许有一种不同的方式来进行设置

我所拥有的:

  • MVC和web api通过实体框架访问azure sql数据库(在这种情况下,EF并不重要)
  • MVC应用程序的Azure广告登录
我想做的是:

  • 使用登录的Azure AD用户连接到Azure sql数据库(模拟用户)
现在我知道人们会告诉我,由于连接池等原因,不要这样做。但这是为一家小公司设计的,所讨论的web应用在任何给定时间最多可能有2个并发用户,所以我不担心这些事情。DBA希望使用对sql server的单独登录,以便轻松设置行级安全性。也许有一种不同的方式来进行设置,但如果可能的话,我想让它工作起来

那么,有没有人知道该怎么做呢

我尝试使用以下连接字符串:

Data Source=tcp:mydbinstance.database.windows.net,1433;Initial Catalog=mydatabase;Authentication=Active Directory Integrated;MultipleActiveResultSets=True; datasource=tcp:mydbinstance.database.windows.net,1433;初始目录=mydatabase;身份验证=集成的Active Directory;MultipleActiveResultSets=True; 这会引发一个错误:

Failed to authenticate the user NT Authority\Anonymous Logon in Active Directory (Authentication=ActiveDirectoryIntegrated). Error code 0x4BC; state 10 The format of the specified domain name is invalid. 无法在Active Directory中对用户NT Authority\Anonymous登录进行身份验证(身份验证=ActiveDirectoryIntegrated)。 错误代码0x4BC;州10 指定域名的格式无效。
我已经搜索过了,但找不到任何关于这条消息的答案。正如你所料,这似乎不是人们经常尝试做的事情。

我认为这不会奏效。SQLAzure使用集成的Sql安全性,而您的MVC应用程序使用基于声明的安全性。有一件事应该是可行的,那就是将MVC站点托管在加入到您的域中的azure VM上。

我认为这是行不通的。SQLAzure使用集成的Sql安全性,而您的MVC应用程序使用基于声明的安全性。有一件事应该是可行的,那就是将MVC站点托管在加入到您的域中的azure VM上。

这正是我所怀疑的。不幸的是,虚拟机不是一个选项。我想我们将使用会话上下文来实现行级安全,希望没有人知道如何欺骗另一个用户(如果他们这样做了,我怀疑RLS无论如何都不会阻止他们)。这就是我所怀疑的。不幸的是,虚拟机不是一个选项。我认为我们将使用会话上下文来实现行级安全,希望没有人知道如何欺骗另一个用户(如果他们这样做了,我怀疑RLS无论如何都不会阻止他们)。我有同样的要求,这似乎是可能的,因为在创建EF连接时可以传递来自Azure AD的JWT令牌。必要时调用AcquireTokenAsync。我不认为“Active Directory集成”是一种方式。必须使用个人用户的承载令牌以编程方式建立连接。嗨@MarkH,你知道吗?@CarlosGarcia是的,我知道,设置起来很痛苦。您需要调用Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext的AcquireTokenAsync方法的实例来获取AccessToken。您可以使用它来设置SqlConnection的AccessToken属性。应用注册需要Azure Sql数据库用户\u模拟委派权限。谢谢@MarkH!我必须用Python来完成,所以我可能会使用MSAL库来获取令牌。顺便说一句,你应该写下来作为一个答案-我会投票给upI,因为我有同样的要求,这似乎是可能的,因为来自Azure AD的JWT令牌可以在创建EF连接时传递。必要时调用AcquireTokenAsync。我不认为“Active Directory集成”是一种方式。必须使用个人用户的承载令牌以编程方式建立连接。嗨@MarkH,你知道吗?@CarlosGarcia是的,我知道,设置起来很痛苦。您需要调用Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext的AcquireTokenAsync方法的实例来获取AccessToken。您可以使用它来设置SqlConnection的AccessToken属性。应用注册需要Azure Sql数据库用户\u模拟委派权限。谢谢@MarkH!我必须用Python来完成,所以我可能会使用MSAL库来获取令牌。顺便说一句,你应该写下来作为答案——我会投票赞成的