Gestion des assemblys de modèles multidimensionnelsMultidimensional Model Assemblies Management

S’APPLIQUE À :ouiSQL Server Analysis ServicesnonAzure Analysis ServicesAPPLIES TO:yesSQL Server Analysis ServicesnoAzure Analysis Services MicrosoftMicrosoft SQL ServerSQL Server Analysis ServicesAnalysis Services offre de nombreuses fonctions intrinsèques à utiliser avec les langages MDX (Multidimensional Expressions) et les Extensions DMX (Data Mining), conçues pour effectuer des calculs statistiques standard pour tous les éléments parcours des membres dans une hiérarchie. MicrosoftMicrosoft SQL ServerSQL Server Analysis ServicesAnalysis Services supplies lots of intrinsic functions for use with the Multidimensional Expressions (MDX) and Data Mining Extensions (DMX) languages, designed to accomplish everything from standard statistical calculations to traversing members in a hierarchy. Cependant, comme dans tout autre produit complexe et robuste, il est toujours nécessaire d'étendre la fonctionnalité de ce type d'outil.But, as with any other complex and robust product, there is always the need to extend the functionality of such a product further.

Par conséquent, Analysis ServicesAnalysis Services vous permet d'ajouter des assemblys à une base de données ou à une instance d' Analysis ServicesAnalysis Services .Therefore, Analysis ServicesAnalysis Services lets you add assemblies to an Analysis ServicesAnalysis Services instance or database. Les assemblys vous permettent de créer des fonctions externes définies par l'utilisateur à l'aide de tout langage CLR (Common Language Runtime), tel que Microsoft Visual Basic .NET ou Microsoft Visual C#.Assemblies let you create external, user-defined functions using any common language runtime (CLR) language, such as Microsoft Visual Basic .NET or Microsoft Visual C#. Vous pouvez aussi utiliser des langages d'automatisation COM (Component Object Model) tels que Microsoft Visual Basic ou Microsoft Visual C++.You can also use Component Object Model (COM) Automation languages such as Microsoft Visual Basic or Microsoft Visual C++.

Important

Les assemblys COM peuvent présenter un risque pour la sécurité.COM assemblies might pose a security risk. En raison de ce risque et d'autres considérations, les assemblys COM ont été déconseillés dans SQL Server 2008 Analysis Services (SSAS)SQL Server 2008 Analysis Services (SSAS).Due to this risk and other considerations, COM assemblies were deprecated in SQL Server 2008 Analysis Services (SSAS)SQL Server 2008 Analysis Services (SSAS). Les assemblys COM peuvent ne pas être pris en charge dans les versions ultérieures.COM assemblies might not be supported in future releases.

Les assemblys vous permettent d'étendre les fonctions d'entreprise de MDX et de DMX.Assemblies let you extend the business functionality of MDX and DMX. Vous créez la fonctionnalité que vous souhaitez dans une bibliothèque de liens dynamiques (DLL), et vous ajoutez la bibliothèque en tant qu'assembly à une instance d' Analysis ServicesAnalysis Services ou à une base de données Analysis ServicesAnalysis Services .You build the functionality that you want into a library, such as a dynamic link library (DLL) and add the library as an assembly to an instance of Analysis ServicesAnalysis Services or to an Analysis ServicesAnalysis Services database. Les méthodes publiques de la bibliothèque sont alors exposées en tant que fonctions définies par l'utilisateur aux expressions, procédures, calculs, actions et applications clientes MDX et DMX.The public methods in the library are then exposed as user-defined functions to MDX and DMX expressions, procedures, calculations, actions, and client applications.

Un assembly avec les nouvelles procédures et les fonctions peut être ajouté au serveur.An assembly with new procedures and functions can be added to the server. Vous pouvez utiliser des assemblys pour améliorer ou ajouter des fonctionnalités personnalisées qui ne sont pas fournies par le serveur.You can use assemblies to enhance or add custom functionality that is not provided by the server. En utilisant des assemblys, vous pouvez ajouter de nouvelles fonctions aux expressions MDX (Multidimensional Expressions), aux Extensions DMX (Data Mining Extensions) ou aux procédures stockées.By using assemblies, you can add new functions to Multidimensional Expressions (MDX), Data Mining Extensions (DMX), or stored procedures. Les assemblys sont chargés à partir de l'emplacement où l'application personnalisée est exécutée, et une copie du fichier binaire d'assembly est enregistrée avec les données de base de données dans le serveur.Assemblies are loaded from the location where the custom application is run, and a copy of the assembly binary file is saved along with the database data in the server. Lorsqu'un assembly est supprimé, l'assembly copié est également supprimé du serveur.When an assembly is removed, the copied assembly is also removed from the server.

Les assemblys peuvent être de deux types différents : COM et CLR.Assemblies can be of two different types: COM and CLR. Les assemblys CLR sont de assemblys développés dans les langages de programmation du .NET Framework tels que C#, Visual Basic .NET, C++ managé.CLR assemblies are assemblies developed in .NET Framework programming languages such as C#, Visual Basic .NET, managed C++. Les assemblys COM sont des bibliothèques COM qui doivent être enregistrées dans le serveur.COM assemblies are COM libraries that must be registered in the server

Les assemblys peuvent être ajoutés aux objets Server ou Database .Assemblies can be added to Server or Database objects. Les assemblys de serveur peuvent être appelés par tout utilisateur connecté au serveur ou tout objet dans le serveur.Server assemblies can be called by any user connected to the server or any object in the server. Les assemblys de base de données peuvent être appelés uniquement par les objets Database ou les utilisateurs connectés à la base de données.Database assemblies can be called only by Database objects or users connected to the database.

Un objet Assembly simple est composé d’informations de base (Nom et ID), d’une collection de fichiers et de caractéristiques de sécurité.A simple Assembly object is composed of basic information (Name and Id), file collection, and security specifications.

La collection de fichiers fait référence aux fichiers d'assembly chargés et aux fichiers de débogage (.pdb) correspondants, si les fichiers de débogage ont été chargés avec les fichiers d'assembly.The file collection refers to the loaded assembly files and their corresponding debugging (.pdb) files, if the debugging files were loaded with the assembly files. Les fichiers d'assemblys sont chargés à partir de l'emplacement où l'application a défini les fichiers et une copie est enregistrée avec les données, dans le serveur.Assembly files are loaded from the location where the application defined the files to, and a copy is saved in the server along with the data. La copie du fichier d'assembly est utilisée pour charger l'assembly chaque fois que le service est démarré.The copy of the assembly file is used to load the assembly every time the service is started.

Les caractéristiques de sécurité incluent le jeu d'autorisations et l'emprunt d'identité utilisés pour exécuter l'assembly.Security specifications include the permission set and the impersonation used to run the assembly.

appel de fonctions définies par l’utilisateurCalling User-Defined Functions

L'appel d'une fonction définie par l'utilisateur dans un assembly est semblable à l'appel d'une fonction intrinsèque, excepté que vous devez utiliser un nom complet.Calling a user-defined function in an assembly is performed just like calling an intrinsic function, except that you must use a fully qualified name. Par exemple, une fonction définie par l'utilisateur qui renvoie un type attendu par MDX est insérée comme ceci dans une requête MDX :For example, a user-defined function that returns a type expected by MDX is included in an MDX query, as shown in the following example:

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

Les fonctions définies par l'utilisateur peuvent aussi être appelées à l'aide du mot clé CALL.User-defined functions can also be called using the CALL keyword. Vous devez utiliser le mot clé CALL pour les fonctions définies par l'utilisateur qui renvoient des jeux d'enregistrements ou des valeurs de type void, et vous ne pouvez pas utiliser le mot clé CALL si la fonction définie par l'utilisateur dépend d'un objet dans le contexte de l'instruction ou du script MDX ou DMX, tel que le cube en cours ou le modèle d'exploration de données.You must use the CALL keyword for user-defined functions which return recordsets or void values, and you cannot use the CALL keyword if the user-defined function depends on an object in the context of the MDX or DMX statement or script, such as the current cube or data mining model. Une utilisation courante d'une fonction appelée en dehors d'une requête MDX ou DMX est l'utilisation du modèle d'objets AMO pour effectuer des fonctions d'administration.A common use for a function called outside an MDX or DMX query is to use the AMO object model to perform administrative functions. Si vous souhaitez par exemple utiliser la fonction MyVoidProcedure(a, b, c) dans une instruction MDX, utilisez la syntaxe suivante :If, for example, you wanted to use the function MyVoidProcedure(a, b, c) in an MDX statement, the following syntax would be employed:

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

Les assemblys simplifient le développement de bases de données en permettant à du code commun d'être développé une seule fois et d'être stocké à un seul emplacement.Assemblies simplify database development by enabling common code to be developed once and stored in a single location. Les développeurs de logiciels clients peuvent créer des bibliothèques de fonctions pour Analysis ServicesAnalysis Services et les distribuer avec leurs applications.Client software developers can create libraries of functions for Analysis ServicesAnalysis Services and distribute them with their applications.

Les assemblys et les fonctions définies par l'utilisateur peuvent dupliquer les noms des fonctions de la bibliothèque de fonctions de Analysis ServicesAnalysis Services ou d'autres assemblys.Assemblies and user-defined functions can duplicate the function names of the Analysis ServicesAnalysis Services function library or of other assemblies. Dès lors que vous appelez la fonction définie par l'utilisateur avec son nom complet, Analysis ServicesAnalysis Services utilise la procédure correcte.As long as you call the user-defined function by using its fully qualified name, Analysis ServicesAnalysis Services will use the correct procedure. Pour des raisons de sécurité et pour éliminer la possibilité d'appeler un nom dupliqué dans une autre bibliothèque de classes, Analysis ServicesAnalysis Services requiert l'utilisation des seuls noms complets pour les procédures stockées.For security purposes, and to eliminate the chance of calling a duplicate name in a different class library, Analysis ServicesAnalysis Services requires that you use only fully qualified names for stored procedures.

Pour appeler une fonction définie par l'utilisateur depuis un assembly CLR spécifique, la fonction définie par l'utilisateur est précédée du nom de l'assembly, du nom complet de la classe et du nom de la procédure, comme dans l'exemple suivant :To call a user-defined function from a specific CLR assembly, the user-defined function is preceded by the assembly name, full class name, and procedure name, as demonstrated here:

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

Pour assurer la compatibilité amont avec les versions antérieures de Analysis ServicesAnalysis Services, la syntaxe suivante est également acceptable :For backward compatibility with earlier versions of Analysis ServicesAnalysis Services, the following syntax is also acceptable:

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

Si une bibliothèque COM prend en charge plusieurs interfaces, l'identificateur d'interface peut également être utilisé pour résoudre le nom de la procédure, comme dans cet exemple :If a COM library supports multiple interfaces, the interface ID can also be used to resolve the procedure name, as demonstrated here:

AssemblyName!InterfaceID!ProcedureName(Argument1, Argument2, ...)AssemblyName!InterfaceID!ProcedureName(Argument1, Argument2, ...)

SécuritéSecurity

La sécurité des assemblys est basée sur le modèle de sécurité de .NET Framework, qui est un modèle de sécurité d'accès du code.Security for assemblies is based on the .NET Framework security model, which is a code-access security model. .NET Framework prend en charge un mécanisme de sécurité d'accès du code qui suppose que le module d'exécution peut héberger à la fois du code d'un niveau de confiance total et d'un niveau de confiance partiel..NET Framework supports a code-access security mechanism that assumes that the runtime can host both fully trusted and partially trusted code. Les ressources qui sont protégées par la sécurité d'accès du code de .NET Framework sont généralement intégrées à du code managé qui demande l'autorisation correspondante avant d'autoriser l'accès à la ressource.The resources that are protected by .NET Framework code access security are typically wrapped by managed code which demands the corresponding permission before enabling access to the resource. La demande d'autorisation est satisfaite seulement si tous les appelants (au niveau de l'assembly) de la pile d'appels ont l'autorisation pour la ressource correspondante.The demand for the permission is satisfied only if all the callers (at the assembly level) in the call stack have the corresponding resource permission.

Pour les assemblys, l’autorisation d’exécution est passée avec la propriété PermissionSet sur l’objet Assembly .For assemblies, permission for execution is passed with the PermissionSet property on the Assembly object. Les autorisations reçues par le code managé sont déterminées par la stratégie de sécurité effective.The permissions that managed code receives are determined by the security policy in effect. Il existe déjà trois niveaux de stratégie effectifs dans un environnement hébergé non- Analysis ServicesAnalysis Services : entreprise, ordinateur et utilisateur.There are already three levels of policy in effect in a non- Analysis ServicesAnalysis Services hosted environment: enterprise, computer and user. La liste effective des autorisations reçues par le code est déterminée par l'intersection des autorisations obtenues par ces trois niveaux.The effective list of permissions that code receives is determined by the intersection of the permissions obtained by these three levels.

Analysis ServicesAnalysis Services fournit une stratégie de sécurité au niveau de l’hôte au CLR (Common Language Runtime) quand il l’héberge. Cette stratégie est un niveau de stratégie supplémentaire sous les trois niveaux de stratégie qui sont toujours effectifs. supplies a host-level security policy level to the CLR while hosting it; this policy is an additional policy level below the three policy levels that are always in effect. Cette stratégie est définie pour chaque domaine d'application qui est créé par Analysis ServicesAnalysis Services.This policy is set for every application domain that is created by Analysis ServicesAnalysis Services.

La stratégie de niveau hôte de Analysis ServicesAnalysis Services est une combinaison de la stratégie fixe de Analysis ServicesAnalysis Services pour les assemblys système et de la stratégie spécifiée par l’utilisateur pour les assemblys utilisateur.The Analysis ServicesAnalysis Services host-level policy is a combination of Analysis ServicesAnalysis Services fixed policy for system assemblies and user-specified policy for user assemblies. La partie spécifiée par l'utilisateur de la stratégie d'hôte d' Analysis ServicesAnalysis Services est basée sur le propriétaire de l'assembly spécifiant un des trois compartiments d'autorisation pour chaque assembly :The user-specified piece of the Analysis ServicesAnalysis Services host policy is based on the assembly owner specifying one of three permission buckets for each assembly:

Paramètre d'autorisationPermission Setting DescriptionDescription
SécuriséSafe Fournit une autorisation de traitement interne.Provides internal computation permission. Ce compartiment d'autorisations ne donne pas d'autorisations pour accéder aux ressources protégées dans le .NET Framework.This permission bucket does not assign permissions to access any of the protected resources in the .NET Framework. Il s’agit du compartiment d’autorisations utilisé par défaut pour un assembly si aucun n’est spécifié avec la propriété PermissionSet .This is the default permission bucket for an assembly if none is specified with the PermissionSet property.
ExternalAccessExternalAccess Fournit le même accès que le paramètre Safe , avec la possibilité supplémentaire de pouvoir accéder à des ressources système externes.Provides the same access as the Safe setting, with the additional ability to access external system resources. Ce compartiment d'autorisations n'offre pas de garanties de sécurité (même s'il est possible de sécuriser ce scénario), mais il donne des garanties de fiabilité.This permission bucket does not offer security guarantees (although it is possible to secure this scenario), but it does give reliability guarantees.
Non sécuriséUnsafe Ne fournit pas de restrictions.Provides no restrictions. Aucune garantie de sécurité ou de fiabilité ne peut être donnée pour du code managé s'exécutant sous cet ensemble d'autorisations.No security or reliability guarantees can be made for managed code running under this permission set. Toutes les autorisations, même une autorisation personnalisée incluse par l'administrateur, sont accordées au code s'exécutant à ce niveau de confiance.Any permission, even a custom permission included by the administrator, is granted to code running at this level of trust.

Quand le CLR est hébergé par Analysis ServicesAnalysis Services, la vérification des autorisations basée sur le parcours de pile s'arrête à la limite avec le code Analysis ServicesAnalysis Services natif.When CLR is hosted by Analysis ServicesAnalysis Services, the stack-walk based permission check stops at the boundary with native Analysis ServicesAnalysis Services code. Tout code managé dans des assemblys Analysis ServicesAnalysis Services tombe toujours dans une des trois catégories d'autorisations dont la liste est donnée ci-dessus.Any managed code in Analysis ServicesAnalysis Services assemblies always falls into one of the three permission categories listed earlier.

Les routines d'assembly COM (ou non managée) ne prennent pas en charge le modèle de sécurité CLR.COM (or unmanaged) assembly routines do not support the CLR security model.

Emprunt d'identitéImpersonation

Quand du code managé accède à une ressource en dehors d’ Analysis ServicesAnalysis Services, Analysis ServicesAnalysis Services suit les règles associées à un paramètre de la propriété ImpersonationMode de l’assembly de façon à garantir que l’accès se fait dans un contexte de sécurité Windows approprié.Whenever managed code accesses any resource outside Analysis ServicesAnalysis Services, Analysis ServicesAnalysis Services follows the rules associated with the ImpersonationMode property setting of the assembly to make sure that the access occurs in an appropriate Windows security context. Étant donné que les assemblys qui utilisent le paramètre d’autorisation Safe ne peuvent pas accéder à des ressources en dehors d’ Analysis ServicesAnalysis Services, ces règles sont applicables uniquement pour les assemblys utilisant les paramètres d’autorisation ExternalAccess et Unsafe .Because assemblies using the Safe permission setting cannot access resources outside Analysis ServicesAnalysis Services, these rules are applicable only for assemblies using the ExternalAccess and Unsafe permission settings.

  • Si le contexte d’exécution actuel correspond à une connexion authentifiée Windows et qu’il est le même que le contexte de l’appelant d’origine (c’est-à-dire qu’il n’y a pas d’instruction intermédiaire EXECUTE AS), Analysis ServicesAnalysis Services emprunte l’identité de la connexion authentifiée Windows avant d’accéder à la ressource.If the current execution context corresponds to Windows Authenticated login and is the same as the context of the original caller (that is, there is no EXECUTE AS in the middle), Analysis ServicesAnalysis Services will impersonate the Windows Authenticated login before accessing the resource.

  • S'il y a une instruction EXECUTE AS intermédiaire qui a changé le contexte relativement à celui de l'appelant d'origine, la tentative d'accès à une ressource externe échoue.If there is an intermediate EXECUTE AS that changed the context from that of the original caller), the attempt to access external resource will fail.

    La propriété ImpersonationMode peut être définie avec le paramètre ImpersonateCurrentUser ou ImpersonateAnonymous.The ImpersonationMode property can be set to ImpersonateCurrentUser or ImpersonateAnonymous. Le paramètre par défaut, ImpersonateCurrentUser, exécute un assembly sous le compte de connexion réseau de l’utilisateur actuel.The default setting, ImpersonateCurrentUser, runs an assembly under the current user's network login account. Si le paramètre ImpersonateAnonymous est utilisé, le contexte d’exécution correspond au compte d’utilisateur de connexion Windows IUSER_nom_serveur sur le serveur.If the ImpersonateAnonymous setting is used, the execution context is corresponds to the Windows login user account IUSER_servername on the server. Il s'agit du compte Invité Internet, qui a des droits limités sur le serveur.This is the Internet guest account, which has limited privileges on the server. Un assembly s'exécutant dans ce contexte peut seulement accéder à des ressources limitées sur le serveur local.An assembly running in this context can only access limited resources on the local server.

Domaines d'applicationApplication Domains

Analysis ServicesAnalysis Services n’expose pas directement les domaines d’application. does not expose application domains directly. Grâce à un ensemble d’assemblys s’exécutant dans le même domaine d’application, les domaines d’application sont capables de se découvrir les uns les autres au moment de l’exécution à l’aide de l’espace de noms System.Reflection dans .NET Framework ou par d’autres moyens. Ils sont également capables d’y faire des appels à liaison tardive.Because of a set of assemblies running in the same application domain, application domains can discover each other at execution time by using the System.Reflection namespace in the .NET Framework or in some other way, and can call into them in late-bound manner. De tels appels font l'objet des vérifications d'autorisations utilisées par la sécurité basée sur les autorisations de Analysis ServicesAnalysis Services .Such calls will be subject to the permission checks used by Analysis ServicesAnalysis Services authorization-based security.

Il est recommandé de ne pas se baser sur la recherche d'assemblys dans le même domaine d'application, dans la mesure où la limite du domaine d'application et les assemblys qui vont dans chacun des domaines sont définis par la mise en œuvre.You should not rely on finding assemblies in the same application domain, because the application domain boundary and the assemblies that go into each domain are defined by the implementation.

Voir aussiSee Also

Définition de la sécurité pour les procédures stockées Setting Security for Stored Procedures
Définition de procédures stockéesDefining Stored Procedures