2010-05-08 16 views
5

que tiene un dominio de Windows en el que una máquina se está ejecutando SQL Server 2005 y el cual está configurado para admitir sólo la autenticación de Windows. Me gustaría correr una aplicación cliente de C# en una máquina en la misma red, pero que no está en el dominio y el acceso una base de datos en la instancia de SQL Server 2005.acceso a SQL Server 2005 desde una máquina no es de dominio mediante la autenticación de Windows

pensé que sería una simple cuestión de hacer algo como esto:

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

Sin embargo, esto no funciona: el error del lado del cliente es:

System.Data.SqlClient. SqlException: error de usuario 'dominio \ usuario' y el error del lado del servidor es: error 18456, gravedad 14, estado 5

he tratado v cosas arduas, incluida la configuración de seguridad integrada en verdadero y falso, y \ en lugar de \ en el Id. de usuario, pero sin éxito.

En general, sé que es posible conectarme a la instancia de SQL Server 2005 desde una máquina que no sea de dominio (por ejemplo, estoy trabajando con una aplicación basada en Linux que felizmente hace esto), pero no parece ser capaz de resolver cómo hacerlo desde una máquina con Windows.

+0

¿Qué tipo de aplicación que están intentando conectar con el servidor SQL? ¿Aplicación Web? –

+0

Es solo una aplicación C# que ejecuto a través de Visual Studio o en la línea de comandos. – user304582

Respuesta

0

¿Usted intentó conectarse con machineName \ nombre de usuario? También me imagino que ese usuario debería crearse en la base de datos SQL, ¿correcto?

+0

Hola, una idea interesante, pero no, no. No hay ningún usuario de MachineName \ UserName en la instancia de SQL Server. – user304582

5

Con Management Studio cuando se conecta a un servidor en otro dominio a través de la autenticación de Windows es necesario utilizar el Fondo "runas" al iniciar la aplicación.

runas /user:OTHERDOMAIN\OTHERUSERNAME /netonly 
"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe" 

¿Quizás podría probar algo similar al iniciar su aplicación?

+0

Hola - interesante, pero no es una posibilidad aquí. – user304582

+0

¡Esto es increíble, funciona como un encanto para mí! ¡¡Gracias!! – wsanville

1

Es posible crear un usuario local en cada máquina con el mismo nombre de usuario y contraseña. Una vez que estos usuarios han sido creados, otorgue al usuario acceso al servidor SQL en el servidor SQL; en su otra máquina, su aplicación debe estar ejecutándose como usuario recién creado, si es una aplicación web, simplemente cambie la configuración del grupo de aplicaciones.

+0

Hola, lamentablemente, no tengo la capacidad de crear usuarios locales ni en el cliente ni en el equipo de SQL Server. – user304582

3

(Según la respuesta de Martin Smith) Uso RUNAS/NETONLY todo el tiempo para ejecutar SSMS y el estudio de desarrollo de BI y Visual Studio IDE y otras aplicaciones de terceros contra un servidor en un dominio que no autenticamos. No estoy seguro de por qué no puede hacer esto: de alguna manera debe tener una cuenta en ese dominio que funcione con SQL Server si está utilizando seguridad integrada.

Además, modifiqué uno de mis programas principales de C# para usar CreateProcessWithLogonW con LOGON_NETCREDENTIALS_ONLY (How to build RUNAS /NETONLY functionality into a (C#/.NET/WinForms) program?) para que solicite el nombre de usuario y la contraseña, y luego vuelva a iniciarse.

Usando la misma API, también hice una versión de RUNAS/NETONLY que aceptará una contraseña en la línea de comandos, ya que RUNAS NO permitirá una contraseña en la línea de comandos. Obviamente, este es un riesgo de seguridad inherente, y no lo uso con frecuencia.

Como una cuestión de compleción, también existe esta gran extensión de shell: http://technet.microsoft.com/en-us/sysinternals/cc300361.aspx - la extensión Run As Shell normal no tiene la capacidad de hacer el equivalente a/NETONLY.

Cuestiones relacionadas