2011-10-04 17 views
10

Estoy tratando de usar Rails 3.1. con activerecord-sqlserver-adapter (3.1.1) y tiny_tds (0.4.5) en una máquina con Windows. Al leer sobre TinyTDS y su uso de FreeTDS, parece que puedo usar Integrated Security (también conocido como seguridad integrada de Windows/NTLM) al poner un nombre calificado de dominio como el nombre de usuario (por ejemplo, DOMAIN \ userbob). Pero los documentos aún quieren que escriba la contraseña de mi dominio en el archivo database.yml. Esa es una mala práctica porque es insegura y no aprovecha el inicio de sesión único, que es parte del punto para la Seguridad Integrada.Cómo usar activerecord-sqlserver-adapter con TinyTDS * y * una conexión de seguridad integrada en Windows * sin * guardar una contraseña en texto sin formato

¿Puedo conectarme sin guardar una contraseña en texto sin formato en un archivo? p.ej.

developement: 
    adapter: sqlserver 
    mode: dblib 
    dataserver: localhost 
    database: dev_db 
    username: DOMAIN\userbob 
# password: no_no_please_dont_make_me_type_it_here 

Pero, incluso si pongo una contraseña me sale el siguiente error:

TinyTds::Error: Unable to connect: Adaptive Server is unavailable or does not exist 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/tiny_tds-0.4.5-x86-mingw32/lib/tiny_tds/client.rb:60:in `connect' 
    from C:/Ruby192/lib/ruby/gems/1.9.1/gems/tiny_tds-0.4.5-x86-mingw32/lib/tiny_tds/client.rb:60:in `initialize' 

Sé que mi servidor está funcionando y el contexto del usuario actual se puede conectar porque esto funciona:

sqlcmd -S localhost -d dev_db -E 

¿Alguna idea? ¿Es posible? Si no, es debe ser.

+0

También estoy buscando una solución para el problema SSO: ¿resolvió su problema mientras tanto? Aparece el error 'TinyTds :: Error: Falló el inicio de sesión para el usuario 'xxx'.El usuario no está asociado con una conexión confiable de SQL Server. Si agrego la contraseña, obtengo una conexión. – knut

+1

Con el trabajo, he logrado obtener un nuevo mensaje de error, 'Error de inicio de sesión. El inicio de sesión proviene de un dominio que no es de confianza y no se puede usar con la autenticación de Windows. Sin embargo, esto es confuso porque la cuenta de usuario y el sistema están en el mismo dominio. –

Respuesta

1

Creo que el código que hace la conexión trata de hacer que el proceso se haga pasar por el contexto de seguridad proporcionado por las credenciales en lugar de pasar las credenciales predeterminadas a través del servidor SQL.

Esto le permitiría especificar diferentes credenciales para el contexto de seguridad actual. He usado este truco para conectarme a un servidor que requiere SSIS de un dominio que no es de confianza.

No sé TinyTDS/FreeTDS, tal vez las credenciales nulas o vacías harían que utilizara el contexto de seguridad predeterminado. Proveedores:

developement: 
    adapter: sqlserver 
    mode: dblib 
    dataserver: localhost 
    database: dev_db 

o

developement: 
    adapter: sqlserver 
    mode: dblib 
    dataserver: localhost 
    database: dev_db 
    username: 
    password: 
+0

Gracias por la sugerencia. Según la experiencia, las credenciales vacías intentarán usar la cuenta 'sa', que no es lo que quiero (_not single-sign-on_). Pero parece que usar un nombre de usuario con una barra invertida (es decir, una cuenta de dominio) intenta usar la autenticación de Windows sin una contraseña. Lástima que no funciona en mi dominio. Gracias por la ayuda, sin embargo. –

2

habilitar TCP/IP en "Configuración de red de SQL Server" en la utilidad Administrador de configuración de SQL Server. A continuación, reinicie el servicio SQL Server.

En cuanto a la seguridad, deberá proporcionar sus propias credenciales, de lo contrario, utilizará una cuenta sa.

+1

Esto no resuelve el problema, sólo me pone más allá de la 'Adaptive Server es el error unavailable' a favor de la' El inicio de sesión es de una domain' no es de confianza. Ver comentario arriba. Gracias por ayudar, sin embargo. –

2

Aparentemente, SQL Server 2008 está configurado de forma predeterminada para permitir SÓLO la autenticación de Windows. Para cambiar eso, tiene que abrir Management Studio, haga clic con el botón derecho en su servidor y seleccione Propiedades. Seleccione Seguridad y haga clic en "SQL Server and Windows Authentication mode" en Autenticación del servidor. Esto al menos le permitirá conectarse directamente al servidor hasta que TinyTDS realice los cambios necesarios para permitir la Autenticación de Windows.

0

intenta utilizar

developement: 
    adapter: sqlserver 
    mode: dblib 
    dataserver: localhost\SQLEXPRESS 
    database: dev_db 
    username: DOMAIN\userbob 

o qué otra cosa se establece variante 2 autentificación en su servidor de SQL? luego intente conectarse con un usuario de sa ...

Cuestiones relacionadas