Как я могу подключиться к серверу SSAS, используя пользователя, отличного от моего входа в Windows, с помощью ADOMD.NET?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу подключиться к серверу SSAS, используя пользователя, отличного от моего входа в Windows, с помощью ADOMD.NET?

Сообщение Anonymous »

Мне нужно получить некоторые данные из куба SSAS. Мне дали пользователя service.user, с помощью которого я могу подключиться к кубу с помощью Excel следующим образом:
Вход в Excel
Но мне нужно сделать это программно. Исследования привели меня к библиотеке ADOMD.NET. Я пробовал использовать его несколькими способами, но не смог заставить его работать.
Сначала я попробовал этот фрагмент C# (.NET 8):

Код: Выделить всё

using Microsoft.AnalysisServices.AdomdClient;

try {
using (AdomdConnection conn = new("Data Source=bi.mycompany.com; Initial Catalog=MyDb; UID=mycompany\\service.user; PWD=pass")) {
conn.Open();
Console.WriteLine(conn.ServerVersion);

foreach (var cube in conn.Cubes) {
Console.WriteLine(cube.Name);
}
conn.Close();
}
} catch (Exception ex) {
Console.WriteLine(ex.ToString());
} finally {
Console.WriteLine("Press any key");
Console.ReadKey();
}
Это не удалось (оригинал был на португальском языке, я попытался его перевести):
Microsoft.AnalysisServices.AdomdClient.AdomdErrorResponseException: у пользователя «MYCOMPANY\my.user» нет доступ к базе данных «MyDB» или базе данных не существует.
Обратите внимание, что в ошибке указано «MYCOMPANY\my.user», который я использую для входа на свой компьютер с Windows, а не «служба». .пользователь". После некоторого поиска в Google я обнаружил, что ADOMD.NET игнорирует UID и PWD и использует текущего вошедшего в систему пользователя для аутентификации запросов к SSAS. Чтобы обойти эту проблему, было предложено выдать себя за service.user, что я и попытался сделать следующим образом (это было создано с помощью ИИ, но выглядит аналогично другим сообщениям):

Код: Выделить всё

class Program
{
// Correct P/Invoke for LogonUser
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto, BestFitMapping = false, ThrowOnUnmappableChar = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword,
int dwLogonType, int dwLogonProvider, out IntPtr phToken);

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public extern static bool CloseHandle(IntPtr handle);

public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;

public static void Main()
{
string username = "service.user";
string password = "pass";
string domain = "mycompany";

IntPtr tokenHandle = IntPtr.Zero;

// Use LogonUser to authenticate the other user
bool success = LogonUser(username, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, out tokenHandle);

if (success)
{
// Create a WindowsIdentity using the token
using (WindowsIdentity identity = new WindowsIdentity(tokenHandle))
{
// Run code as the impersonated user
WindowsIdentity.RunImpersonated(identity.AccessToken, () =>
{
try
{
// Open the AdomdConnection under the impersonated user's context
using (AdomdConnection conn = new AdomdConnection("Data Source=bi.mycompany.com; Initial Catalog=MyDb"))
{
conn.Open();
Console.WriteLine("Connection opened successfully as " + identity.Name);
Console.WriteLine(conn.ServerVersion);

}
}
catch (Exception ex)
{
Console.WriteLine("Failed to connect: " + ex.Message);
}
});
}
// Clean up: Close the token handle
CloseHandle(tokenHandle);
}
else
{
Console.WriteLine("LogonUser failed. Error: " + Marshal.GetLastWin32Error());
}
}
}
На этот раз ошибка была:
Необработанное исключение. System.IO.FileNotFoundException:
Имя файла: «Microsoft.AnalysisServices.AdomdClient, Version=19.86.2.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91»
Я попробовал предоставить разрешение на чтение и Выполните разрешения для service.user в моей папке .nuget, как предложено здесь, но возникла та же ошибка.
Можно ли программно подключиться к SSAS с другим пользователем так же, как я могу подключиться используя Excel?
Кроме того, этот код в конечном итоге будет работать на компьютере с Linux, будет ли он там работать?

Подробнее здесь: https://stackoverflow.com/questions/790 ... dows-login
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Использование Pyadomd с Mac (или альтернативный способ запроса SSAS)
    Anonymous » » в форуме Python
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Не в состоянии выполнить DAX на PowerBI в .NET через ADOMD CLIENT
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Не в состоянии выполнить DAX на PowerBI в .NET через ADOMD CLIENT
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Подключитесь к веб -сервису Essbase Cubes с помощью Python (ADOMD)
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Android: Не удалось подключиться: невозможно подключиться к удаленному серверу Frida: закрыто.
    Anonymous » » в форуме Android
    0 Ответы
    110 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»