none
Permisos para un Linked Server. RRS feed

  • Pregunta

  • Hola grupo:

    En un servidor SqlServer Express 14.0, tengo un LINKED Server conectado a una base de datos .MDB de una carpeta del propio servidor.

    Desde SSMS, conectado como <dominio>\Usuario, accedo al Linked Server sin problemas. He creado una base de datos BD y una STORED que accede a los datos del Linked Server, todo funciona perfectamente, pero...

    Pero tengo una aplicación .NET Winforms que accede a este servidor SqlServer mediante un login-sql  (no es sa, obviamente), que tiene permisos para la base de datos BD de lectura/escritura/ejecución.

    Leo datos, escribo datos, ejecuto storeds, etc... excepto la stored que accede al Linked Server. Cuando la ejecuto me da el siguiente error:

    "No se puede inicializar el objeto de origen de datos del proveedor OLE DB 'Microsoft.ACE.OLEDB.12.0' para el servidor vinculado 'milinkedserver'.

    Entiendo que es 'algo de permisos' del usuario login-sql, pero no consigo que funcione. El 'login-sql' tiene permisos en las base de datos, en el Linked Server he probado añadir logins en 'security', pero ninguna consigue hacer funcionar el LinkedServer con un login-sql.

    ¿Alguna idea?

    Si desde SSMS me conecto con el login-sql y ejecuto, el error completo es:

    El proveedor OLE DB 'Microsoft.ACE.OLEDB.12.0' del servidor vinculado 'xxx' devolvió el mensaje 'Not a valid account name or password.'.
    Msg 7399, Level 16, State 1, Line 3
    El proveedor OLE DB 'Microsoft.ACE.OLEDB.12.0' del servidor vinculado 'xxx' informó de un error. Error de autenticación.
    Msg 7303, Level 16, State 1, Line 3
    No se puede inicializar el objeto de origen de datos del proveedor OLE DB 'Microsoft.ACE.OLEDB.12.0' para el servidor vinculado 'xxx'.

    Un saludo


    • Editado LG DES miércoles, 13 de noviembre de 2019 16:50 Amplio información
    miércoles, 13 de noviembre de 2019 16:28

Todas las respuestas

  • En esta pagina, se le explica todo lo relacionado a SEGURIDAD en LINKED SERVER

    https://docs.microsoft.com/es-es/sql/relational-databases/linked-servers/create-linked-servers-sql-server-database-engine?f1url=https%3A%2F%2Fmsdn.microsoft.com%2Fquery%2Fdev15.query%3FappId%3DDev15IDEF1%26l%3DEN-US%26k%3Dk(sql13.swb.linkedserver.properties.security.f1)%26rd%3Dtrue&view=sql-server-ver15

    Vea esta seccion

    En la página Seguridad , especifique el contexto de seguridad que se usará cuando la versión original de SQL Server se conecte con el servidor vinculado. En un entorno de dominio donde los usuarios se conectan mediante sus inicios de sesión, la selección de Se establecerán usando el contexto de seguridad actual del inicio de sesión suele ser la mejor opción. Cuando los usuarios se conecten a la versión original de SQL Server usando un inicio de sesión de SQL Server , la mejor opción suele ser seleccionar Se establecerán usando este contexto de seguridady, a continuación, proporcionar las credenciales necesarias para la autenticación en el servidor vinculado.


    IIslas Master Consultant SQL Server

    • Propuesto como respuesta Pablo RubioModerator miércoles, 13 de noviembre de 2019 18:21
    • Votado como útil LG DES viernes, 15 de noviembre de 2019 8:23
    • Propuesto como respuesta Pablo RubioModerator viernes, 15 de noviembre de 2019 23:48
    • Votado como útil LG DES lunes, 18 de noviembre de 2019 9:18
    • Propuesto como respuesta Pablo RubioModerator martes, 19 de noviembre de 2019 19:42
    • Votado como útil LG DES miércoles, 20 de noviembre de 2019 8:03
    miércoles, 13 de noviembre de 2019 17:05
  • ¿Puede publicar en esta conversación el comando de creación del linked server? Enmascarar la contraseña, si la hay.


    José Diz     Belo Horizonte, MG - Brasil     [query performance tuning: Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    • Propuesto como respuesta Pablo RubioModerator jueves, 14 de noviembre de 2019 16:57
    • Editado José Diz jueves, 14 de noviembre de 2019 17:42
    • Votado como útil LG DES viernes, 15 de noviembre de 2019 8:23
    • Propuesto como respuesta Pablo RubioModerator viernes, 15 de noviembre de 2019 23:48
    • Votado como útil LG DES lunes, 18 de noviembre de 2019 9:18
    • Propuesto como respuesta Pablo RubioModerator martes, 19 de noviembre de 2019 19:42
    • Votado como útil LG DES miércoles, 20 de noviembre de 2019 8:03
    jueves, 14 de noviembre de 2019 0:12
  • Hola:

    Te adjunto el script de creación, con comentarios dentro:

    /* 
    	LINKED SERVER apuntando a un fichero .MDB en una carpeta LOCAL del propio SQLSERVER 
    */
    EXEC master.dbo.sp_addlinkedserver @server = N'LNKSERVER', @srvproduct=N'MS Access', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'C:\Sql\DT.MDB'
    
    /* 
    	PARA CUANDO EL USUARIO ES WINDOWS (DOMINIO\USUARIO), todo FUNCIONA OK.
    		Probado con diferentes usuarios del dominio.
     */
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LNKSERVER',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
    /* 
    	PERO CUANDO EL USUARIO ES DE SQLServer, no hay manera. 
    */
    EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LNKSERVER',@useself=N'False',@locallogin=N'sqllogin',@rmtuser=N'DOMINIO\usuario',@rmtpassword='########'
    /* 
    	He probado diferentes combinaciones, pero no hay manera. 
    */
    --EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LNKSERVER',@useself=N'False',@locallogin=N'sqllogin',@rmtuser=N'usuario@dominio.es',@rmtpassword='########'
    --EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'LNKSERVER',@useself=N'False',@locallogin=N'sqllogin',@rmtuser=N'usuario@dominio.local',@rmtpassword='########'
    
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'collation compatible', @optvalue=N'false'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'data access', @optvalue=N'true'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'dist', @optvalue=N'false'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'pub', @optvalue=N'false'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'rpc', @optvalue=N'false'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'rpc out', @optvalue=N'false'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'sub', @optvalue=N'false'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'connect timeout', @optvalue=N'0'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'collation name', @optvalue=null
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'lazy schema validation', @optvalue=N'false'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'query timeout', @optvalue=N'0'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'use remote collation', @optvalue=N'true'
    EXEC master.dbo.sp_serveroption @server=N'LNKSERVER', @optname=N'remote proc transaction promotion', @optvalue=N'true'


    Gracias

    Un saludo

    jueves, 14 de noviembre de 2019 11:00
  • Hola:

    Gracias por responder, pero siguiendo esas instrucciones sigo sin conseguir que funcione. He respondido más abajo ampliando la pregunta y las pruebas que he hecho.

    Un saludo

    jueves, 14 de noviembre de 2019 11:04