Integrated Security=SSPI 是不是需要管理员组中的 Windows 用户?

Posted

技术标签:

【中文标题】Integrated Security=SSPI 是不是需要管理员组中的 Windows 用户?【英文标题】:Does Integrated Security=SSPI require a Windows user in the Administrators group?Integrated Security=SSPI 是否需要管理员组中的 Windows 用户? 【发布时间】:2013-03-03 14:24:02 【问题描述】:

我在使用普通用户和 sql express 数据库测试我的 c# WinForms 应用程序时遇到问题。我认为连接字符串中的 SSPI 是问题所在。

编辑:问题是连接不会打开。这是我以普通用户身份登录时遇到的异常(我没有以管理员身份正确打开它)。

用户“AsusWin7-64\SomeUser”登录失败。 在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException 异常,布尔 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(布尔 enlistOK) 在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo,字符串 newPassword,布尔型 ignoreSniOpenTimeout,TimeoutTimer 超时,SqlConnection owningObject) 在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo,字符串 newPassword,布尔重定向用户实例,SqlConnection owningObject,SqlConnectionString connectionOptions,TimeoutTimer 超时) 在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject,TimeoutTimer 超时,SqlConnectionString connectionOptions,字符串 newPassword,布尔重定向用户实例) 在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity 标识,SqlConnectionString 连接选项,对象 providerInfo,字符串 newPassword,SqlConnection owningObject,布尔重定向用户实例) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection,DbConnectionPool 池,DbConnectionOptions 选项) 在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory) 在 System.Data.SqlClient.SqlConnection.Open()

【问题讨论】:

您的问题的答案是“否”。但是,不可能就问题可能是什么提供任何建议,因为您没有告诉我们问题是什么——“我正在测试问题”而不告诉我们问题是什么是没有意义的。请edit您的问题提供更多信息。就目前而言,这不是一个真正的问题。 @Ken -- 添加了其他信息。 【参考方案1】:

标题中提出的问题的答案是否定的,SSPI 不需要管理员组中的 Windows 用户。您遇到的故障/错误的确切性质是什么?

*编辑:* 您需要确保您的 SQL Express 数据库配置为接受 Windows 集成身份验证,然后将该本地计算机用户定义到具有相应数据库权限的数据库中(s)、表和程序。

【讨论】:

+1。它只需要在 SQL 中配置用户才能访问,管理员可以访问,因为通常添加本地管理员组以对给定服务器上的每个 SQL 数据库具有完全访问权限。 我的应用是针对非技术用户的收缩包装,我永远不会提前知道任何普通用户,也永远不会有 DBA 来设置权限。我的安装将无法设置用户。对普通用户的任何建议表示赞赏。有没有办法为任何用户设置 sql express 安全性? 呃,不幸的是,如果您没有管理或配置工具,则没有太多选择。您可能希望(必须)考虑创建单个 SQL Server 用户并将该身份用于应用程序的数据访问,然后可以将其编码到应用程序中。无论如何都不理想,但考虑到您的限制,它可能是您唯一的选择。 几个小时后想通了。我采用了将“BUILTIN/Users”登录添加到我的数据库的方法,具有读/写权限。现在 Integrated Security=SSPI 对普通用户有效。

以上是关于Integrated Security=SSPI 是不是需要管理员组中的 Windows 用户?的主要内容,如果未能解决你的问题,请参考以下文章

Integrated Security=SSPI 是不是需要管理员组中的 Windows 用户?

关于SQL连接语句中的Integrated Security=SSPI/ture/false

System.Security.Authentication.AuthenticationException:对 SSPI 的调用失败,请参阅内部异常

Trusted_Connection 与 Integrated Security 影响连接池

Java JDBC 连接 Integrated Security 只能在我的 Eclipse 中工作

调用 SSPI 失败,请参见内部异常。接收到的消息异常,或格式不正确。