![]() |
|
Модераторы: gambit |
![]()
|
|
| NURMS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.4.2007 Репутация: нет Всего: нет |
Народ привет.
Есть таблица, где хранятся логин, пароль, ну и допустим права доступа: CREATE TABLE Users ( Login VARCHAR(15) NOT NULL PRIMARY KEY, Password VARCHAR(10) NOT NULL, Access_Level CHAR(1) CHECK(Access_Level IN('1', '2', '3','4')) ) К базе я цеплялся из C# так:
Теперь мне нужно сделать, чтобы получить доступ тогда, когда вводятся логин и пароль. Теперь думаю будет следующее. Коннекшен устанавливается, но сервер не обрабатывает запросы, пока не вводятся логин и пароль. А логи и пароль хранятся в таблице Users. Проверив пароль сервер уже даёт доступ. Где-то так: ATHORITY ACC GRANT RETREIVE {.....} ON ... TO ( SELECT Login FROM Users WHERE Access_Level = '1' ) Но я не пойму кем является для сервера тот, кто коннектнулся к базе, но ещё не ввёл логин, пароль. И как этому "кто-то" закрыть права на любые запросы к базе. Может есть метод лучше? |
|||
|
||||
| v2v |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1620 Регистрация: 20.9.2006 Где: Киев Репутация: нет Всего: 56 |
никем. ты не должен давать доступ к бд пока пользователь не ввёл логин пароль. просто постоянно должно светится окошко: введите , лоигин пароль или нажмите выход. |
|||
|
||||
| swordfishik |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 23.1.2008 Репутация: нет Всего: нет |
может это тебе поможет
вобщем принцип работы проверяется в таблице подходящие данные ПВД и ЛОГИН, если такие есть то открывает определенную форму ТАБЛИЦА create table USERS (Nomer_poporadku int identity(1,1) primary key, Login varchar(10), PWD varchar(15)) |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
И не совсем всё так..
Есть два варианта авторизации пользователей БД. Судя по приведенным примерам, вы используете авторизацию по учетной записи (плюсы и минусы метода..). Второй способ, когда вы задаёте роли и пользователей БД, а также ограничения и права (плюсы и минусы..). При этом, втором способе, и можно как раз назначать права (или снимать) вплоть до работы с конкретными записями таблиц. (То же самое можно сделать и для первого варианта авторизации, но обычно этим мало кто заморачивается). Приведенный в задаче вариант задания логинов и паролей используется для авторизации на уровне логики приложения (то же самое можно сделать и в первом абзаце, но для этого нужна сетевая база и время, чтобы в этом разобраться). На уровне логики приложения ты сам при создании кода пропичываешь "условные" роли и права, согласно которым уже и формируешь, например, список справочников, которые зарегиный пользователь может редактировать, только просматривать или вообще не имеет к ним доступа. При этом ты уже подключился к БД с использованием авторизации по учетной записи. А дальнейшие два варианта твоей авторизации, запрашивать логин с паролем в начале работы программы или после загрузки стартовой формы (или окна MDI-родителя), ты выбираешь сам. Не суть важно.
Любые права ты ему не закроешь Это сообщение отредактировал(а) akizelokro - 18.2.2008, 09:19 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
я неправ. формулировка точнее, - "которой ты пользуешься, но не подозреваешь об этом". -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| NURMS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.4.2007 Репутация: нет Всего: нет |
Я хочу чтобы проверка логина и пароля происходила не на форме C#, а отправлялись SQL серверу и тот уже после проверки давал доступ, и вырубал, если не верно. Т.к. допустим юзер, который "не юзер" коннектнулся, а вместо того запроса, который указан в форме на С#, отправит свой запрос, как-то взломав форму или своей написанной программой.
|
|||
|
||||
| vretsky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 29.10.2007 Репутация: нет Всего: нет |
настрой в SQL доступ к таблице Users, только для своих
вернее не только к таблице Users но наверное и ко всей БД. только доступ на SELECT для Users тебе полюбому прийдется оставить для всех учетных записей юзеров твоего проекта. таким же образом можно достаточно гибко настроить доступ к таблицам ,вьюхам и даже полям. тогда не понадобится таблица Users, a аунтификация будет осуществлятся SQL сервером. морочно зато надежно. и рекомендую пароли в Users хранить в зашифрованном виде. Добавлено через 9 минут и 27 секунд хотя тебе крокодил все это уже подробно описал, че не понять? для того чтобы считать данные из Users нужно иметь права на SELECT из таблицы Users для данной учетной записи (или там группы), которая ничего общего с логином из Users не имеет. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
Ну вот, более- менее определились. Тебе с этим вопросом не в С#, а в "Базы данных", где ты должен спросить, как администрировать твою сетевую БД (создание ролей и пользователей). Если ты согласен пойти по этому варианту, то твою таблицу Users нужно удалять и в подключении менять вид авторизации с учетной записи на непосредственное указание логина\пароля. Если ты подобным не занимался, времени уйдет порядком. Зато интересно! PS. Прежде чем грохать таблицу Users, убедись, что ты работаешь с сетевой БД и у тебя прав хватает на администрирование твоего экземпляра БД. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| NURMS |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 20.4.2007 Репутация: нет Всего: нет |
Кстати о шифровании. Я тут пробовал зашифровать при вводе, где-то так:
INSERT INTO Users VALUES (EncryptByPassPhrase('EncryptPass', 'Login'), EncryptByPassPhrase('EncryptPass', 'Password')) Но он вместо обычного 0x05454sdasda64ds8f46d54sf6df8h4g65h, туда записал какой-то маленький мерзкий прямоугольник, и с расшифровкой что-то не катит. И, как я понял, эту шифровку можно применять только к отдельным кортежам, а чтобы зашифровать столбец, создают ещё один столбец, и туда поочереди вгоняют уже зашифрованные. Нет ли какой-нибудь функции для "глобального" шифрования на уровне атрибутов?Да ещё алгоритм кодирования AES_256 и ниже не работают на данной системе Windows. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
статьи 5.7, 5.8 Билла Гамильтона "ADO.NET Сборник рецептов"
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| IApple |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 36 Регистрация: 17.1.2008 Репутация: нет Всего: нет |
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |