Pido disculpas si esta pregunta repite otra ya formulada. He buscado durante horas y no he encontrado uno que se ajuste a mi situación.
Resultado deseado
Un usuario que usa la autenticación SQL tiene permisos de ejecución para la Base de datos1 en el Servidor1 (instancia predeterminada) y eso es todo. El usuario ejecuta un procedimiento almacenado que, como parte de su proceso, accede a la Base de datos 2 en el Servidor1 \ Instancia2. Me gustaría que fuera seguro y simple (ambos son importantes).
Más información
Mis credenciales de Windows tienen acceso a ambas instancias (que están en el mismo servidor). Por lo tanto, puedo ejecutar el procedimiento almacenado en mi inicio de sesión sin dificultad. Sin embargo, no quiero darle al usuario mi nivel de acceso. También necesito usar un inicio de sesión SQL ya que el usuario no estará en el dominio.
Lo que me gustaría sería darle al procedimiento almacenado mi nivel de acceso solo para ese procedimiento. Como soy un administrador de sistemas, eso le daría al usuario todo lo que necesita para ese procedimiento. Si eso funcionara, probablemente crearía una cuenta solo para ese propósito en lugar de usar la mía, pero de cualquier manera sería seguro ya que controlo lo que hace el proceso almacenado.
Intenté poner la declaración "WITH EXECUTE AS" en mi proceso almacenado, pero no pude conseguir que tomara mi información de inicio de sesión de Windows. Cuando lo coloco, obtengo el siguiente error al compilar el proceso almacenado:
No se puede ejecutar como el usuario 'dominio \ jdoe', porque no existe o no tiene permiso.
El usuario es administrador del sistema en ambos servidores, como dije, así que no estoy seguro de qué más necesita.
He investigado lo siguiente:
- CONFÍA - Prefiero no exponer mi base de datos y esto da miedo
- Servidor vinculado: no quiero otorgar permisos adicionales. No confío en que la otra base de datos tenga acceso a mi base de datos y no confío en que mi base de datos tenga acceso a todas las demás bases de datos.
- Certificados: esto parece complicado y difícil. A menos que pueda encontrar una manera muy simple de hacer esto y mantenerlo, no estoy seguro de que valga la pena.
- Encadenamiento de propiedad - De nuevo, da miedo. Parece que esto causa más problemas de seguridad cuando mi objetivo es evitar problemas de seguridad.
- Usuario reflejado: incluso he creado el mismo usuario (obviamente, SID diferente) en la otra instancia del servidor y le di la misma contraseña. No vayas.
Siento que me falta algo obvio, pero no estoy seguro de qué es. Dado que me he estado golpeando la cabeza contra la pared todo el día con esto, probablemente estoy demasiado cerca para verlo. Le agradecería mucho que alguien aquí pudiera echarme una mano o señalarme en la dirección correcta. Diré que he leído muchos de los artículos de MSDN (vaya que los odio, nunca parecen decirme lo que quiero saber). Lo que realmente me gustaría es un tutorial simple y fácil de seguir que me guíe a través de cómo hacer esto. Aparte de eso, incluso una indicación general de la dirección que debo seguir sería útil.