Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск части кода от имени. / 4 сообщений из 4, страница 1 из 1
30.05.2014, 09:48
    #38656671
s_Lady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск части кода от имени.
Приветствую!
Есть элементарная задачка: после определённой обработки данных в MSSQL, данные должны выгружаться по расписанию в .csv.
10 строчек кода, и всё бы хорошо, НО:
Запуск самой проги как и хранимых процедур MSSQL происходит под единой доменной учёткой, формата авторизации ( домен \учётка), на сервере в домене, где несговорчивые админы. Файлик .csv находится на сервере вне домена, где админы тоже злые, доступ к папке с файлом имеет локальная user-учётка формата ( сервер \учётка). Сразу поясню, с правами доступа ничего изменить нельзя, только в исходнике прописывать.
Вопрос: Как правильно запустить только кусок StreamWriter от имени другого пользователя?

Из той информации что читала, надо создавать процесс, его запускать от имени, передавать поток в процесс, короче не догоняю я, как это сюда привязать правильно.

Код: 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.
    class Program
    {
        static void Main(string[] args)
        {
           
            using (SqlConnection con = new SqlConnection(@"Data Source=...;Initial Catalog=...;Integrated Security=True;Connection Timeout=60"))
            {

                try
                {
                    con.Open();
                    SqlCommand CTCUCM = new SqlCommand("BaseForCUCM", con);
                    CTCUCM.CommandType = CommandType.StoredProcedure;
                    CTBCUCM.ExecuteNonQuery();
                    con.Close();

                    string query = "select  * from ...";
                    SqlCommand command = new SqlCommand(query, con);
                    con.Open();
                    SqlDataReader SQLreader = command.ExecuteReader();
                    StreamWriter ditail;
                    ditail = new StreamWriter("//10.5.5.5/Phone/Phone.csv", false, Encoding.Default);
                    ditail.WriteLine(@"FIO;Filial;Post;Phone1;Phone2;Phone3;Phone4;Phone5");
                    if (SQLreader.HasRows)
                    {
                        while (SQLreader.Read())
                        {
                            ditail.WriteLine(@"" + SQLreader.GetValue(0).ToString() + ";" + SQLreader.GetValue(1).ToString() + ";" + SQLreader.GetValue(2).ToString() + ";" + SQLreader.GetValue(3).ToString() + ";" + SQLreader.GetValue(4).ToString() + ";" + SQLreader.GetValue(5).ToString() + ";" + SQLreader.GetValue(6).ToString() + "");      
                        }
                    }      
                    else
                   {...}
                    ...
                    {
...
Рейтинг: 0 / 0
30.05.2014, 11:02
    #38656770
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск части кода от имени.
s_Lady,

..ищите по System.Diagnostics.Process.Start() и "net use" ... Хотя, может надежней было сохранять файл на первом сервере, а потом другим заданием копировать ... Но это по вкусу ...
...
Рейтинг: 0 / 0
30.05.2014, 11:17
    #38656796
carrotik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск части кода от имени.
s_Lady,

...если будете пользоваться данным вариантом, имейте в виду, что net use отрабатывает не мгновенно, поэтому, прежде чем туда стримить, надо делать паузу или проверку типа if Folder.Exists или что-то подобное ...
...
Рейтинг: 0 / 0
30.05.2014, 12:50
    #38656925
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запуск части кода от имени.
s_Lady,

1. http://www.codeproject.com/Articles/125810/A-complete-Impersonation-Demo-in-Csharp-NET - и, если этого не хватит, гуглить по .net impersonation
2. Рассмотреть вариант запуска ХП с директивой execute as user | login (если вызывающая сторона входит в серверную роль securityadmin). Как еще один вариант - поместить C#-код в CLR-сборку, и тот же execute as. И еще как вариант - ХП, которая делает всё нужное, и с директивой execute as (созданная пользователем, который securityadmin). Для этого хорошо подходят users without login .
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Запуск части кода от имени. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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