3

Visual Studioで自分のWebサイト(ASP.NET MVC)を使用していましたが、サーバーでホストしたいと考えています。VisualStudioから使用するネットワーク共有に公開しました。サーバーは、Windows Home Server、IIS 6、およびSQL Server 2008 R2(エクスプレス)を実行しています。

Microsoft SQL Server Management Studioで、データベースを接続し、ユーザーIUSR_SERVERがデータベースの所有者であることを確認しました。また、ユーザーのネットワークサービスにアクセスできることを確認しました。

WebサイトはIISで、IUSR_SERVERとして匿名で実行されるように構成されています。IUSR_SERVERおよびファイルシステムのネットワークサービスへの書き込みおよび読み取りアクセスを許可し、読み取り専用のものがないことを確認しました。

web.configには次の接続文字列があります。

        <connectionStrings>
    <remove name="ApplicationServices" />
  <add name="ApplicationServices" connectionString="Data Source=.\SQLExpress;Integrated Security=True;Initial Catalog=MyDatebase"
   providerName="System.Data.SqlClient" />
     </connectionStrings>

しかし、自分のWebサイトを閲覧できません。このエラーのみが発生します:

'/'アプリケーションのサーバーエラー。

ユーザーには、このアクションを実行する権限がありません。説明:現在のWebリクエストの実行中に未処理の例外が発生しました。エラーとエラーがコードのどこで発生したかについての詳細は、スタックトレースを確認してください。

例外の詳細:System.Data.SqlClient.SqlException:ユーザーにはこのアクションを実行する権限がありません。

ソースエラー:

現在のWebリクエストの実行中に、未処理の例外が生成されました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して識別できます。

スタックトレース:

[SqlException(0x80131904):ユーザーにはこのアクションを実行する権限がありません。]
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException例外、ブール値breakConnection)+4846887 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)+194

私はすべてを試したような気がします。これであなたの援助に非常に感謝するでしょう。

編集:

This is the event in the event viewer:
Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 2010-06-05 23:55:08 
Event time (UTC): 2010-06-05 21:55:08 
Event ID: 88a3a76c00a34e21bf6e711b3b3a8f21 
Event sequence: 137 
Event occurrence: 59 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/6893/Root-2-129202466028125000 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: C:\Inetpub\WebPage\ 
    Machine name: SERVER 

Process information: 
    Process ID: 5864 
    Process name: w3wp.exe 
    Account name: SERVER\USER

Exception information: 
    Exception type: SqlException 
    Exception message: User does not have permission to perform this action. 

Request information: 
    Request URL: http://localhost/ 
    Request path: / 
    User host address: 127.0.0.1 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: SERVER\USER

Thread information: 
    Thread ID: 1 
    Thread account name: SERVER\USER
    Is impersonating: True 
    Stack trace:    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
   at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user)
   at System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()
   at System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()
   at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
   at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)     

Custom event details: 

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.
4

4 に答える 4

2

問題は、DataContextがweb.configにない独自の接続文字列を使用していたことであることが判明しました。そのため、変更されることはなく、接続もできませんでした。datacontextがweb.configの文字列を使用するようにコードを変更し、それが機能するようにしました:)

于 2010-06-06T09:48:39.223 に答える
1

IUSR_Serverアカウントがファイルシステム内のSQLExpressデータベースに完全にアクセスできることを確認しましたか?

IISのアプリケーションプールをIUSR_Serverとして実行することもできます(アプリケーションは独自のアプリプールで実行されていますか?)。次に、匿名ユーザーのWebサイトのセキュリティをデフォルトに戻します。これを行うときは、IUSR_ServerアカウントがIIS_WPGグループの一部であることを確認してください。これにより、アプリケーションプールでの偽装に対するすべての正しいアクセス許可がアカウントに付与されます。

于 2010-06-01T20:43:06.967 に答える
1

アクセス許可は、ユーザーIDではなく、SQLServerがログイン用に保持する内部IDによるものです。これらは2つのサーバーであるため、ログイン名の内部IDは両方のマシンで異なります。

サーバー間でデータベースを移動する場合、ユーザーが孤立するため、ユーザーのログインを修正する必要があります。新しいサーバーでは内部IDが異なるため、次のTSQLコマンドを実行してユーザーのログインを修正します。

EXEC sp_change_users_login 'Auto_Fix', 'IUSR_Server'

データベースにユーザーがいますが、サーバーにもログインしている必要があります。問題を解決するには、両方が存在することを確認する必要があります(データベースユーザーが孤立している場合)

于 2010-06-01T20:45:20.787 に答える
0

次の3行目

スレッド情報:
スレッドID:1
スレッドアカウント名:SERVER \ USER

<-SERVER \ USERとは何ですか、それはIUSERまたはネットワークサービスですか?ネットワークサービス(通常はアプリケーションプールのID)の場合、このスレッドアカウント名はSQLサーバーデータベースにアクセスできる必要があります。理想的な解決策は、明示的な資格情報を指定して構成を変更するか、スレッドアカウント名がデータベースへの完全なアクセス(読み取り/書き込み)アクセス権を持っていることを確認することです。

于 2010-06-06T10:01:39.157 に答える