共用方式為


以程式設計 AMO 安全性物件

在 Microsoft SQL Server Analysis Services 中,若要進行安全性物件的程式設計或是執行使用 AMO 安全性物件的應用程式,必須是伺服器管理員群組的成員或資料庫管理員群組的成員。伺服器管理員與資料庫管理員是由 SQL Server Analysis Services 提供的存取層級。

在 Analysis Services 中,使用者是透過指派給物件的「角色」和「權限」之組合來取得物件的存取權。如需詳細資訊,請參閱<AMO 安全性類別>。

角色和權限物件

伺服器角色在集合中僅包含一個角色:管理員角色。無法將新角色加入伺服器角色集合。管理員角色的成員資格允許伺服器內所有物件的完整存取權。

Role 物件是在資料庫層級建立。角色維護只需要在角色中加入或移除成員,以及將角色加入 Database 物件或是從中卸除。如果有任何 Permission 物件與角色關聯,則無法卸除該角色。若要卸除角色,必須搜尋 Database 物件中的所有 Permission 物件,並從權限移除 Role,才可以從 Database 卸除 Role

權限會定義獲得權限之物件上的啟用動作。可以將權限提供到下列物件:DatabaseDataSourceDimensionCubeMiningStructureMiningModel。權限的維護包括授與或撤銷對應之存取屬性所啟用的存取。對於每個啟用的存取,都有一個可以設定成所需存取層級的屬性。可以針對下列作業定義存取:處理、ReadDefinition、讀取、寫入和管理。管理存取僅定義於 Database 物件上。將管理資料庫的權限授與角色時,便會獲得資料庫管理員安全性層級。

下列範例會建立四個角色:資料庫管理員、處理器、寫入器和讀取器。

資料庫管理員可以管理提供的資料庫。

處理器可以處理資料庫中所有的物件並確認結果。若要確認結果,必須針對提供的 Cube 明確啟用資料庫物件的讀取存取權,因為讀取權限不會套用到子系物件。

寫入器可以讀取和寫入提供的 Cube,而且資料格存取權限於客戶維度中的 'United States'。

讀取器可以讀取提供的 Cube,而且資料格存取權限於客戶維度中的 'United States'。

        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
        }