带有WCF服务的SQL安全性

我一直在开发一个WCF服务,调用Web服务,然后到SQL服务器。 在同一解决方案中进行测试时,所有功能都可以正常工作 现在,我在IIS上托管了WCF服务,并试图从一个asp.net Web应用程序进行服务调用。 现在,我的本地机器上托管IIS服务。 在SQL Server Management Studio中连接时使用Windows身份验证。 当我调用Web服务时,在调用SQL时出现以下错误,所以我假设它不喜欢凭据:

Login failed for user 'MYDOMAINMYMACHINENAME$'.

以下是我称之为Web服务的代码。 正如你所看到的,我试着明确地传递我的凭证:

var providerService = new ProviderServices.ProviderService();
providerService.Credentials = new NetworkCredential("myusername", "mypassword", "mydomain");
providerService.UseDefaultCredentials = false;

providerService.CheckProviderExclusion(PPLUser.CurrentProgram.ProgramLabel, ps.No, ps.ProviderName, ps.SocialSecurityNo);

以下是例外的内部文本:

登录用户'PCGUS BON-0010882 $'失败。 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException异常,布尔breakConnection,Action'1 wrapCloseInAction)在System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,布尔callerHasConnectionLock,布尔asyncClose)在System.Data.SqlClient.TdsParser系统上的System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)上的.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj,Boolean&dataReady)在System.Data.SqlClient.SqlIntern的System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,String newPassword,SecureString newSecurePassword,Boolean ignoreSniOpenTimeout,TimeoutTimer超时,布尔withFailover)Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(布尔enlistOK) 在System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer超时,SqlConnectionString connectionOptions,SqlCredential凭据,字符串newPassword,SecureString newSecurePassword上的alConnectionTds.LoginNoFailover(ServerInfo serverInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString connectionOptions,SqlCredential凭据,TimeoutTimer超时) ,System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity,SqlConnectionString connectionOptions,SqlCredential credential,Object providerInfo,String newPassword,SecureString newSecurePassword,Boolean redirectedUserInstance,SqlConnectionString userConnectionOptions,SessionData reconnectSessionData)在System.Data.SqlClient上的布尔重定向用户实例)。 SqlConnectionFactory.CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,对象poolGroupProviderInfo,DbConnectionPool池,DbConnection拥有连接 DbConnectionOptions userOptions)在System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池,DbConnection拥有对象,DbConnectionOptions选项,DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)在System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection拥有对象,DbConnectionOptions userOptions,DbConnection内部oldConnection )在System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(的DbConnection owningObject,DbConnectionOptions USEROPTIONS,DbConnectionInternal oldConnection)在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(的DbConnection owningObject,UInt32的waitForMultipleObjectsTimeout,布尔allowCreate,布尔onlyOneCheckConnection,DbConnectionOptions USEROPTIONS,DbConnectionInternal&连接)在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection拥有对象,TaskCompletionSource'1重试,DbConnectionOptions userOptions,DbConnectionInternal&连接)在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource'1 retry,DbConnectionOptions userOptions,DbConnectionInternal oldConnection,DbConnectionInternal&connection)at System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource'1 retry,DbConnectionOptions在System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource'1重试)在System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource'1重试)System.Data.SqlClient.SqlConnection.Open()System.Data System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe()System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode()System.Data.Linq.SqlClient.SqlProvider上的.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser用户) .System.Data.Linq.Provider.IProvider.Execute(表达式查询)在System.Data.Linq.DataQuery'1.System.Linq.IQue 在System.Linq.Queryable.SingleOrDefault [TSource](IQueryable'1源代码)处的ProviderExclusionChecker.DataAccess.PCG_Proxy.CheckProviderExclusion(String programName,String providerID,String providerName,String providerSSN)中的ryProvider.Execute [S] : TFS PPL_Services ProviderExclusionChecker ProviderExclusionChecker PCG Proxy.cs:位于c: TFS PPL_Services ProviderExclusionChecker ProviderExclusionChecker中ProviderExclusionChecker.ServicesApplication.ProviderService.CheckProviderExclusion(String programName,String providerID,String providerName,String providerSSN)的第72行。 ServicesApplication ProviderService.svc.cs:System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance,Object [] inputs,Object []&outputs)上的SyncInvokeCheckProviderExclusion(Object,Object [],Object []) .ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc&rpc)at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(Messa (System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc&rpc)at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)System.Data.SqlClient.SqlException

我如何配置服务来验证我的sql服务器连接?


这里有几个层,每个层可以选择将它发送到下一层的认证。

您的WCF服务正在使用Windows凭据调用Web服务。 假设这有效:

  • 呼叫来到IIS,这取决于这些凭据使用或丢失的IIS设置。 例如,如果IIS是匿名的,它只会丢失。
  • 然后它到达应用程序池,web.config中的设置将确定是否使用凭据。
  • 然后它到达数据库,连接字符串决定使用哪些凭证。
  • 还有一个“双跳”问题,默认情况下服务无法传递在使用之前重新使用的凭证。 不知道这是否影响你。


    我可能会迟到,但我正在寻找同样的决议。 但是,我发现我自己。 您可以尝试:1.运行inetmgr。 2.转到应用程序池3.搜索您的应用程序指向的应用程序池。 4.检查标识列5.您可以通过右键单击属性来修改标识列值。 6.确保身份用户应该拥有Windows身份验证。

    链接地址: http://www.djcxy.com/p/56731.html

    上一篇: SQL Security with a WCF Service

    下一篇: System.ComponentModel.Win32Exception: The network path was not found Error