2010-10-28 29 views
5

Tengo dos bases de datos en el mismo SQL Server:cómo configurar un procedimiento almacenado para acceder a una tabla en otra base de datos

Base de Datos Un

  • tabla 1
  • tabla 2
  • sproc x

base de datos B

  • tabla 3
  • tabla 4
  • sproc y
  • sproc z

Quiero dar acceso usuario1 a la base de datos, pero sólo a través de los permisos de ejecución de los procedimientos almacenados.

  • sproc X hace una unión entre el cuadro 1 & 2, y usuario1 puede ejecutar.
  • sproc y hace una unión entre las tablas 3 & 4 y se puede ejecutar user1.
  • sproc z tiene una unión entre las tablas 1 & 4, y usuario1 es incapaz de ejecutar, a menos Doy permiso SELECT para tabla 1. ¿Por qué es esto?

no quiero conceder permiso de selección, ya que esto rompe el modelo de seguridad de "solamente acceder a la base de datos a través de procedimientos almacenados"

Respuesta

3

Es posible que tenga que habilitar cross database ownership chaining para ambas bases de datos.

Para ver si está habilitado:

select name, is_db_chaining_on 
    from sys.databases 

para activar la configuración:

EXEC sp_dboption 'DatabaseA', 'db_chaining', 'true'; 
GO 

EXEC sp_dboption 'DatabaseB', 'db_chaining', 'true'; 
GO 
+0

No estaba habilitado ... habilité las bases de datos a las que mis sprocs intentaban acceder y parece funcionar. ¡Gracias! –

+0

Desde que encontré esto con algunas bases de datos recientes, algunos elementos adicionales para verificar.1) Haga que el propietario de la base de datos sea el mismo para ambas bases de datos 2) Asegúrese de que exista el mismo usuario/grupo en ambas bases de datos –

1

que tenía exactamente este problema, pero en mi caso la solución fue actualizar las dos bases de datos para tener el mismo propietario.

Si las bases de datos son propiedad del mismo propietario, no es necesario activar explícitamente el encadenamiento de propiedad (ya que los propietarios son uno y el mismo).

Gran artículo sobre esto aquí: [http://www.sommarskog.se/grantperm.html][1]

puede actualizar la propiedad de una base de datos utilizando sp_changedbowner o el "ALTER autorización" para la declaración versión más reciente.

+0

Esto sucedió con algunas bases de datos recientes que creamos - olvidamos cambiar el propietario a SA y las opciones de db_chaining en otro ejemplo no funcionó. Tan pronto como cambiamos el propietario a SA funcionó. Tenga en cuenta que todavía necesitamos establecer db_chaining en true –

Cuestiones relacionadas