Estoy intentando escribir una función de clasificador para el gobernador de recursos de SQL 2008. Me gustaría usar una función de base de datos creada por el usuario para identificar si el usuario debe entrar en un grupo de carga de trabajo en particular. Los inicios de sesión en cuestión son inicios de sesión de SQL. No puedo usar IS_MEMBER(), porque IS_MEMBER se restringe al contexto actual de la base de datos (en este caso, maestro). No puedo usar [base de datos de usuario] .sys.database_principals porque la función del clasificador debe estar vinculada al esquema (restringiendo así las búsquedas al contexto actual de la base de datos). Además, las vistas a las que hace referencia la función también deben estar enlazadas al esquema, lo que significa que no puedo crear una vista en el maestro para hacer referencia a las vistas de seguridad de la base de datos del usuario.¿Cómo creo una función de clasificador de Governor de recursos basada en una función de base de datos?
El objetivo aquí es poder ejecutar básicamente IS_MEMBER() desde el maestro para verificar un rol en otra base de datos.
Ooo, me encanta esta solución. Para explicarlo con un poco más de detalle, Tom dice que mantendría una tabla de usuarios en master con su lista de bases de datos, roles y usuarios. Idealmente, SQL Server mantendría esta tabla para usted con desencadenadores DDL, pero no sé si puede configurar desencadenadores DDL en algunas de las tablas de sistema relacionadas que desee. Puede tener que actualizar la lista manualmente. Luego haga que su función de clasificador del gobernador de recursos consulte esa tabla para obtener el grupo de recursos correcto. Brillante. –
Esta podría ser la mejor solución, aunque termines duplicando información entre el maestro y el usuario db y suena como un dolor de cabeza administrativo. No estoy seguro de que me acerque a él creando triggers, ya que me preocuparía que cualquier desencadenante que puse en sprocs/tables del sistema pueda sobrescribirse fácilmente con un parche. Mi enfoque sería construir un procedimiento almacenado en el maestro para vivir con la tabla y analizar los sys.database_principals de las bases de datos de usuario y administrar la tabla de búsqueda. Incluso podría ser posible llamar a este sproc de sincronización desde la propia función del clasificador. –
Una función no puede tener ningún efecto en un objeto fuera de la función en sí, por lo que no sería posible completar una tabla permanente de esa manera. Creo que si tratara de llenar una tabla temporal dentro de la función, entonces tendría un problema con el hecho de que la función debe estar enlazada al esquema. Eso va a causar problemas al pasar por las bases de datos. –