Олицетворение неизвестной ошибки при чтении файла удаленного доступа - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь выдать себя за пользователя в C#, чтобы подключиться к файлу Access на удаленном сервере. Нет разрешений на чтение или запись для всех пользователей, поэтому я решил выдать себя за пользователя с правами на выполнение запросов, которые мне нужны.

Проблема в том, что когда я выполняю олицетворение, все работает нормально (или кажется, ), но когда я делаю запрос и пытаюсь заполнить DataTable, выполнение закрывается (я делаю запрос в блоке try-catch, но не фиксирует ошибку).

Еще одна вещь это: когда я выполняю это на своем собственном компьютере, это работает, но когда кто-то пытается на другом компьютере с его собственным пользователем (и пытается выдать себя за моего пользователя, чтобы получить разрешение), это когда происходит сбой выполнения.

Может кто-нибудь help?

Блок олицетворения:

            try
            {
                Console.WriteLine("Original user: " + WindowsIdentity.GetCurrent().Name);
                System.Console.ReadLine();
                context.Enter();               
                Console.WriteLine("Impersonated user: " + WindowsIdentity.GetCurrent().Name);
                System.Console.ReadLine();
            }
            catch (Exception e)
            {
                System.Console.WriteLine("Error when impersonating user. \n Error: " + e.Message);
                System.Console.ReadLine();
                Environment.Exit(1);
            }

Функция ввода получается из msdn:

        [PermissionSetAttribute(SecurityAction.Assert, Name = "FullTrust")]
        public void Enter()
        {
            if (this.IsInContext) return;
            m_Token = new IntPtr(0);
            try
            {
                m_Token = IntPtr.Zero;
                bool logonSuccessfull = LogonUser(
                   m_Username,
                   m_Domain,
                   m_Password,
                   LOGON32_LOGON_INTERACTIVE,
                   LOGON32_PROVIDER_DEFAULT,
                   ref m_Token);
                if (logonSuccessfull == false)
                {
                    int error = Marshal.GetLastWin32Error();
                    throw new Win32Exception(error);
                }
                WindowsIdentity identity = new WindowsIdentity(m_Token);
                m_Context = identity.Impersonate();
            }
            catch (Exception exception)
            {
                // Catch exceptions here
                throw exception;
            }
        }

и код чтения Access:

            try
            {
                System.Console.WriteLine("Let's generate the adapter.");
                System.Console.ReadLine();
                PruebaIntegracionDataSetTableAdapters.ConsultaTableAdapter adapter = new PruebaIntegracionDataSetTableAdapters.ConsultaTableAdapter();
                System.Console.WriteLine("Adapter generated. Let's read the file.");
                System.Console.ReadLine();

                // this is the line that crashes and closes the execution
                adapter.Fill(dsIntegracion.Consulta);

                System.Console.WriteLine("File readed. Let's show the reaults.");
                System.Console.ReadLine();
                foreach (PruebaIntegracionDataSet.ConsultaRow fila in dsIntegracion.Consulta)
                {               
                    System.Console.WriteLine(fila.Apellidos);
                }
            }
            catch (Exception e)
            {
                System.Console.WriteLine("Access connection problems. \n Error: " + e.Message);
                System.Console.ReadLine();
                Environment.Exit(1);
            }

            System.Console.ReadLine();

Я попытался скопировать файл в локальную папку, и то же самое, когда другой пользователь пытается скопировать его. Если я не выполняю олицетворение, он показывает контролируемую ошибку: нет разрешений. Если я выполняю олицетворение, но другой пользователь не дает моим пользователям разрешения на запись в его собственной папке, это также показывает контролируемую ошибку: нет разрешений. Когда у олицетворенного пользователя есть все разрешения, необходимые для копирования из удаленной папки и записи в локальную папку при сбое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...