我正在使用Visual Studio在C#中创建我的第一个ASP.net应用程序,并且我有一个可用的开发版本。创建单独的生产数据库后,我使用Windows资源管理器复制整个开发项目文件夹。生产文件夹名称和.sln文件名都在生产版本中更改。
现在,生产.edmx
文件的模型浏览器在存储过程/函数下没有显示任何内容,即使复杂类型和函数导入仍然存在,也找不到要导入的存储过程或更新。这是在将Web.config
连接字符串指向生产数据库服务器之后,包括id和密码,并且已通过Server Explorer成功添加和测试了数据连接。还有一个SQLException Login failed for user 'databaseuser'.
,其中每当测试生产应用程序时,databaseuser都是Web.config连接字符串中的id。
有谁知道如何将复制的生产项目连接到数据库服务器?非常感谢提前!
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
文件中的模型浏览器现在显示存储过程。 &#34;数据库用户&#34;拥有WorkDatabase的读写权限,但在Securables下没有dbo Schema。
编辑2
这里有一点Stack Trace:
[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
编辑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
编辑4
服务器托管在AWS上。也许它是AWS特有的东西?
答案 0 :(得分:0)
我已经看到过这个问题,prod数据库对存储过程有更多限制性权限。我的用户可以执行它们,但不能查看&#39;他们。
答案 1 :(得分:0)
听起来您没有为尝试使用生产数据库登录的用户设置适当的SQL权限。
“登录”和查询sql server数据库需要两件事。
SELECT * FROM master.sys.syslogins
SELECT * FROM DatabaseName.sys.sysusers
(该查询在返回正确的“用户”方面可能不是100%准确,但如果您拥有该数据库中的用户,它肯定会出现在该查询中)根据您发布的错误消息,听起来好像主数据库中的Sql登录不存在。使用SSMS或Server Explorer,您应该能够扩展sql实例上的“security&gt; logins”文件夹,并查看所有存在的登录信息。如果连接字符串中的userId未出现在该列表中,则您将无法连接到数据库。
您可能还需要在数据库中创建要查询的用户。我忘记了这两个案例的错误是否有相同的措辞。您应该可以通过转到“DatabaseName&gt; Security&gt; Users”来检查SSMS或Server explorer。
创建用户和登录后,您可能会收到有关权限或拒绝访问权限或其他内容的其他错误。在这种情况下,您创建的数据库用户在该数据库中没有足够的角色来查询该表。在这种情况下,您需要确定添加用户所需的角色,以便它可以进行查询。这可能因数据库而异。
答案 2 :(得分:0)
我不确定为什么会这样,但是这显然解决了这个问题:我删除了“databaseuser”的Web.config凭据,仅具有读/写访问权限,并将其替换为数据库管理凭据。应用程序测试成功。然后,管理员凭据被原始的“databaseuser”凭据替换,一切正常。似乎由于某种原因,应用程序需要管理员第一次访问连接,然后读/写用户也可以这样做。
感谢大家的回答。他们都是正确的并且正在完成,但由于某种原因,程序需要管理员首先显示它。