2016-12-15 63 views
0

我正在使用Visual Studio在C#中創建我的第一個ASP.net應用程序,並且我有一個工作的開發版本。創建單獨的生產數據庫後,我使用Windows資源管理器複製整個開發項目文件夾。生產版本中生產文件夾名稱和.sln文件名稱均已更改。將數據庫服務器連接到克隆生產版本

儘管複雜類型和函數導入仍然存在,並且沒有找到任何存儲過程可以導入或更新,但現在生成.edmx文件的模型瀏覽器在「存儲過程/函數」下不顯示任何內容。這是在Web.config連接字符串已被指向生產數據庫服務器(包括標識和密碼)之後,並且已通過服務器瀏覽器成功添加並測試了數據連接。還有一個SQLException Login failed for user 'databaseuser'.,其中databaseuser是Web.config連接字符串中的標識,只要測試生產應用程序。

有誰知道如何將複製的生產項目連接到數據庫服務器?提前謝謝了!

Web.config文件的連接字符串:

<connectionStrings> 
    <add name="DefaultConnection" providerName="System.Data.SqlClient" 
     connectionString="Server=[production server];Database=UserDatabase; 
     User ID=databaseuser;Password=[production password];Trusted_Connection=False; 
     Connection Timeout=30;" /> 
    <add name="WorkDatabaseEntities" connectionString="metadata=[metadata copied from 
     working development version];provider=System.Data.SqlClient; 
     provider connection string=&quot;data source=[production server]; 
     initial catalog=WorkDatabase;integrated security=False;user id=databaseuser; 
     password=[production password];multipleactiveresultsets=True; 
     application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    <add name="UserDatabaseEntities" connectionString="metadata=[metadata copied from 
     working development version];provider=System.Data.SqlClient;provider 
     connection string=&quot;data source=[production server]; 
     initial catalog=UserDatabase;integrated security=False;user id=databaseuser; 
     password=[production password];connect timeout=30;MultipleActiveResultSets=True; 
     App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

編輯1

.edmx文件現在顯示存儲過程的模型瀏覽器。 「數據庫用戶」在WorkDatabase上具有讀取和寫入權限,但在「安全」下沒有dbo Schema。

編輯2

這裏的一個位的堆棧跟蹤:

[SqlException (0x80131904): Login failed for user 'databaseuser'.] 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +347 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +78 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +191 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +154 
    System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +21 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +141 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +362 
    System.Data.SqlClient.SqlConnection.Open() +96 

EDIT 3

堆棧跟蹤似乎兩個不同跡線之間的交替。這是什麼意思?

[SqlException (0x80131904): Login failed for user 'databaseuser'.] 
    System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool pool, String accessToken, Boolean applyTransientFaultHandling) +970 
    System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +802 
    System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +38 
    System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +682 
    System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +89 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +426 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +78 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +191 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +154 
    System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +21 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +141 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +362 
    System.Data.SqlClient.SqlConnection.Open() +96 

EDIT 4

服務器被託管在AWS。也許這是AWS特有的東西?

+0

你有禁止從本地機器訪問 – Saravanan

+0

感謝您的答覆生產數據庫的任何數據庫服務器的防火牆規則!我不相信有任何防火牆問題。 – jle

+0

如果克隆的數據庫和項目不會有任何進口..你只需要改變連接字符串以指向生產或開發,你應該是好去..假設它們是克隆 – JamieD77

回答

0

我不知道爲什麼這個工作,但這裏是顯然治癒的問題:我刪除的Web.config憑據「databaseuser」,只有讀/寫訪問,並與數據庫管理員憑據替換它們。應用程序測試成功。管理員憑證隨後被替換爲原始的「數據庫用戶」證書,並且一切正常。這似乎是由於某種原因,應用程序需要管理員第一次訪問連接,然後讀/寫用戶可以做同樣的事情。

謝謝大家的答案。他們都是正確的,正在完成,但由於某種原因,該計劃需要管理員首先顯示它的方式。

0

我見過這個問題,prod數據庫對存儲的特效具有更多的限制權限。我的用戶可以執行它們,但不能「看到」它們。

0

聽起來好像您尚未爲嘗試使用生產數據庫登錄的用戶設置適當的SQL權限。

「登錄」並查詢sql server數據庫需要兩件事。

  1. 存儲在主數據庫中的syslogins SQL登錄:SELECT * FROM master.sys.syslogins
  2. 要查詢從主數據庫的登錄創建的特定數據庫的SQL用戶:SELECT * FROM DatabaseName.sys.sysusers(該查詢可能不是100%準確返回正確的「用戶」的條款,但如果你有在該數據庫中的用戶,肯定會在查詢中顯示)根據ER

MSDN on creating a user

您發佈的ror消息,聽起來像主數據庫中的Sql登錄不存在。使用SSMS或服務器資源管理器,您應該能夠在sql實例上展開「安全>登錄」文件夾並查看所有存在的登錄。如果連接字符串中的userId沒有出現在該列表中,那麼您將無法連接到數據庫。

你也可能只需要創建在您要查詢數據庫的用戶。我忘了,如果這種錯誤在兩種情況下都有相同的措詞。您應該可以通過轉到「DatabaseName> Security> Users」來檢查SSMS或Server Explorer。

一旦用戶登錄和創建,你可能會得到不同的錯誤說着有關權限,或者訪問被拒絕或東西。在這種情況下,你已經創建了數據庫用戶,沒有在該數據庫中的足夠作用查詢表。在這種情況下,您需要確定將用戶添加到哪個角色以便查詢。這可能因數據庫而異。

+0

感謝您的迴應!在項目查詢的兩個數據庫中創建並分配數據庫用戶的讀/寫公共訪問權限。走出我沒有創建的測試服務器,數據庫用戶在Securables中爲一個數據庫分配一個dbo Schema,但不是管理用戶的那個。用戶是否需要在其他數據庫中使用相同的Securables設置? – jle

+0

用戶是在兩個數據庫中創建的,但主數據庫中的sql登錄怎麼辦? – Sam

+0

我相信它在那裏。它在服務器級別的安全性文件夾中創建並分配給兩個必需的數據庫。現在可以訪問其中一個數據庫,但用戶數據庫不能。 – jle

相關問題