Programmieren von AMO-Sicherheitsobjekten

In MicrosoftSQL ServerAnalysis Services setzt das Programmieren von Sicherheitsobjekten und das Ausführen von Anwendungen, die diese AMO-Sicherheitsobjekte verwenden, die Mitgliedschaft bei der Gruppe der Serveradministratoren oder Datenbankadministratoren voraus. Serveradministrator und Datenbankadministrator sind von SQL ServerAnalysis Services angegebene Zugriffsebenen.

In Analysis Services wird der Benutzerzugriff auf beliebige Objekte durch eine Kombination aus Rollen und Berechtigungen gewährt, die dem jeweiligen Objekt zugewiesen werden. Weitere Informationen finden Sie unter AMO-Sicherheitsklassen.

Role- und Berechtigungsobjekte

Serverrollen enthalten nur eine Rolle in der Auflistung: die des Administrators. Neue Rollen können der Serverrollenauflistung nicht hinzugefügt werden. Die Rolle eines Administrators ermöglicht den vollständigen Zugriff auf jedes Objekt auf dem Server.

Role-Objekte werden auf Datenbankebene erstellt. Die Rollenverwaltung erfordert lediglich das Hinzufügen oder Entfernen von Mitgliedern zu oder aus einer Rolle sowie das Hinzufügen oder Löschen von Rollen zum oder aus dem Database-Objekt. Eine Rolle kann nicht gelöscht werden, wenn es ein der Rolle zugeordnetes Permission-Objekt gibt. Um eine Rolle zu löschen, müssen alle Permission-Objekte in den Database-Objekten gesucht und die Role aus den Berechtigungen entfernt werden, bevor die Role aus der Database gelöscht werden kann.

Berechtigungen definieren die aktivierten Aktionen des Objekts, für das die Berechtigung erteilt wird. Berechtigungen können für die folgenden Objekte erteilt werden:Database, DataSource, Dimension, Cube, MiningStructure und MiningModel. Die Berechtigungsverwaltung schließt das Gewähren oder Widerrufen von aktiviertem Zugriff durch die entsprechende Zugriffseigenschaft ein. Für jeden aktivierten Zugriff gibt es eine Eigenschaft, die auf die gewünschte Zugriffsstufe festgelegt werden kann. Der Zugriff kann für die folgenden Vorgänge definiert werden: Verarbeiten, ReadDefinition, Lesen, Schreiben und Verwalten. Der Verwaltungszugriff wird nur über das Database-Objekt definiert. Die Datenbankadministratorsicherheitsstufe wird erteilt, wenn die Rollenmitgliedschaft gemeinsam mit der Datenbankberechtigung für die Verwaltung gewährt wird.

Im folgenden Beispiel werden vier Rollen erstellt: Database Administrators (Datenbankadministratoren), Processors (Verarbeiter), Writers (Schreiber) und Readers (Leser).

Datenbankadministratoren können die angegebene Datenbank verwalten.

Verarbeiter können alle Objekte in einer Datenbank verarbeiten und Ergebnisse überprüfen. Um Ergebnisse zu überprüfen, muss der Lesezugriff auf das Datenbankobjekt explizit für den angegebenen Cube aktiviert werden, da die Leseberechtigung nicht für alle untergeordneten Objekte gilt.

Schreiber können vom angegebenen Cube lesen und darin schreiben. Der Zellzugriff ist in der Kundendimension auf die USA begrenzt.

Leser können vom angegebenen Cube lesen. Der Zellzugriff ist in der Kundendimension auf die USA begrenzt.

        static public void CreateRolesAndPermissions(Database db, Cube cube)
        {
            Role role;
            DatabasePermission dbperm;
            CubePermission cubeperm;

            #region Create the Database Administrators role

            // Create the Database Administrators role.
            role = db.Roles.Add("Database Administrators");
            role.Members.Add(new RoleMember("")); // e.g. domain\user
            role.Update();

            // Assign administrative permissions to this role.
            // Members of this role can perform any operation within the database.
            dbperm = db.DatabasePermissions.Add(role.ID);
            dbperm.Administer = true;
            dbperm.Update();

            #endregion

            #region Create the Processors role

            // Create the Processors role.
            role = db.Roles.Add("Processors");
            role.Members.Add(new RoleMember("")); // e.g. myDomain\johndoe
            role.Update();

            // Assign Read and Process permissions to this role.
            // Members of this role can process objects in the database and query them to verify results.
            // Process permission applies to all contained objects, i.e. all dimensions and cubes.
            // Read permission does not apply to contained objects, so we must assign the permission explicitly on the cubes.
            dbperm = db.DatabasePermissions.Add(role.ID);
            dbperm.Read = ReadAccess.Allowed;
            dbperm.Process = true;
            dbperm.Update();

            cubeperm = cube.CubePermissions.Add(role.ID);
            cubeperm.Read = ReadAccess.Allowed;
            cubeperm.Update();

            #endregion

            #region Create the Writers role

            // Create the Writers role.
            role = db.Roles.Add("Writers");
            role.Members.Add(new RoleMember("")); // e.g. redmond\johndoe
            role.Update();

            // Assign Read and Write permissions to this role.
            // Members of this role can discover, query and writeback to the Adventure Works cube.
            // However cell access and writeback is restricted to the United States (in the Customer dimension).
            dbperm = db.DatabasePermissions.Add(role.ID);
            dbperm.Read = ReadAccess.Allowed;
            dbperm.Update();

            cubeperm = cube.CubePermissions.Add(role.ID);
            cubeperm.Read = ReadAccess.Allowed;
            cubeperm.Write = WriteAccess.Allowed;
            cubeperm.CellPermissions.Add(new CellPermission(CellPermissionAccess.Read, "[Customer].[Country-Region].CurrentMember is [Customer].[Country-Region].[Country-Region].&[United States]"));
            cubeperm.CellPermissions.Add(new CellPermission(CellPermissionAccess.ReadWrite, "[Customer].[Country-Region].CurrentMember is [Customer].[Country-Region].[Country-Region].&[United States]"));
            cubeperm.Update();

            #endregion

            #region Create the Readers role

            // Create the Readers role.
            role = db.Roles.Add("Readers");
            role.Members.Add(new RoleMember("")); // e.g. redmond\johndoe
            role.Update();

            // Assign Read permissions to this role.
            // Members of this role can discover and query the Adventure Works cube.
            // However the Customer dimension is restricted to the United States.
            dbperm = db.DatabasePermissions.Add(role.ID);
            dbperm.Read = ReadAccess.Allowed;
            dbperm.Update();

            cubeperm = cube.CubePermissions.Add(role.ID);
            cubeperm.Read = ReadAccess.Allowed;
            Dimension dim = db.Dimensions.GetByName("Customer");
            DimensionAttribute attr = dim.Attributes.GetByName("Country-Region");
            CubeDimensionPermission cubedimperm = cubeperm.DimensionPermissions.Add(dim.ID);
            cubedimperm.Read = ReadAccess.Allowed;
            AttributePermission attrperm = cubedimperm.AttributePermissions.Add(attr.ID);
            attrperm.AllowedSet = "{[Customer].[Country-Region].[Country-Region].&[United States]}";
            cubeperm.Update();

            #endregion
        }