powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / При установке сообщение - "роль содержит не существующую учетную запись домена"
24 сообщений из 24, страница 1 из 1
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39845735
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как одним ударом очистить все роли доступа в проекте куба от несуществующих учетных записей домена? А то достало уже - пытаюсь развернуть куб, а мне в ответ "Роль такая-то содержит несуществующую учетную запись домена" и вылетает с ошибкой.

Вопрос два - как в развернутом кубе очистить все роли доступа от несуществующих учетных записей домена, чтобы потом в TFS синхронизировать куб и проект?
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39845746
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MS SQL Server 2016.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39845761
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,

перейти на AD группы, пихаете пользователей в группы, права доступа на группу
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39845787
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
через АМО:
a) пройтись циклом (foreach) проверив наличие каждого member из роли в AD (и удаление если результат наличия = null)
- дальше сравнить с SQL таблицей безопасности и при расхождении добавить (имя, и sid из AD)
или
b) если разворачивается в разные среды (соответственно даже у одних и тех-же групп/members будут разные sid)
то грузить с пустыми ролями (а добавление членства уже происходит потом на основании SQL таблиц например)
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39845835
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivчерез АМО:
a) пройтись циклом (foreach) проверив наличие каждого member из роли в AD (и удаление если результат наличия = null)
- дальше сравнить с SQL таблицей безопасности и при расхождении добавить (имя, и sid из AD)
или
b) если разворачивается в разные среды (соответственно даже у одних и тех-же групп/members будут разные sid)
то грузить с пустыми ролями (а добавление членства уже происходит потом на основании SQL таблиц например)

AMO - это что?
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39845844
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vikkivчерез АМО:
a) пройтись циклом (foreach) проверив наличие каждого member из роли в AD (и удаление если результат наличия = null)
- дальше сравнить с SQL таблицей безопасности и при расхождении добавить (имя, и sid из AD)
или
b) если разворачивается в разные среды (соответственно даже у одних и тех-же групп/members будут разные sid)
то грузить с пустыми ролями (а добавление членства уже происходит потом на основании SQL таблиц например)

И как я понимаю, это для работы с уже развёрнутым кубом?
А если у меня скачан проект куба с TFS, доработан, построен, и при попытке развернуть начинает ругаться раз за разом на то, что в AD не существует очередной учётной записи? Чистить роли существующего куба, затем обновлять проект в TFS, а затем обновлять у себя в проекте?
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39845885
Ferdipux
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DaniilSeryiИ как я понимаю, это для работы с уже развёрнутым кубом?
А если у меня скачан проект куба с TFS, доработан, построен, и при попытке развернуть начинает ругаться раз за разом на то, что в AD не существует очередной учётной записи?
Тогда можно "по рабоче-крестьянски". У вас роли - это XML файлы с расширением .role в проекте. Открываете их в текстовом редакторе и в разделе <Members> удаляете детей <Member>. Вы так удалите всех пользователей.
Если хотите удалить только несуществующих - придется открыть файл как XML, и двигаясь по ветке Role/Members/Member - тестировать все Sid пользователей, и удалять несуществующих. Можно через PowerShell это сделать.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39846119
T87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryivikkivчерез АМО:
a) пройтись циклом (foreach) проверив наличие каждого member из роли в AD (и удаление если результат наличия = null)
- дальше сравнить с SQL таблицей безопасности и при расхождении добавить (имя, и sid из AD)
или
b) если разворачивается в разные среды (соответственно даже у одних и тех-же групп/members будут разные sid)
то грузить с пустыми ролями (а добавление членства уже происходит потом на основании SQL таблиц например)

AMO - это что?
https://docs.microsoft.com/en-us/bi-reference/amo/developing-with-analysis-management-objects-amo
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39846487
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FerdipuxDaniilSeryiИ как я понимаю, это для работы с уже развёрнутым кубом?
А если у меня скачан проект куба с TFS, доработан, построен, и при попытке развернуть начинает ругаться раз за разом на то, что в AD не существует очередной учётной записи?
Тогда можно "по рабоче-крестьянски". У вас роли - это XML файлы с расширением .role в проекте. Открываете их в текстовом редакторе и в разделе <Members> удаляете детей <Member>. Вы так удалите всех пользователей.
Если хотите удалить только несуществующих - придется открыть файл как XML, и двигаясь по ветке Role/Members/Member - тестировать все Sid пользователей, и удалять несуществующих. Можно через PowerShell это сделать.

Так... Первая версия кода на C# для прохождения по ролям базы данных SSAS и контроля существования учётных записей в уже развёрнутом кубе у меня готова.

А вот удаление уже несуществующих учётных записей из ролей проекта куба - пока под вопросом. Удаление из XML файлов, хм?
Но решать надо - вчера пробовал куб развернуть - штук 30 учёток пришлось вручную удалять.

T87 - благодарю.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39846520
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,
в VS Есть возможность забрать задеплоенный проект
если вы там удалили юзеров
то по идее вы можете сделать новый проект
если это разовая задача.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39846831
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин ФедорDaniilSeryi,
в VS Есть возможность забрать задеплоенный проект
если вы там удалили юзеров
то по идее вы можете сделать новый проект
если это разовая задача.

Да в том-то и дело - задача будет повторяться, и каждый раз удалённые записи AD выковыривать из проекта ручками лень. Как и уточнять, а какое число пользователей добавили в роли ранее развёрнутого куба на сервере после последней сверки куба с TFS, чтобы синхронизировать с проектом.
А сделать шаблон с пустыми ролями и потом героически добавлять кучу пользователей тоже не вариант. Есть вариант с таблицей соответствия ролей и пользователей - но её тоже надо будет поддерживать и пополнять / чистить.
Так что лучше скриптами почистить / пополнить роли проекта на основе ролей развёрнутого куба и данных AD.
Осталось самое интересное - методы для работы с XML-файлами написать.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39847125
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закончил утилиту. Всем искренняя благодарность за помощь.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39847154
Гулин Федор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryiЗакончил утилиту. Всем искренняя благодарность за помощь.

а можешь поделиться не кодом а последователностью действий
у меня есть похожая проблема - надо проверять валидных AD юзеров
при накате ролей
я powershell Считал инфу о ролях и и юзерах
https://www.sql.ru/forum/1313168/ssas-deploy-memberov-v-rol-kogda-est-udalennyy-s-ad-uzer

а потом неплохо бы удалить их же и в проекте

пока задача на паузе
но желание сделать это есть
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39847403
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор,

а можно и кодом поделиться))
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39847769
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гулин Федор, StarikNavy - последовательность действий...

Чистим файл роли так:
1) Открываем указанный xml-файл роли (то, что у него расширение .role - роли не играет, внутри xml).
2) Ищем узел members.
3) Начинаем бежать по его дочерним узлам (они все Member).
4) В каждом дочернем узле находим дочерний узел Name (он там один) и читаем его внутренний текст - имя учётной записи.
5) Дальше обращаемся к AD, и проверяем, есть такая запись в AD или нет. Если нет - удаляем текущий узел Member. Если учётная запись относится к домену, из которого нет возможности получить данные - игнорируем эту учётную запись.
6) В конце не забываем сохранить xml-файл.
7) Если было получено имя каталога, а не имя файла - обрабатываем следующий файл .role.

Код на C# выложу в понедельник. Пока это только второе приближение к требуемому идеалу - но удалить несуществующие учетные записи из файлов ролей и записать в них же добавленные после развёртывания куба новые учётные записи из соответствующих им ролей код способен. Само собой, с контролем существования этих новых записей.
А так надо добавить обработку исключений, создать справочник ролей куба, добавить ключи для просмотра удаленных записей и просмотра с удалением, добавить параметр для имени домена, и т.п.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848110
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
//код
using System;
using System.IO;
using System.DirectoryServices.AccountManagement;
using System.Xml;
using Microsoft.AnalysisServices;

namespace AMOandADwithSSAS
{
    class Program
    {
        /// метод проверяет существование переданного имени логина в домене OK. Если в полученном имени не указан домен - домен равен "OK". Если домен не равен "OK" - возвращает True.
        static bool HaveLogin(string Param)
        //закомментированный при помощи /* код превращает метод в обработчик данных по всем логинам домена. Оно нам не надо
        {
            string[] Divided = Param.Split('\\');
            string Login = Param;
            string Domen = "OK";
            if (Divided.Length == 1)
            {
                Login = Divided[0];
                Domen = "OK";
            }
            else
            {
                Login = Divided[1];
                Domen = Divided[0];
            }
            //Console.WriteLine("Domen: " + Domen + " Login: " + Login);
            if (Domen == "OK")
            {
                using (var context = new PrincipalContext(ContextType.Domain, Domen))
                {
                    using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
                    {
                        /*foreach (var result in searcher.FindOne()) *//*FindAll())*/
                        UserPrincipal userPrin = new UserPrincipal(context);
                        userPrin.SamAccountName = Login;
                        searcher.QueryFilter = userPrin;
                        var result = searcher.FindOne();

                        /*{*/
                        if (result == null)
                        {
                            return false;
                            /*Console.WriteLine("No login");*/
                        }
                        else
                        {
                            //кусок ниже просто для памяти о том, что и как можно посмотреть в свойствах учётной записи
                            /*DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
                            Console.WriteLine("First Name: " + de.Properties["givenName"].Value);
                            Console.WriteLine("Last Name : " + de.Properties["sn"].Value);
                            Console.WriteLine("SAM account name   : " + de.Properties["samAccountName"].Value);
                            Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value);
                            Console.WriteLine();
                            */
                            return true;
                        }
                        /*}*/
                    }
                }
            }
            else
            {
                return true;
            }
        }
        static string Right(string s, int kolvo)
        {
            return s.Substring(s.Length - kolvo, kolvo);
        }
        static void Main(string[] args)
        {
            Console.WriteLine(args.Length);
            if (args.Length < 3)                
            {
                Console.WriteLine("Укажите полный путь к файлу роли, имя SSAS сервера и имя развёрнутой SSAS базы данных, с ролями которой будут сравниваться файлы ролей проекта. Если указан только каталог (без имени файла) - будут обработаны все файлы .role");
            }
            else
            {
                string Ext;
                Ext = args[0].Substring(args[0].Length - 5, 5);
                //Console.WriteLine(Ext);
                //Console.WriteLine(Right(args[0], 5));
                if (Ext == ".role")
                {
                    XmlCheck(args[0], args[1], args[2]);
                }
                else
                {
                    DirectoryInfo Catalog = new DirectoryInfo(args[0]);
                    FileInfo[] f = Catalog.GetFiles();
                    foreach (FileInfo file in f)
                    {
                        if (Right(file.Name, 5) == ".role")
                        {
                            XmlCheck(args[0] + "\\" + file.Name, args[1], args[2]);
                        }
                    }
                }
            }
            Console.WriteLine("Нажми любую клавишу для завершения работы программы...");
            Console.ReadKey();
        }
        static void XmlCheck(string PathToXml, string OLAPServerName, string OLAPDB)
        {
            //переменные для работы с XML
            //string PathToXml;
            string Login;
            //PathToXml= "C:\\Users\\DNKrutskih\\Documents\\DWHOK\\ALL PROJECTS\\DWHOLAP\\CUBE_IN\\CUBE_IN\\Полный доступ.role";
            string[] Divided = PathToXml.Split('\\');
            string FilenName;
            FilenName = Divided[Divided.Length - 1].Substring(0, Divided[Divided.Length - 1].Length - 5);

            //переменные для работы с базой SSAS
            string ConnStr;

            bool NoInRole;

            ConnStr = "Provider=MSOLAP;Data Source=" + OLAPServerName + ";";
            /* вообще не нужно
            NameTable nt = new NameTable();
            XmlNamespaceManager man=new XmlNamespaceManager(nt);
            man.AddNamespace (String.Empty,"urn:www.w3.org/2001/XMLSchema");//default namespace
            */
            //начало работы
            XmlDocument xDoc = new XmlDocument();
            xDoc.Load(PathToXml);
            XmlElement xRoot = xDoc.DocumentElement;

            Server OLAPServer = new Server();
            OLAPServer.Connect(ConnStr);

            //чистим файл роли от всякого шлака
            Console.WriteLine("Обработка роли " + FilenName);
            Console.WriteLine("Идёт поиск и удаление из файла роли несуществующих учётных записей Active Directory...");
            foreach (XmlNode xnode in xRoot)
            {
                if (xnode.Name == "Members")
                {
                    foreach (XmlNode Members in xnode.ChildNodes)
                    {
                        Login = Members.ChildNodes[0].InnerText;
                        if (HaveLogin(Login) == false)
                        {
                            Members.RemoveChild(Members.FirstChild);
                            xnode.RemoveChild(Members);
                            Console.WriteLine(Login + " удалён");
                        }
                    }
                }
            }
            //а теперь добавляем отсутствующих. Если они ещё существуют, конечно же                   
            Console.WriteLine("Добавляем новые учётные записи из контрольной базы данных...");
            foreach (Role OLAPRole in OLAPServer.Databases[OLAPDB].Roles)
            {
                if (OLAPRole.Name.ToString() == FilenName)
                {
                    foreach (RoleMember RoleLogin in OLAPRole.Members)
                    {
                        if (HaveLogin(RoleLogin.Name) == true)//если учётная запись удалена из active directory, то игнорируем её
                        {
                            NoInRole = false;
                            foreach (XmlNode xnode in xRoot)
                            {
                                if (xnode.Name == "Members")
                                {
                                    foreach (XmlNode Members in xnode.ChildNodes)
                                    {
                                        Login = Members.ChildNodes[0].InnerText;
                                        if (RoleLogin.Name.ToString() == Login)
                                        {
                                            NoInRole = true;
                                            break; //нашли, сравнили, флаг поменяли - ну и нечего далее по циклу бежать, процессор грузить
                                        }
                                    }
                                    if (NoInRole == false)//не нашли - выводим инфу и добавляем в файл роли проекта
                                    {
                                        Console.WriteLine(RoleLogin.Name + " отсутствует в файле роли");
                                        XmlNode MemberElem;
                                        MemberElem = xnode.ChildNodes[0].Clone();//чтобы не нарваться на автодобавление атрибута xlmns="" при работе с XmlElem или как там его
                                        MemberElem.ChildNodes[0].InnerText = RoleLogin.Name.ToString();//меняем имя склонированной учетной записи на добавляемое имя учётной записи 
                                        xnode.AppendChild(MemberElem);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            xDoc.Save(PathToXml); //сохраняем файл роли
        }
    }
}
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848271
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше не допускать таких ситуаций в принципе, чем потом героически их решать.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848331
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритикЛучше не допускать таких ситуаций в принципе, чем потом героически их решать.

Извините, а Вы случайно не математик или бизнес-консультант или житель британских островов? А то любят давать совершенно точные и при этом абсолютно бесполезные ответы в основном представители именно этих категорий людей.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848361
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DaniilSeryi,

Извиняю, не математик и не британец
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848389
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик,

так и знал! бизнес-консультант!
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848396
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и консультантом работал )

ps в данном случае нужно просто перейти на роли домена в проекте, желательно при этом назначить менеджерами этих ролей ответственных бизнес-пользователей, чтобы они сами добавляли-удаляли туда пользователей
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848412
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Критик,

ответственные бизнес-пользователи прекрасно разбираются в своих бизнес-процессах и ничего не понимают в управлении AD. обязать их выполнять работу администраторов домена это либо тратить их драгоценное время, либо нанимать им зама по AD.
это нормально, когда управлением AD будут заниматься 2 десятка человек ничего в нем не смыслящих?
делегировать права это конечно не плохо, но до абсурда доводить тоже не стоит.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848486
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я ничего не говорил про управление AD, только про назначение менеджерами ролей. Уверяю, ответственные бизнес-пользователи не так глупы, чтобы не справиться с этим. Плюс им не нужно будет ожидать сутки или несколько, пока их новый сотрудник получит доступ. Я так всегда делал и все были довольны, т.к. те, кому лень - могли просто отправить заявку.

Наличие альтернатмвной возможности - это всегда плюс.
...
Рейтинг: 0 / 0
При установке сообщение - "роль содержит не существующую учетную запись домена"
    #39848513
DaniilSeryi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритикЯ ничего не говорил про управление AD, только про назначение менеджерами ролей. Уверяю, ответственные бизнес-пользователи не так глупы, чтобы не справиться с этим. Плюс им не нужно будет ожидать сутки или несколько, пока их новый сотрудник получит доступ. Я так всегда делал и все были довольны, т.к. те, кому лень - могли просто отправить заявку.

Наличие альтернатмвной возможности - это всегда плюс.

Наличие альтернативной возможности - это плюс. Но когда есть необходимость синхронизировать роли проекта и роли уже развёрнутого куба, или необходимость удалить несуществующие учётки - лучше я это сделаю скриптом, а не вручную.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / При установке сообщение - "роль содержит не существующую учетную запись домена"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]