Administración de ensamblados de modelos multidimensionales

Se aplica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Microsoft SQL Server SQL Server Analysis Services proporciona muchas funciones intrínsecas para su uso con los lenguajes de expresiones multidimensionales (MDX) y extensiones de minería de datos (DMX), diseñados para lograr todo, desde cálculos estadísticos estándar hasta el recorrido de miembros en una jerarquía. No obstante, al igual que con cualquier otro producto complejo, existe siempre la necesidad de ampliar la funcionalidad.

Por lo tanto, SQL Server Analysis Services permite agregar ensamblados a una instancia o base de datos de SQL Server Analysis Services. Los ensamblados permiten crear funciones externas definidas por el usuario mediante cualquier lenguaje CLR (Common Language Runtime), como por ejemplo Microsoft Visual Basic .NET o Microsoft Visual C#. También puede utilizar lenguajes de automatización COM (Modelo de objetos componentes), como Microsoft Visual Basic o Microsoft Visual C++.

Importante

Los ensamblados COM pueden suponer un riesgo para la seguridad. Debido a este riesgo y otras consideraciones, los ensamblados COM han quedado en desuso en SQL Server 2008 Analysis Services (SSAS). Es posible que este tipo de ensamblados no esté disponible en versiones futuras.

Los ensamblados le permiten ampliar la funcionalidad empresarial de MDX y DMX. Cree la funcionalidad que desee en una biblioteca, como una biblioteca de vínculos dinámicos (DLL) y agregue la biblioteca como un ensamblado a una instancia de SQL Server Analysis Services o a una base de datos de SQL Server Analysis Services. Los métodos públicos de la biblioteca se ofrecerán como funciones definidas por el usuario a procedimientos, cálculos, acciones, aplicaciones cliente y expresiones de MDX y DMX.

En el servidor se puede agregar un ensamblado con nuevos procedimientos y funciones. Puede usar los ensamblados para mejorar o agregar funcionalidad personalizada que no proporciona el servidor. Si usa ensamblados, puede agregar las nuevas funciones a las Expresiones multidimensionales (MDX), las Extensiones de minería de datos (DMX) o los procedimientos almacenados. Los ensamblados se cargan desde la ubicación donde se ejecuta la aplicación personalizada; en el servidor se guarda una copia del archivo binario del ensamblado junto con los datos de la base de datos. Cuando se quita un ensamblado, el ensamblado copiado también se quita del servidor.

Los ensamblados pueden ser de dos tipos diferentes: COM y CLR. Los ensamblados CLR son ensamblados desarrollados en los lenguajes de programación de .NET Framework como C#, Visual Basic .NET, C++ administrado. Los ensamblados COM son bibliotecas COM que se deben registrar en el servidor.

Los ensamblados se pueden agregar a los objetos Server o Database . Cualquier usuario conectado al servidor o a cualquier objeto del servidor puede llamar a los ensamblados de servidor. Solo los objetos o los usuarios conectados a la Database pueden llamar a los ensamblados de base de datos.

Un objeto de Assembly simple se compone de información básica (nombre e id.), una colección de archivos y especificaciones de seguridad.

La colección de archivos hace referencia a los archivos de ensamblado cargados y sus archivos de depuración (.pdb) correspondientes, si éstos se cargaron con los archivos de ensamblado. Los archivos de ensamblado se cargan desde la ubicación definida por la aplicación ; en el servidor se guarda una copia junto con los datos. La copia del archivo de ensamblado se usa para cargar el ensamblado cada vez que se inicia el servicio.

Las especificaciones de seguridad incluyen el conjunto de permisos y la suplantación que se usa para ejecutar el ensamblado.

Llamar a funciones definidas por el usuario

La llamada a una función definida por el usuario en un ensamblado se realiza de la misma forma que la llamada a una función intrínseca, salvo que se deba utilizar un nombre completo. Por ejemplo, una función definida por el usuario que devuelva un tipo esperado por MDX se incluye en una consulta MDX, como se muestra en el siguiente ejemplo:

Select MyAssembly.MyClass.MyStoredProcedure(a, b, c) on 0 from Sales  

También se puede llamar a las funciones definidas por el usuario mediante la palabra clave CALL. Debe utilizar la palabra clave CALL con funciones definidas por el usuario que devuelvan conjuntos de registros o valores nulos, y no podrá utilizarla si la función definida por el usuario depende de un objeto del contexto del script o instrucción MDX o DMX, como el modelo de minería de datos o el cubo actual. Un uso común de una función llamada fuera de una consulta MDX o DMX es utilizar el modelo de objetos AMO para realizar funciones administrativas. Si, por ejemplo, desea utilizar la función MyVoidProcedure(a, b, c) en una instrucción MDX, se utilizaría la siguiente sintaxis:

Call MyAssembly.MyClass.MyVoidProcedure(a, b, c)  

Los ensamblados simplifican el desarrollo de la base de datos al permitir que se desarrolle una sola vez el código común y se almacene en una ubicación única. Los desarrolladores de software cliente pueden crear bibliotecas de funciones para SQL Server Analysis Services y distribuirlas con sus aplicaciones.

Los ensamblados y las funciones definidas por el usuario pueden duplicar los nombres de función de la biblioteca de funciones de SQL Server Analysis Services o de otros ensamblados. Siempre que llame a la función definida por el usuario mediante su nombre completo, SQL Server Analysis Services usará el procedimiento correcto. Para fines de seguridad, y para eliminar la posibilidad de llamar a un nombre duplicado en una biblioteca de clases diferente, SQL Server Analysis Services requiere que solo use nombres completos para los procedimientos almacenados.

Para llamar a una función definida por el usuario desde un ensamblado CLR, la función definida por el usuario estará precedida por el nombre del ensamblado, el nombre de clase completo y el nombre de procedimiento, como se muestra a continuación:

AssemblyName. FullClassName. ProcedureName(Argument1, Argument2, ...)

Para la compatibilidad con versiones anteriores de SQL Server Analysis Services, también se acepta la siguiente sintaxis:

nombreDeEnsamblado!nombreDeClaseCompleto!nombreDeProcedimiento(Argumento1, Argumento2…)

Si una biblioteca COM admite varias interfaces, también se puede utilizar el Id. de interfaz para resolver el nombre de procedimiento, como se muestra a continuación:

nombreDeEnsamblado!idDeInterfaz!nombreDeProcedimiento(Argumento1, Argumento2…)

Seguridad

La seguridad de los ensamblados depende del modelo de seguridad de .NET Framework, que es un modelo de seguridad de acceso del código. .NET Framework admite un mecanismo de seguridad de acceso del código que presupone que el tiempo de ejecución puede hospedar código de plena confianza y código parcialmente de confianza. Los recursos protegidos por la seguridad de acceso del código de .NET Framework se suelen empaquetar mediante código administrado que solicita el permiso correspondiente antes de permitir el acceso al recurso. La solicitud de permiso solo se satisface si todos los que llaman (en el nivel de ensamblado) de la pila de llamadas tienen el permiso correspondiente para el recurso.

En el caso de los ensamblados, el permiso de ejecución se pasa con la propiedad PermissionSet del objeto Assembly . Los permisos que recibe el código administrado vienen determinados por la directiva de seguridad activa. Ya hay tres niveles de directiva en vigor en un entorno hospedado no SQL Server Analysis Services: empresa, equipo y usuario. La lista real de permisos que el código recibe queda determinada por la intersección de los permisos obtenidos por estos tres niveles.

SQL Server Analysis Services proporciona un nivel de directiva de seguridad de nivel de host al CLR mientras lo hospeda; esta directiva es un nivel de directiva adicional por debajo de los tres niveles de directiva que siempre están en vigor. Esta directiva se establece para cada dominio de aplicación creado por SQL Server Analysis Services.

La directiva de nivel de host SQL Server Analysis Services es una combinación de SQL Server Analysis Services directiva fija para ensamblados del sistema y directiva especificada por el usuario para ensamblados de usuario. La parte especificada por el usuario de la directiva de host de SQL Server Analysis Services se basa en el propietario del ensamblado que especifica uno de los tres cubos de permisos para cada ensamblado:

Configuración de permisos Descripción
Caja fuerte Proporciona permiso de cálculo interno. Este depósito de permisos no asigna permisos para el acceso a los recursos protegidos en .NET Framework. Se trata del depósito de permisos predeterminado para un ensamblado si no se especifica ninguno con la propiedad PermissionSet .
ExternalAccess Proporciona el mismo acceso que la configuración Safe , con la posibilidad adicional de permitir el acceso a los recursos externos del sistema. Este depósito de permisos no ofrece garantías de seguridad (aunque se puede proteger este escenario), pero ofrece garantías de confiabilidad.
Inseguro Sin restricciones. No se pueden ofrecer garantías de seguridad ni confiabilidad al código administrado que se ejecute en este conjunto de permisos. Otorga cualquier permiso al código que se ejecute en este nivel de confianza, incluso un permiso personalizado incluido por el administrador.

Cuando CLR está hospedado por SQL Server Analysis Services, la comprobación de permisos basada en la pila se detiene en el límite con código de SQL Server Analysis Services nativo. Cualquier código administrado de SQL Server Analysis Services ensamblados siempre pertenece a una de las tres categorías de permisos enumeradas anteriormente.

Las rutinas de ensamblado COM (o no administradas) no admiten el modelo de seguridad de CLR.

Suplantación

Siempre que el código administrado accede a cualquier recurso fuera de SQL Server Analysis Services, SQL Server Analysis Services sigue las reglas asociadas al valor de la propiedad ImpersonationMode del ensamblado para asegurarse de que el acceso se produce en un contexto de seguridad de Windows adecuado. Dado que los ensamblados que usan la configuración de permisos Seguro no pueden acceder a recursos fuera de SQL Server Analysis Services, estas reglas solo se aplican a los ensamblados mediante la configuración de permisos ExternalAccess y Unsafe.

  • Si el contexto de ejecución actual corresponde al inicio de sesión autenticado de Windows y es el mismo que el contexto del autor de la llamada original (es decir, no hay EXECUTE AS en el medio), SQL Server Analysis Services suplantará el inicio de sesión autenticado de Windows antes de acceder al recurso.

  • Si hay un EXECUTE AS intermedio que ha cambiado el contexto del llamador original, se producirá un error al intentar obtener acceso al recurso externo.

La propiedad ImpersonationMode se puede establecer en ImpersonateCurrentUser o ImpersonateAnonymous. La configuración predeterminada, ImpersonateCurrentUser, ejecuta un ensamblado en la cuenta de inicio de sesión en red del usuario actual. Si se usa la configuración ImpersonateAnonymous , el contexto de ejecución se corresponderá con la cuenta de usuario de inicio de sesión de Windows IUSER_nombreDeServidor en el servidor. Se trata de la cuenta de invitado para Internet, que tiene privilegios limitados en el servidor. Un ensamblado que se ejecute en este contexto solamente podrá tener acceso a recursos limitados del servidor local.

Dominios de aplicación

SQL Server Analysis Services no expone directamente los dominios de aplicación. Como un conjunto de ensamblados se ejecuta en el mismo dominio de aplicación, los dominios de aplicación podrán descubrirse entre ellos en el tiempo de ejecución con el espacio de nombres System.Reflection de .NET Framework o de alguna otra forma, y podrán realizar en ellos llamadas enlazadas en tiempo de ejecución. Estas llamadas estarán sujetas a las comprobaciones de permisos usadas por SQL Server Analysis Services seguridad basada en autorización.

No debe confiarse en la búsqueda de ensamblados en el mismo dominio de aplicación, porque la implementación define el límite del dominio de aplicación y los ensamblados que van en cada dominio.

Consulte también

Configurar la seguridad para procedimientos almacenados
Definición de procedimientos almacenados