2010-05-08 14 views
5

Ho un dominio Windows in cui una macchina esegue SQL Server 2005 e che è configurata per supportare solo l'autenticazione di Windows. Vorrei eseguire un'applicazione client C# su una macchina sulla stessa rete, ma che NON è nel dominio e accedere a un database nell'istanza di SQL Server 2005.Accesso a SQL Server 2005 da un computer non di dominio mediante l'autenticazione di Windows

ho pensato che sarebbe una semplice questione di fare qualcosa di simile:

string connectionString = "Data Source=server;Initial Catalog=database;User Id=domain\user;Password=password"; 
SqlConnection connection = new SqlConnection(connectionString); 
connection.Open(); 

Tuttavia, questo non funziona: l'errore sul lato client è:

System.Data.SqlClient. SqlException: Accesso non riuscito per l'utente 'dominio \ utente' e l'errore sul lato server è: errore 18456, gravità 14, stato 5

ho provato v tutte cose che includono l'impostazione della sicurezza integrata su true e false, e \ invece di \ nell'ID utente, ma senza successo.

In generale, so che è possibile connettersi all'istanza di SQL Server 2005 da un computer non di dominio (ad esempio, sto lavorando con un'applicazione basata su Linux che lo fa felicemente), ma non lo faccio sembra essere in grado di capire come farlo da una macchina Windows.

+0

Che tipo di app stai tentando di connettere con il server SQL? App Web? –

+0

È solo un'applicazione C# che eseguo tramite Visual Studio o sulla riga di comando. – user304582

risposta

0

Hai provato a connetterti con machineName \ UserName? Immagino anche che un tale utente debba essere creato correttamente nel database SQL?

+0

Ciao - idea interessante, ma non l'ho fatto - non c'è nessun utente MachineName \ UserName nell'istanza di SQL Server. – user304582

5

Con Management Studio durante la connessione a un server su un altro dominio tramite l'autenticazione di Windows è necessario utilizzare la funzione "runas" all'avvio dell'applicazione.

Forse potresti provare una cosa analoga all'avvio dell'applicazione?

+0

Ciao - interessante, ma io runas non è una possibilità qui. – user304582

+0

Questo è fantastico, funziona come un incantesimo per me! Grazie!! – wsanville

1

È possibile creare un utente locale su ogni macchina con lo stesso nome utente e password Una volta che questi utenti sono stati creati, dare all'utente l'accesso al server SQL sul server SQL, sull'altro computer l'applicazione deve essere in esecuzione come utente appena creato, se un'app Web modifica semplicemente le impostazioni del pool di applicazioni.

+0

Ciao - purtroppo, non ho la capacità di creare utenti locali sul client o sul computer SQL Server. – user304582

3

(Per la risposta di Martin Smith) Uso RUNAS/NETONLY tutto il tempo per eseguire SSMS e Studio BI Dev e IDE di Visual Studio e altre applicazioni di terze parti contro un server su un dominio su cui non ci autenticiamo. Non sono sicuro del motivo per cui non puoi farlo: devi in ​​qualche modo avere un account su quel dominio che funziona con SQL Server se stai usando la sicurezza integrata.

Inoltre, ho modificato uno dei miei programmi C# principali per utilizzare CreateProcessWithLogonW con LOGON_NETCREDENTIALS_ONLY (How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?) in modo che richieda nome utente e password e quindi si riavvii da solo.

Utilizzando la stessa API, ho anche creato una versione di RUNAS/NETONLY che accetterà una password sulla riga di comando, poiché RUNAS NON consentirà una password sulla riga di comando. Ovviamente, questo è un rischio intrinseco alla sicurezza, e io non lo uso spesso.

Per motivi di completezza, c'è anche questa grande estensione di shell: http://technet.microsoft.com/en-us/sysinternals/cc300361.aspx - l'estensione Run As Shell regolare non ha la capacità di fare l'equivalente di/NETONLY.

Problemi correlati