我有一個網路應用程式,使用匿名認證和一個連接字串到一個有專用SQL-賬戶的SQL服務器上運行。連接字串:
< add name="ConnectionString" connectionString="資料源=xxxxx; 初始目錄=xxxxx;用戶名=xxxxxx;密碼=xxxxxx" providerName="System. Data.SqlClient" />
一切正常,但在向應用程式添加訪問控制后:
一切正常。
<system.webServer>
<security>
<authorization>
<洗掉用戶="*" 角色=" 動詞=" />
< add accessType="Allow" roles="DOMAINADGroup" />/span>
</authorization>/span>
</security>
</system.webServer>/span>
在IIS中改成Windows認證后,使用SQL-server連接的頁面停止作業。我并沒有改變連接字串。錯誤資訊:
在建立與SQL Server的連接時,發生了一個與網路有關的或特定于實體的錯誤。 建立與 SQL Server 的連接時,發生了一個與網路有關的或特定于實體的錯誤。沒有找到該服務器或 無法訪問。確認實體名稱是正確的,并且 SQL Server被配置為允許遠程連接。(提供者。SQL 網路介面,錯誤:26 - 定位服務器/實體錯誤 指定)。) 來源錯誤:在執行當前的網路請求時,產生了一個未處理的例外。 當前網路請求的執行程序中產生了一個未處理的例外。關于例外的來源和位置的資訊 例外的來源和位置的資訊可以通過下面的例外堆疊跟蹤來確定。
堆疊跟蹤:
[SqlException(0x80131904)。在建立與 SQL 的連接時,發生了一個與網路有關的或特定于實體的 在建立與 SQL Server 的連接時發生錯誤。該 服務器沒有找到或無法訪問。核實實體 命名是否正確,以及SQL Server是否被配置為允許遠程 連接。(提供者。SQL網路介面,錯誤:26 - 錯誤 找到指定的服務器/實體)]
2. 控制元件(DbConnectionPoolIdentity 身份, SqlConnectionString connectionOptions, Object providerInfo, 字串newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 354
系統.資料.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 6318697
例外和警告(TdsParserStateObject)。 態物件)。) 245 System.Data.SqlClient.TdsParser.Connect(ServerInfo 服務器資訊, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject, Boolean withFailover) 536
系統.資料.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) 6338834
呼叫中心是指一個在中國大陸地區的呼叫中心,在中國大陸地區的呼叫中心是指一個在中國大陸地區的呼叫中心,在中國大陸地區的呼叫中心是指一個在中國大陸地區的呼叫中心。 options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 300
瀏覽器中的 "DbConnectionFactory.CreateNonPooledConnection"(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 45
呼叫中心是由一個叫作 "DbConnectionFactory.GetConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) "的工廠負責的。 owningConnection) 6343166
系統.資料.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 6343479
System.Data.SqlClient.SqlConnection.Open() 258
System.Web.Management.SqlServices.GetSqlConnection(String server, 字串user, 字串password, Boolean trusted, 字串 connectionString) 115[HttpException (0x80004005): 無法連接到SQL Server 資料庫。]
。
System.Web.Management.SqlServices.GetSqlConnection(String server, 控制元件,密碼,可信任的布林值,字串 connectionString) 4052597
系統.Web.管理.SqlServices.SetupApplicationServices(String server, String user, String password, Boolean trusted, String connectionString, String database, String dbFileName, SqlFeatures features, Boolean install) 159
系統.Web.DataAccess.SqlConnectionHelper.CreateMdfFile(String fullFileName, String dataDir, String connectionString) 825
連接字串的使用示例:
using (SqlConnection conn = new SqlConnection(System. 配置.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString))
{
conn.Open()。
有什么想法可以導致這種情況嗎?
uj5u.com熱心網友回復:
在堆疊跟蹤中,CreateMdfFile似乎試圖連接到一個(LocalDb)實體。
我有一個理論。 如果你使用 SQL Express 或 LocalDb 連接到本地資料庫檔案,這實際上是合理的,因為檔案訪問取決于代碼運行的身份。 但是,與遠程 SQL 服務器建立 TCP/IP 連接,即使使用瀏覽器服務也不行。
在 IIS 中,匿名請求默認以 IUSR 的形式運行,而 Windows Auth 以 應用程式池身份的形式運行,例如 DefaultAppPool。
因此,授予包含資料庫的檔案夾完全控制權,并確保資料庫檔案啟用了 ACL 繼承,或者單獨授予應用程式池身份對這些檔案的完全控制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/323104.html
標籤:
