gpt4 book ai didi

asp.net - 从ASP.NET访问 "user instance"数据库时用户权限错误

转载 作者:行者123 更新时间:2023-12-01 22:13:05 24 4
gpt4 key购买 nike

托管 csharpindepth.com 的服务器最近已迁移。

大部分工作正常,但我无法访问用于保存勘误表、注释等的数据库。

相关详情:

  • 32 位 Windows Server 2003
  • 已安装 SQL Server Express 2005
  • 在“NETWORK SERVICE”帐户下运行的 ASP.NET 池
  • .NET 3.5
  • 每个人都拥有数据库文件的完全权限(目前,只是为了排除这种情况!)
  • 连接字符串:

    Data Source=.;AttachDbFilename=|DataDirectory|\WebSiteData.mdf;
    Integrated Security=True;User Instance=True
  • 我只需创建一个新的 WebSiteDataContext(默认使用上述连接字符串)即可进行连接

使用从包含文件的目录运行的小型测试控制台应用程序,作为管理员帐户,使用相同的查询,我可以看到数据库的内容。

在 ASP.NET 中我遇到此异常:

SqlException (0x80131904): User does not have permission to perform this action.

编辑:更多信息,这是堆栈跟踪:

[SqlException (0x80131904): User does not have permission to perform this action.]
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844759
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +35
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +144
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +342
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +221
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +189
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +4859187
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +31
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +433
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +66
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +499
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +65
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.SqlClient.SqlConnection.Open() +122
System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) +44
System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() +45
System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() +20
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +57
System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +35

编辑:我错误地认为文件名必须正确 - 更改连接字符串以使其与不同的文件对话不会更改错误。

ProcMon 从未显示它正在接触文件...

编辑:进一步的奇怪之处 - 重新启动在本地系统帐户下运行的应用程序池仍然有问题,这很奇怪!就好像,尽管有错误消息,但它实际上是在尝试做一些不可能的事情(例如,使用错误的路径),而不仅仅是权限问题。

编辑:更多信息 - 我刚刚从“网络服务”服务运行我的小测试控制台应用程序,并且(在初次尝试超时后)它成功了。因此,这不是用户帐户方面的权限问题...而是与它运行的环境有关...

最佳答案

子实例是否启动?当请求 RANU 数据库时,主实例(在本例中为 .\SQLEXPRESS)必须创建一个“子”实例,换句话说,将 sqlservr.exe 进程作为在请求 RANU 的用户的凭据下运行的用户进程启动来自 .SQLEXPRESS 实例的连接。在这种情况下,实例必须作为“NETWORK SERVICE”启动。

要验证子实例是否已启动,请连接到主实例 (.\SQLEXPRESS) 并检查 sys.dm_os_child_instances :

SELECT * 
FROM sys.dm_os_child_instances

如果启动了 NETWORK SERVICE 拥有的子实例,请使用它的 instance_pipe_name 并直接连接到子实例:

sqlcmd -S np:\\.\pipe\<child pipe name>\tsql\query

理想情况下,作为网络服务连接(例如,从作为 NEWTORK 服务启动的交互式 cmd 控制台,也许使用 at.exe 将其安排在未来 1 分钟)。如果有效,最后一步是尝试使用普通 sp_attach_db 附加 MDF。

这些步骤的目的不是解决问题,而是查明失败原因,因为您得到的错误有点通用并且......并不完全有帮助。

关于asp.net - 从ASP.NET访问 "user instance"数据库时用户权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1134151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com