Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
llerik
Я так понял, задача просто сводится к получению двух полей из таблицы. Т.е. нужно написать запрос в базу типа
Код:
select password, admin
from login
where user = [имя_юзверя]
дальше на клиенте сверялся пароль с полученным и устанавливался флаг login.admin.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 11:02 03-02-2011 | Исправлено: Mextrom, 11:05 03-02-2011
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
llerik Хранить пароли в базе совершенно неправильно. Более правильно получить хэш пароля ( MD5 или SHA1), и уже его хранить в базе. А в программе при проверке логина тоже вычислять хэш, и сравнивать его с тем, что хранится в базе.


----------
Заслуженный SCOтовод, почетный SUNтехник и любитель Кошек

Всего записей: 17273 | Зарегистр. 13-06-2007 | Отправлено: 11:31 03-02-2011
llerik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
"Сверить" - это сравнить пароль введенный ползователем с паролем для выбранного логина, который хранится в базе.
 
vlary
Спасибо за совет, учту на будущее. А в данной базе, я думаю, это применять излишне, сама авторизация создается фактически как защита от дурака - не больше (как в анекдоте - "а че тут брать-то?" )
 
Mextrom
Флаг login.admin - это указатель на то, является ли пользователь администратором или простым смертным.
 
И так, на форме авторизации есть ComboBox1 для выбора имени пользователя и TextBox1 для ввода пароля, а так же кнопка. В кнопке, в методе Click должен быть примерно такой код:  

Код:
select password, admin
from login
where user = ComboBox1.Text
If password = TextBox1.Text Then
    If admin = 1 Then
        <некоторый набор действий для входа с правами админа>
    Else
        <некоторый набор действий для входа с правами юзера>
    End If
Else
    <какое-то сообщение об ошибке, думаю найду подходящую функцию>
End If
 

Верно ли я понял? Можно ли sql-запрос так вот просто записать в код и можно ли обращаться к результату этого запроса как к переменным, хранящим строковую информацию?

Всего записей: 8 | Зарегистр. 02-05-2008 | Отправлено: 16:34 03-02-2011
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
llerik
Невозможно получить что-либо из базы не залогинившсь. Если логин прошел, то все уже давно "сверено".  
Уже ведь известно, что user admin успешно прошел авторизацию. Значит и права подтверждены. Ничего более из базы запрашивать не надо.
В том же login вместо пасс я бы сделал поле usergroup и проверял бы только его. Тогда настраивать права для <некоторых наборов действий> можно более гибко и проще. И наборов таких можно иметь большее количество.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 17:25 03-02-2011 | Исправлено: dneprcomp, 17:32 03-02-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
llerik
Уточните задачу (и проблему). dneprcomp говорит о строке подключения к БД и о доступе к БД вообще, я так понял, что ваша таблица login (создана вами?) в базе служит для хранания данных для авторизации в вашем приложении, в котором после аутентификации вы хотите определить, является ли пользователь приложения админом или нет. У меня просто такое чувство, что мы о разных вещах говорим. Или я что-то не так понял.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 17:59 03-02-2011
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mextrom llerik

Цитата:
Дали задание перевести БД с FoxPro на SQL-server

Я так понял, что в FoxPro было необходимо именно таким образом проверять авторизацию по каким-то присущим FoxPro свойствам.  
Используя SQL Server, можно бы и отойти от устаревшей логики.

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 18:43 03-02-2011
llerik

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mextrom
Вы верно поняли, это аутентификация именно в приложении. Откровенно говоря как-то не задумывался о защите подключения к самой базе.
 
Опишу ситуацию.
База данных была изначально сделана с целью учета дипломных проектов, т.е. кто пишет, кто руководит и т.п.  
Защищать саму БД вне приложения, с помощью которого будет происходить работа с базой я не вижу большого смысла, да и само приложение, откровенно говоря, тоже, но авторизация в оригинале была, а моя задача перенести с фокса на скуль... Вотъ.
 
З.Ы. Базу на фоксе делал студент в качестве дипломного проекта, но делал, судя по качеству, в последний момент, так что почему авторизация такая - это риторический вопрос.
 
dneprcomp
Если БД будет работать на удаленном сервере и доступ к ней будет осуществляться через общественную локальную сеть (компьютерный класс в институте), то аутентификация будет осуществляется на этапе подключения к БД, т.е. пользователи и их пароли настраиваются на этапе установки и настройки sql-server. Верно?
Тогда получается, что какая-либо авторизация в приложении не имеет смысла вообще?
 
В связи с тем, что, чую, не придется делать авторизацию, а вопрос о запуске sql-запроса при нажатии на кнопку останется без ответа, задам его отдельно.
Запрос может быть написан непосредственно в процедуре Click или там должен быть только запуск запроса по его имени, а сам запрос должен быть уже в БД?
И, если можно, небольшой пример, чтобы синтаксис понять.

Всего записей: 8 | Зарегистр. 02-05-2008 | Отправлено: 18:44 03-02-2011 | Исправлено: llerik, 18:48 03-02-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
llerik
Раз я понял правильно, тогда запрос в базу можно сделать так (пишу на шарпе, в vb должно быть аналогично, пуcть кто-нибудь переведет/подправит):
Код:
string connectionString = "Server=[адрес_сервера]; Database=[имя_базы]; User=[имя_пользователя_БД]; Password=[пароль];"; // строка для подключения к БД
string query = "select password, admin from login where user = [имя_юзверя]"; // текст запроса
using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();
    using (SqlCommand command = new SqlCommand(query, connection))
    {
        command.CommandType = CommandType.Text;
        using (SqlDataReader reader = command.ExecuteReader())
        {
            if (reader.Read())
            {
                string pass = (string)reader["password"];
                bool isAdmin = ((int)reader["admin"] == 1);
            }
        }
    }
}
 
дальше можете делать с полученными данными, что хотите. Привел самый примитивный вариант. В принципе, никто не мешает использовать вместо текстового запроса хранимую процедуру (если такая есть в базе).

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 19:12 03-02-2011 | Исправлено: Mextrom, 19:19 03-02-2011
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mextrom
Чего-то я видимо просто не понимаю. Зачем нужна вообще повторная проверка, если мы все равно обращаемся к базе?
 
llerik
?
Цитата:
пользователи и их пароли настраиваются на этапе установки и настройки sql-server. Верно?  
Тогда получается, что какая-либо авторизация в приложении не имеет смысла вообще?
По моему, именно так. Юзеров все равно в базе создавать придется. Авторизация в приложении имеет смысел если это самое приложение не работает с базой. Двойная авторизация в данном случае близка к паранойе
В том же table login вместо полей login/пасс я бы сделал одно поле usergroup и получал бы по запросу только его. Хранил бы значение usergroup на все время работы програмы и сверял бы по возникновению необходимости.
 
 
 
Добавлено:
llerik
В принципе, при желании можно наверное сделать connection к базе без логина вообще или с единственным hard coded логином. Потом действительно передавать user log/pass
Но запросом
"select count(1) from login where password = [password] and admin = [admin]
Если вернуло 1, значит админ. Но все это как-то через то самое место

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 19:25 03-02-2011 | Исправлено: dneprcomp, 19:41 03-02-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp

Цитата:
Чего-то я видимо просто не понимаю. Зачем нужна вообще повторная проверка, если мы все равно обращаемся к базе?  

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

Цитата:
Юзеров все равно в базе создавать придется.

Для доступа к базе нужен всего один пользователь на все приложение или можно вообще использовать виндовую авторизацию (IntegratedSecurity=true). А в приложении пользователей может быть много. Что касается ролей пользователей в приложении, то все определяется логикой этого приложения (в данном случае видимо хватает админа и обычного пользователя).

Цитата:
Авторизация в приложении имеет смысел если это самое приложение не работает с базой.

Почему? Пользователь, созданный в базе, наделяется правами для работы с самой БД, т.е. чтение, изменения данных, создание таблиц и т.д. Пользователю приложения нужны совсем другие права, например, он должен иметь право заходить только на определенные страницы.

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 19:49 03-02-2011
dneprcomp



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mextrom
Каким образом связаны сайт и приложение?
1.Если это веб приложение, то сайт уже провел авторизацию. Хотя, если рассматривать веб-приложение как часть функций сайта, а не являющеся сайтом... Тогда да, согласен. Сценарий имеет право быть.
PS.Что-то мне подсказывает, что llerik не имел в виду работу с веб-приложением
 
2.Если это stand alone программа ведущая любой диалог с базой, то пусть сама и запрашивает базу. Зачем нужен сайт-посредник?
 
3.Если это stand alone программа НЕ ведущая любой диалог с базой, то можно с натяжкой согласиться с предложенной схемой. Хотя не понятно, каким образом сайт будет передавать данные этой програме.
 
Накрутить конечно можно все. Но целесообразной логики я все-таки не вижу. Да и передавать login/pass туда и обратно опять же не вижу нужды.(см. дополнение в предыдущем сообщении)

Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:03 03-02-2011 | Исправлено: dneprcomp, 22:15 03-02-2011
Mextrom



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dneprcomp
Да, я имел виду веб-приложение. ASP.NET, например. Если обобщать, то это может быть любое многопользовательское приложение.

Цитата:
Да и передавать login/pass туда и обратно опять же не вижу нужды.

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

Всего записей: 854 | Зарегистр. 30-03-2005 | Отправлено: 22:55 03-02-2011
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
Помогите разобраться с переписанием функции Delphi на C#
 
Delphi:

Код:
function HexToStr(Sou: string): string;
Var t:integer; sl:string;
begin
With TStringList.Create Do
try
Text:=StringReplace(Sou,#32,#13#10,[rfReplaceAll]);
sl:='';
For t:= 0 to Count - 1 Do
sl:=sl+Chr(StrToInt('$' + Strings[t]));
Result:=sl;
finally
Free;
end;
end;

 
Получилось пока только функцию StrToHex правильно переписать:
Delphi:

Код:
function StrToHex(source: string): string;
var i:integer; c:Char; ste:string;
begin
ste:='';
for i:=1 to Length(source) do
begin
c:=source[i];
ste:=ste+IntToHex(integer(c),2)+' ';
end;
result:=ste;
end;

 
C#:

Код:
        private void StrToHex(String source)
        {
            int i;
            Char c;
            string ste;
            {
                ste = "";
                for (i = 0; i < source.Length; i++)
                {
                    c = source[i];
                    ste = ste + ((int)c).ToString("X") + ' ';
                }
                richTextBox2.Text = ste;
            }
        }

 
В общем помогите с HexToStr разобраться.

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 08:41 07-02-2011
karakurt2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу подсказать на какие свободные или коммерческие компоненты стоит обратить внимание для создания приложения с пользовательским интерфейсом наподобии Microsoft Visio.

Всего записей: 733 | Зарегистр. 06-12-2003 | Отправлено: 10:02 07-02-2011
Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ZBEP

Цитата:
В общем помогите с HexToStr разобраться.

А что хоть эта функция должна делать? Если десятичную строку преобразовывать в шестнадцатиричную, то код ниже. Хотя судя по коду StrToHex это далеко не так.
Вариант простой:

Код:
private static string HexToString(string hexString)
        {            
            try
            {
                ulong tmp = Convert.ToUInt64(hexString, 16);
                return tmp.ToString();
            }
            catch (FormatException ex)
            {
                // Неверный формат исходной строки
            }
            catch (OverflowException ex)
            {
                // Переполнение  
            }
            return "Ошибка";
        }

 
 
Добавлено:
karakurt2

Цитата:
Прошу подсказать на какие свободные или коммерческие компоненты стоит обратить внимание для создания приложения с пользовательским интерфейсом наподобии Microsoft Visio.

Именно чтобы схемы рисовать? Произвольного вида или под что-то определенное?

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 18:13 07-02-2011 | Исправлено: Omicron_Persey_8, 18:34 07-02-2011
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Omicron_Persey_8, спасибо, но что-то не так работает..
Надо к примеру строку "abcd" преобразовать в Hex, т.е. "61 62 63 64" и обратно.
Вот посоветовали сделать так:

Код:
        static private string HexToStr(string sIn)
        {
            var sb = new System.Text.StringBuilder();
            string[] sArr = sIn.Split(new char[1] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            sb.Append(string.Join("", sArr.Select(b => ((char)(Convert.ToSByte(b, 16))).ToString()).ToArray()));
            return sb.ToString();
        }
 
 
        static private string StrToHex(String sIn)
        {
            var sb = new System.Text.StringBuilder();
            sb.Append(string.Join(" ", sIn.ToCharArray().Select(b => ((int)b).ToString("X")).ToArray()));
            return sb.ToString();
        }

Но тогда при попытку преобразования Рус. символов из Hex -> String, вылетает ошибка.
 
Еще для ASCII нашел такой код:

Код:
private void StrToHex(String sIn)
        {
            foreach (byte b in ASCIIEncoding.ASCII.GetBytes(sIn))
            richTextBox2.Text += b > 15 ? String.Format("{0:X} ", b) : String.Format("0{0:X} ", b);
        }

Но теперь HexToStr не правильно воспринимает Рус. символы (кодировку).
Например получается:
StrToHex("й") = "3F"
HexToStr("3F") = "?"

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 20:09 07-02-2011
karakurt2



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Omicron_Persey_8, да схемы обустройства месторождения.  

Всего записей: 733 | Зарегистр. 06-12-2003 | Отправлено: 00:17 08-02-2011
Omicron_Persey_8



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
karakurt2
Вот такого добра мне не попадалось.

Всего записей: 282 | Зарегистр. 02-09-2007 | Отправлено: 17:48 08-02-2011
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребяте у мну простой ВЦФ в службе. Но я немогу предупредить клиента что он в отрубе. На комаду убить службу я получаю событие OnStop и делаю так как в коде. Но видимо когда я гашу srvHost - клиенты не успевают ничего получить. Хотелось бы гамотно - хост без ошибок обычно и клиент без ошибок. Кто знает куда копать?

Код:
        protected override void OnStop()
        {
            if (srvHost != null)
            {
                LogWriter.Write("Завершаем хостинг сервиса", LogLevel.Warning);
                try
                {
                    wcfService.NotifyAllClients(Notification.System, NotCode.CloseConnect);
                            /// Тут!!!
                    srvHost.Close();
                    LogWriter.Write("Успешно", LogLevel.Report);
                }
                catch (Exception e)
                {
                    LogWriter.Write("Ошибка при завершении хостинга сервиса: " + e.Message, LogLevel.Error);
                }
            }
        }

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 20:57 08-02-2011
ZBEP



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Чет я совсем запутался с этим Encoding XD
Как мне сделать так, что бы StrToHex делала из "Слово" -> "D1 EB EE E2 EE", а не "421 43B 43E 432 43E" или "D0 A1 D0 BB D0 BE D0 B2 D0 BE" ?

Всего записей: 186 | Зарегистр. 09-04-2009 | Отправлено: 23:24 08-02-2011
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование в среде .NET (ASP.NET,ADO.NET) на C#/VB.NET


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru