locked
Error con Linked Server remoto RRS feed

  • Pregunta

  • Hola...

    Miren, tengo el siguiente problema...

    EN un servidor de desarrollo tengo SQL Server. A este servidor puedo entrar con Escritorio Remoto y utilizar el SQL Server Management Studio para realizar algunas pruebas. También puedo hacerlo desde mi equipo local, conectarme al servidor de SQL Server con una cuenta de SQL con el rol sysadmin.

    El tema es que en el servidor creo un Linked Server hacia un archivo Excel ubicado en un equipo de la red.

    Si entro desde el escritorio remoto al SQL Server y ejecuto la siguiente consulta usando el linked server el resultado es el esperado:

    select * from [xls]...[reporte$]

    Sin embargo, si hago la misma consulta desde el equipo local conectado al SQL Server obtengo el siguiente error:

    Msg 7399, Level 16, State 1, Line 1
    The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "xls" reported an error. The provider did not give any information about the error.
    Msg 7303, Level 16, State 1, Line 1
    Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "xls".

    Esta misma operacion me funcionaba sin problemas hasta la semana pasada, pero hoy empiezo a obtener este error.

    Alguien sabe cual seria el problema??

    PD: Si hago un Linked Server hacia un archivo de texto o un Access funciona sin problema, pero a cualquier otro Excel tengo el problema.
    lunes, 24 de agosto de 2009 14:33

Respuestas

  • Msg 7399, Level 16, State 1, Line 1
    The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "xls" reported an error. The provider did not give any information about the error.
    Msg 7303, Level 16, State 1, Line 1
    Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "xls".

    Haga lo siguiente en el equipo local:

    1. Localice la carpeta de uso temporario. Para eso ejecute en su línea de comandos:

    C:\> set t
    
    
    TEMP=C:\DOCUME~1\Admin\LOCALS~1\Temp
    TMP=C:\DOCUME~1\Admin\LOCALS~1\Temp
    



    2. Verifique que el usuario Windows que usted está usando tiene permisos de escritura en dichas carpetas. Para eso, use el Explorer, vaya a la carpeta temporal, clic-derecho, propiedades, seguridad.

    3. Logoff de Windows y vuelva a logearse con el usuario.

    4. Reiniciar el servicio SQL.


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    lunes, 24 de agosto de 2009 14:58
    Moderador

Todas las respuestas

  • Msg 7399, Level 16, State 1, Line 1
    The OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "xls" reported an error. The provider did not give any information about the error.
    Msg 7303, Level 16, State 1, Line 1
    Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "xls".

    Haga lo siguiente en el equipo local:

    1. Localice la carpeta de uso temporario. Para eso ejecute en su línea de comandos:

    C:\> set t
    
    
    TEMP=C:\DOCUME~1\Admin\LOCALS~1\Temp
    TMP=C:\DOCUME~1\Admin\LOCALS~1\Temp
    



    2. Verifique que el usuario Windows que usted está usando tiene permisos de escritura en dichas carpetas. Para eso, use el Explorer, vaya a la carpeta temporal, clic-derecho, propiedades, seguridad.

    3. Logoff de Windows y vuelva a logearse con el usuario.

    4. Reiniciar el servicio SQL.


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    lunes, 24 de agosto de 2009 14:58
    Moderador
  • Todo esta correcto. Lo mas raro que hasta la otra semana funcionaba sin problema, y ahora no....

    Incluso, si estoy conectado en el equipo remoto y me contecto al SQL Server Management Studio con la autentificacion SQL obtengo el mismo error...

    -- edit

    Acabo de reinicar el servicio del SQL Server y ahora funciona...

    Sin embargo aun me gustaria saber porque ocurre esto ?
    lunes, 24 de agosto de 2009 15:12
  • Es posible que alguien haya cambiado permisos, passwords o políticas de grupo?

    Lo pregunto porque ese mensaje es síntoma de permisos insuficientes (el proveedor OLEDB, que ejecuta bajo la cuenta del usuario conectado, no puede escribir en las carpetas temporales).

    Verifique en el equipo remoto (imagino que es el servidor SQL) la cuenta bajo la cual ejecuta el servicio SQL y también la cuenta de su usuario Windows (el que usó para conectarse al escritorio remoto) tienen permisos para escribir en las carpetas temporarias.


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    lunes, 24 de agosto de 2009 15:21
    Moderador
  • Acabo de reinicar el servicio del SQL Server y ahora funciona...

    Mis disculpas que no mencioné que era necesario reiniciar el servicio SQL para que los cambios tomaran efecto.

    La explicación es la siguiente:

    Cuando se usan linked servers tenemos dos cuentas involucradas: Por un lado la cuenta bajo la cual corre el servicio SQL y por otro lado la cuenta Windows del usuario/aplicación usada. Cuando usted ejecuta un SELECT a una tabla Excel via linked server, el proveedor OLEDB es invocado por la cuenta Windows del usuario (no la cuenta de inicio del servicio SQL). El proveedor OLEDB intenta crear un DSN temporario en la carpeta temporaria de la cuenta del servicio SQL. Pero el usuario no tiene permisos en dicha carpeta y se produce el error.

     


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    lunes, 24 de agosto de 2009 15:29
    Moderador
  • La cuenta de servicio utilizada en SQL Server es la de administrador.

    Pero cual es la cuenta de usuario de Windows que se ejecuta al conectarse con un usuario SQL?
    lunes, 24 de agosto de 2009 16:26
  • Pero si por ejemplo, desde el equipo local me conecto al servidor de SQL remoto con un usuario de SQL... esta accion se ejecuta bajo una cuenta de Windows, la cual debe tener los permisos sobre el directorio temporal... pero cual usuario seria este?
    lunes, 24 de agosto de 2009 19:22
  • Pero si por ejemplo, desde el equipo local me conecto al servidor de SQL remoto con un usuario de SQL... esta accion se ejecuta bajo una cuenta de Windows, la cual debe tener los permisos sobre el directorio temporal... pero cual usuario seria este?


    Si un usuario utiliza un inicio de sesión de SQL Server (autenticación SQL mixta), se utilizará el perfil de seguridad de la cuenta de proceso de SQL Server (en otro mensaje usted menciona que la cuenta usada por el servicio SQL es Administrator). 

    Para confirmar cuál es la cuenta de proceso de SQL Server:

    1. Ejecute en su línea de comandos: services.msc

    2. En la lista de servicios, busque el servicio SQL de la instancia correcta y vea en sus propiedades la cuenta asociada al servicio SQL. Dicha cuenta tiene que tener permisos de lectura en la carpeta donde reside la planilla Excel y permisos de lectoescritura en la carpeta temporaria. En su caso, esa cuenta es Administrator, según ha mencionado así que los permisos aplican sobre las carpetas temporarias del usuario Administrator:

    C:\DOCUME~1\Administrator\LOCALS~1\Temp (o similar)


    Por el contrario, si un usuario de SQL Server ha iniciado sesión mediante autenticación de Windows, el usuario sólo puede leer los archivos a los que la cuenta de usuario tiene acceso, independientemente del perfil de seguridad del proceso de SQL Server.


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    lunes, 24 de agosto de 2009 19:39
    Moderador
  • OK, muy clara la información... gracias.
    lunes, 24 de agosto de 2009 20:27