我们有一个Azure云应用程序,它将用户登录(会员)信息存储到Azure SQL数据库中。我们有此数据库的多个版本,一个用于生产,一个用于开发。我们希望我们的开发数据库对世界开放,而生产仅限于Azure云应用程序。虽然数据库向世界开放,但是所有数据库都运行良好。但是,在修改Azure SQL中的服务器级防火墙规则以限制允许的IP(不包括家用计算机的IP)并添加允许家用计算机的IP的数据库级规则之后,成员资格停止工作。现在,我可以使用Microsoft SQL Management Studio从家里访问数据库,甚至可以通过Visual-Studio Server Explorer(使用来自web.api的connectionString)连接到数据库。然而,成员资格不再允许从家到数据库的连接。Membership.GetUser()返回:
{System.Data.SqlClient.SqlException(0x80131904):无法打开登录请求的服务器“ XXXXXX”。IP地址为“ XXX.XXX.59.158”的客户端不允许访问服务器。若要启用访问,请使用Windows Azure管理门户或在主数据库上运行sp_set_firewall_rule为该IP地址或地址范围创建防火墙规则。此更改最多可能需要五分钟才能生效。用户“ visualbee”的登录失败。该会话的跟踪ID已分配为“ 23e9447b-f169-49ab-88df-305172323803”。需要帮助时,将此跟踪ID提供给客户支持。
在web.config中定义的数据库连接字符串为:
<add name="usersDB" connectionString="data source=XXXX.database.windows.net;Initial Catalog=XXX.YYY.UsersDatabase;User ID=uuu@gggg;Password=pppppp;Encrypt=true;Trusted_Connection=false;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
来自web.config的成员资格和RoleManager定义:
<membership defaultProvider="DefaultMembershipProvider" hashAlgorithmType="SHA1">
<providers>
<clear />
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXbf3856ad364eXX" connectionStringName="usersDB" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="2147483647" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager enabled="false" defaultProvider="DefaultRoleProvider">
<providers>
<clear />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXbf3856ad364eXX" connectionStringName="usersDB" applicationName="/" />
</providers>
</roleManager>
数据库级防火墙规则:(如您所见,它不排除任何人)
我终于通过实验找到了解决方案。我在“系统数据库”数据库中添加了数据库级规则:
exec sp_set_database_firewall_rule N'AllowAll','0.0.0.0','255.255.255.255'
现在,我可以使用成员资格连接到用户数据库。具有适当数据库级防火墙规则的其他数据库也可以公开访问。其余数据库返回“不允许IP地址为XXX的客户端访问服务器”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句