将数据库服务器连接到克隆生产版本
我正在使用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="data source=[production server];
initial catalog=WorkDatabase;integrated security=False;user id=databaseuser;
password=[production password];multipleactiveresultsets=True;
application name=EntityFramework"" providerName="System.Data.EntityClient" />
<add name="UserDatabaseEntities" connectionString="metadata=[metadata copied from
working development version];provider=System.Data.SqlClient;provider
connection string="data source=[production server];
initial catalog=UserDatabase;integrated security=False;user id=databaseuser;
password=[production password];connect timeout=30;MultipleActiveResultSets=True;
App=EntityFramework"" 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特有的东西?
我不知道为什么这个工作,但这里是显然治愈的问题:我删除的Web.config凭据“databaseuser”,只有读/写访问,并与数据库管理员凭据替换它们。应用程序测试成功。管理员凭证随后被替换为原始的“数据库用户”证书,并且一切正常。这似乎是由于某种原因,应用程序需要管理员第一次访问连接,然后读/写用户可以做同样的事情。
谢谢大家的答案。他们都是正确的,正在完成,但由于某种原因,该计划需要管理员首先显示它的方式。
我见过这个问题,prod数据库对存储的特效具有更多的限制权限。我的用户可以执行它们,但不能“看到”它们。
听起来好像您尚未为尝试使用生产数据库登录的用户设置适当的SQL权限。
“登录”并查询sql server数据库需要两件事。
- 存储在主数据库中的syslogins SQL登录:
SELECT * FROM master.sys.syslogins
- 要查询从主数据库的登录创建的特定数据库的SQL用户:
SELECT * FROM DatabaseName.sys.sysusers
(该查询可能不是100%准确返回正确的“用户”的条款,但如果你有在该数据库中的用户,肯定会在查询中显示)根据ER
您发布的ror消息,听起来像主数据库中的Sql登录不存在。使用SSMS或服务器资源管理器,您应该能够在sql实例上展开“安全>登录”文件夹并查看所有存在的登录。如果连接字符串中的userId没有出现在该列表中,那么您将无法连接到数据库。
你也可能只需要创建在您要查询数据库的用户。我忘了,如果这种错误在两种情况下都有相同的措词。您应该可以通过转到“DatabaseName> Security> Users”来检查SSMS或Server Explorer。
一旦用户登录和创建,你可能会得到不同的错误说着有关权限,或者访问被拒绝或东西。在这种情况下,你已经创建了数据库用户,没有在该数据库中的足够作用查询表。在这种情况下,您需要确定将用户添加到哪个角色以便查询。这可能因数据库而异。
你有禁止从本地机器访问 – Saravanan
感谢您的答复生产数据库的任何数据库服务器的防火墙规则!我不相信有任何防火墙问题。 – jle
如果克隆的数据库和项目不会有任何进口..你只需要改变连接字符串以指向生产或开发,你应该是好去..假设它们是克隆 – JamieD77