Консольное приложение - объектная модель - доступ к базе данных

Я пытаюсь запустить консольное приложение, использующее объектную модель SharePoint.

Я получаю сообщение об ошибке. Невозможно открыть базу данных "dbname", запрошенную логином. Не удалось войти в систему. Ошибка входа для пользователя DOMAIN \ userid.

В каком-то месте я читал, что у пользователя должно быть разрешение на Content DB.

Не могу найти статью, в которой объясняется, какие разрешения настраивать. Мне это нужно как боеприпасы, чтобы обратиться к моему системному администратору за настройкой разрешений.

Где есть статья, объясняющая это? Я искал в Google, но безуспешно.

Не могли бы вы уточнить дополнительную информацию. Что такое «объектная модель», продукт? Какие звонки вы делаете? И т. Д.

Preet Sangha 14.01.2009 00:33
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
2 775
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы запускаете консольное приложение на самом сервере? Я так полагаю.

В этом случае, скорее всего, это проблема с разрешениями учетной записи, которую вы используете (RDP?) На сервере. Ошибка базы данных может вводить в заблуждение, поскольку вам нужно будет получить разрешения в самом SharePoint, который затем предоставит разрешения для базы данных.

Я бы попросил ваших системных администраторов создать для вас учетную запись службы, которой можно будет предоставить правильные права. (Администратор семейства веб-сайтов часто требуется, но это зависит от кода внутри консольного приложения. Однако большинство из них принимает на себя права администратора семейства веб-сайтов). вы можете получить больше информации, просмотрев инструкции приложения (или, если это ваш собственный код, просто обратитесь к администратору семейства веб-сайтов)

Запуск консольного приложения - это немного важная задача, поэтому вам может повезти, если вы дадите системным администраторам приложение для запуска и инструкции ... хотя я сомневаюсь, что вы запускаете это в поле продукта.

у вашего пользователя, вероятно, нет разрешений на доступ к этим спискам или веб-сайтам. Вы можете запускать свой код с повышенными привилегиями, но иногда это может давать неожиданные результаты. Пример использования повышенных привилегий можно найти здесь

Или вы можете настроить пользователя unser, приложение консоли учетной записи которого запускается как администратор семейства веб-сайтов.

Ваш код, обновленный для работы с повышенными привилегиями, может выглядеть следующим образом:

private static void DisplayAllLists(string site, string webToOpen)
{
    try
    {
       SPSecurity.RunWithElevatedPrivileges(delegate() 
       {


          using ( SPSite siteCollection = new SPSite(site) )
          {
            try
            {
                using (SPWeb web = siteCollection.OpenWeb(webToOpen))
                {
                    SPListCollection lists = web.Lists;
                    foreach (SPList list in lists)
                    {
                        Console.WriteLine(string.Format("List Title: {0}", list.Title));
                    }
                }
             }
           }
           finally
            {
                siteCollection.RootWeb.Dispose();
                Console.ReadLine();
            }
        }

    }
    catch (Exception ex)
    {
        Console.WriteLine("Exception: "+ex.Message);
    }
}

Примечание: этот код был написан из моей головы, так что, возможно, чего-то не хватает ... вам придется попробовать

Ответ принят как подходящий

RunWithElevatedPrivileges не помогает, потому что он просто меняет пользователя потока на идентификатор процесса - в консольном приложении это не имеет никакого эффекта, потому что они одинаковы. «Повышение прав» в олицетворении веб-контекста работает, потому что удостоверение процесса - это учетная запись пула приложений, у которой есть db_owner в базе данных контента.

If I ask that the account I'm using be given Full Control, under the Policies for Web Application, should that work?

Не согласно Ишаи Саги: Код объектной модели и stsadm не работают с сообщением «Доступ запрещен». Короче говоря, кажется, что разрешения db_owner в базе данных контента необходимы пользователю для запуска кода объектной модели (включая STSADM) без веб-контекста.

Хорошо - наконец-то я заставил мое консольное приложение работать. Спасибо за вашу помощь. Мне также пришлось использовать [эту статью] [1], чтобы начать работу. [1]: sharepoint-tips.com/2007/04/…

Lance Perry 12.02.2011 07:25

Другие вопросы по теме