3

我們有一個Azure Cloud應用程序,它將用戶登錄(成員資格)信息存儲到Azure SQL數據庫中。我們有這個數據庫的幾個版本,一個用於生產,一個用於開發。我們希望我們的開發數據庫向全世界開放,生產僅限於Azure雲應用程序。當數據庫向世界開放時,所有工作都很好。但是,在Azure SQL中修改服務器級防火牆規則以限制允許的IP(不包括我的家用計算機的IP)並添加允許家用計算機的IP的數據庫級規則之後,Membership停止工作。 現在,我可以使用Microsoft SQL Management Studio從家中訪問數據庫,甚至可以使用Visual-Studio Server Explorer(使用web.api中的connectionString)連接到它。但是,成員資格不允許再連接到家中的數據庫。 Membership.GetUser()返回:成員資格不適用於Azure SQL數據庫級防火牆

{System.Data.SqlClient.SqlException(0x80131904):無法打開服務器 'XXXXXX' 由登錄請求。 IP地址爲「XXX.XXX.59.158」的客戶端不允許訪問服務器。要啓用訪問權限,請使用Windows Azure管理門戶或在master數據庫上運行sp_set_firewall_rule以爲此IP地址或地址範圍創建防火牆規則。此更改可能需要五分鐘才能生效。 用戶'visualbee'登錄失敗。 此課程已分配了跟蹤ID「23e9447b-f169-49ab-88df-305172323803」。當您需要幫助時,將此跟蹤ID提供給客戶支持。

在web.config中定義的數據庫連接字符串是:從web.config中

<add name="usersDB" connectionString="data source=XXXX.database.windows.net;Initial Catalog=XXX.YYY.UsersDatabase;User [email protected];Password=pppppp;Encrypt=true;Trusted_Connection=false;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" /> 

成員和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> 

數據庫級防火牆規則:(你可以它不包括任何人) Database-level firewall rule

+0

你有多少連接字符串在** connectionStrings **裏面*** web.config ***?你還可以在*** web.config ***中發佈**會員**和** roleManager **標籤嗎? – Win 2015-02-09 20:09:15

+0

可能是你的動態IP?或者您可以通過webmatrix在實時模式下檢查連接字符串? – brykneval 2015-02-09 20:47:23

+0

您的描述有點令人困惑......是否將部署到Azure的Web應用程序或在本地開發計算機上(在家中)以調試模式運行的相同應用程序的問題?動態IP分配可能是一個問題 - 您可能能夠通過SSMS進行連接,但不能從您的代碼中進行連接。我在4G熱點上有過這種確切的行爲,其中每個調用都來自Azure SQL DB防火牆阻止的一系列IP地址。 – 2015-02-10 04:01:03

回答

0

我終於找到了解決方案b y實驗。 我添加了一個數據庫級規則爲「系統數據庫」數據庫:

exec sp_set_database_firewall_rule N'AllowAll','0.0.0.0','255.255.255.255' 

現在我能夠連接到使用會員用戶數據庫。其他具有適當的數據庫級防火牆規則的數據庫也可公開訪問。其餘數據庫返回「IP地址爲XXX的客戶端不允許訪問服務器」。