2015-05-13 3 views
0

Я написал приложение C#, которое обращается к серверу ms sql. У меня не было проблем с разработкой приложения. Сейчас я на стадии развертывания, и возникла странная проблема. Приложение будет передано конечному пользователю через терминальные службы. По какой-то причине приложение не может получить доступ к базе данных, если оно выполняется стандартным пользователем, оно может получить к нему доступ, только если пользователь является членом группы безопасности домена. Я могу получить доступ к базе данных, если я сервер пользователя SQL Management Studio или если я подключаюсь к базе данных с помощью ODBC dsn. Это похоже на то, что связано с приложениями .net, в частности. Я обслуживаю приложения через citrix, но также имею среду 2x, и у меня такая же проблема в обоих. Это должно быть что-то с терминальными службами и .net.C# .net Приложение не может получить доступ к серверу sql в терминальных службах

Любые предложения или опыт людей с подобными проблемами будут приветствоваться.

Edit:

Вот исключение я получаю, когда пользователь не является членом группы администратора домена

System.Data.SqlClient.SqlException (0x80131904): сеть связанных или instance- возникла ошибка при установлении соединения с SQL Server. Сервер не найден или не был доступен. Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения. (Поставщик: SQL Network Interfaces, ошибка: 26 - Ошибка Расположение сервера/Instance Указано) в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключения, булева breakConnection, действия 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, 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 повторных попыток, DbConnectionOptions userOptions) на System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection (DbConnection outerConnection, DbConnectionFactory ConnectionFactory, TaskCompletionSource 1 retry, DbConnectionOptions userOptions) at System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource 1 повторных попыток) на System.Data. SqlClient.SqlConnection.TryOpen (TaskCompletionSource`1 retry) в System.Data.SqlClient.SqlConnection.Open() на CamLabs.UtilityClasses.DBConn.isConnected() ClientConnectionId: 00000000-0000-0000-0000-000000000000

Когда они являются членами группы он работает без ошибок.

+1

Я не могу понять, «я могу получить доступ к базе данных, если я сервер пользователя SQL Management Studio» - не могли бы вы попробовать перефразировать/переписать этот бит, пожалуйста? –

+0

@Damien_The_Unbeliever Я обновил исключение –

+0

Можете ли вы, пожалуйста, повторно посетить это предложение, которое я выделил? Кажется, что он содержит фрагменты из трех разных предложений, и мне недостаточно информации, чтобы распутать эти предложения (или если это предназначено для одного предложения, я не могу превратить его в предложение, которое я могу понять, просто изменив его или два слова) - я буквально понятия не имею, что вы пытаетесь передать нам. –

ответ

0

rНазад проблема в вашей строке подключения. Возможно, вы используете встроенную функцию безопасности в своей строке подключения. если да - измените строку подключения на ту, которая использует авторизацию SQL Server. Не забудьте добавить пользователя и пользователя в соответствующую базу данных. https://www.connectionstrings.com/

+0

Я использую авторизацию сервера sql, а строки подключения работают так же, как и с членами группы admins домена, а не члены получают исключение выше. –

+0

Из того, что вы говорите, я все еще сомневаюсь в строке подключения ... Возможно, что, действуя от имени администратора, вы можете вытащить правильную строку соединения (сформировать хранилище настроек), но, как обычный пользователь, вы используют неправильную строку соединения.Попробуйте отладить или зарегистрировать значение строки подключения из вашего объекта SqlConnection, когда вы действуете как обычный пользователь. Соответствует ли оно значению, которое вы видите под администратором? вы используете (локальный) или (.) при указании экземпляра в строке соединения? если да - замените его на имя компьютера. –

+0

также учитывают следующее: «Проверьте правильность имени экземпляра и настройте SQL Server для удаленного подключения». http://blogs.msdn.com/b/walzenbach/archive/2010/04/14/how-to-enable-remote-connections-in-sql-server-2008.aspx –