Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Вниз

Разграничение полномочий в приложении, работающем с БД   Найти похожие ветки 

 
BlackCat   (2007-10-05 16:27) [0]

Доброго времени суток всем!
Пише приложение, работающее с БД на MS SQL.
Работать с ним будут несоклько человек, у которых разные права должны быть. При разработки структуры БД пришел к выводу, что буду использовать логины SQL-сервера.
Можно конечно оставить свойство Login Prompt включеным, чтобы запрашивался имя и пароль, но это как-то некрасиво будет. Хочу свое окно, чтобы там вводить имя и пароль, а вот как их проверить и пускать или не пускать пользователя, что-то дойти не могу. Может кто уже делал чего подобного, помогите, или просто поделитесь мыслями, потому что просто не представляю, как это всё сделать...


 
clickmaker ©   (2007-10-05 16:35) [1]


> вот как их проверить и пускать или не пускать пользователя

так если логины сервера, то это его задача будет


 
BlackCat   (2007-10-05 16:42) [2]

не, это понятно, что это задача сервера, и он проверит.

Просто если к примеру ADOConnection1->LoginPrompt = true;, то это понятно.
ADOConnection1->ConnectionString = ".........."; - это тоже понятно.

Поставлю вопрос по другому:

Если у меня есть форма для вода имени пользователя и пароля
(не ЛогинПромпт = тру!!!!!), то каков будет механизм для проверки???
Это какой-то запрос к БД на проверку имени пользователя и пароля??? В это случае с каким имененм и паролем коннектиться к базе, чтобы проверить введенные пользователем данные??? Из-под sa будет как-то "неправильно" (c).


 
Ega23 ©   (2007-10-05 16:48) [3]


> Это какой-то запрос к БД на проверку имени пользователя
> и пароля???


Нет, это попытка создать коннект.
try
 ADOConnection.Connected := True;
except
 // Анализируем ситуацыйу
end;


 
sniknik ©   (2007-10-05 17:34) [4]

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

или ты в базе в свою табличку юзеров/паролей забил? тогда не морочь мозги людям, это не логины сервера с ними не подконектишся.


 
stone ©   (2007-10-05 17:34) [5]

У TADOConnection есть два метода
procedure Open; overload;
procedure Open(const UserID: WideString; const Password: WideString); overload


 
MOA ©   (2007-10-06 03:11) [6]

>свое окно, чтобы там вводить имя и пароль,
И будете прокляты сопровождаюшими.
Да и на самом деле - какого рожна Вам впилось делать свою кривую (по любому - кривую) системы "типа безопасности"? Механизмов MSSQL для ваших офигительных секретов не хватает?
Тогда уходите с MSSQL на "Вася пупкин и Ко" -ну уж Вася то - по любому круче, чем MS, который, есно масдай - не чета Пупкину.
Блин, Вам чё - интегрированной системы не хватает? А на чём у вас клиенты - на оголимом досе/униксе? Если так - перо вам в спину...


 
Jeer ©   (2007-10-08 10:32) [7]

MOA ©   (06.10.07 03:11) [6]

Ты не прав и не прав кардинально.
Системы безопасности сервера может и хватает, но не хватает системы управления доступом к бизнес-процессам, если часть их или даже все находятся на клиенте. А такое тоже бывает и не так редко.


 
Ega23 ©   (2007-10-08 12:18) [8]


> Системы безопасности сервера может и хватает, но не хватает
> системы управления доступом к бизнес-процессам, если часть
> их или даже все находятся на клиенте. А такое тоже бывает
> и не так редко.


+1


 
Lamer666   (2007-10-18 00:41) [9]

Ну так к чему сошлись то?


 
Reindeer Moss Eater ©   (2007-10-18 09:31) [10]

Хочу свое окно, чтобы там вводить имя и пароль, а вот как их проверить

Это эабота сервера, а не твоя.


 
Jeer ©   (2007-10-18 11:40) [11]


> Хочу свое окно, чтобы там вводить имя и пароль, а вот как
> их проверить


Используй режим windows autotentification, тогда вход в компьютер и будет логином к MS SQL


 
Lamer666   (2007-10-18 12:59) [12]

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


 
Reindeer Moss Eater ©   (2007-10-18 13:03) [13]

тебе нужен сложный набор предложений?


 
Reindeer Moss Eater ©   (2007-10-18 13:05) [14]

сказано же русским по белому:
рисуй свою форму ввода пароля, если дефолтная не нравится.
убирай логинпромпт и вставляй имя и пароль в строку подключения.
а правильный пароль или нет - сервер разберется без тебя.


 
Lamer666   (2007-10-18 13:08) [15]


> убирай логинпромпт и вставляй имя и пароль в строку подключения

Чьё имя то вставлять? Список позователей чей? Windows-а? Ms SQL-а?


 
Reindeer Moss Eater ©   (2007-10-18 13:10) [16]

Тормоз что-ли?
Ты свою форму ввода имени/пароля зачем рисовал?
не для того, что бы получить имя и пароль?


 
Reindeer Moss Eater ©   (2007-10-18 13:11) [17]

Список позователей чей?

При разработки структуры БД пришел к выводу, что буду использовать логины SQL-сервера.


 
Lamer666   (2007-10-18 13:13) [18]

Anatoly Podgoretsky ©   (17.10.07 20:42) [1]
MS SQL позволяет назначать любые права для конкретных пользователей.
Чем основано желание использовать Аккаутны MSSQL, учитывая, что Микрософт предупреждает, что в будущих версиях это может быть убрано совсем. Пока существует для совместимости с MS SQL 6.5

тут http://delphimaster.net/view/3-1192637656/


 
Reindeer Moss Eater ©   (2007-10-18 13:21) [19]

Ну значит никакой формы ввода пароля вообще не надо.
Ни своей ни дефолтной.


 
Lamer666   (2007-10-18 13:23) [20]

Классно! : ) Вот BlackCat обрадуеться!


 
Jeer ©   (2007-10-18 14:33) [21]

Lamer666   (18.10.07 13:13) [18]

> MS SQL позволяет назначать любые права


Полный бред.


 
zdm77   (2007-10-18 16:07) [22]

в СВОЕЙ форме в принципе всё хорошо... логин, полное имя(для отчетов где нибудть пригодится), пароль...вот тут засада, хранить его в "открытую" в БД? Дык любой лох вскроет.
Юзать логины самой БД-грамотно, но не во всем удобно


 
Sergey13 ©   (2007-10-18 16:12) [23]

> [22] zdm77   (18.10.07 16:07)

Какая связь между "своей формой" и "логинами БД" и что тут неудобно?


 
Jeer ©   (2007-10-18 16:33) [24]


> zdm77   (18.10.07 16:07) [22]


Шифруй пароль в базе + hash, чтоб не подменили.


 
zdm77   (2007-10-18 17:36) [25]


> Sergey13 ©   (18.10.07 16:12) [23]

Своя форма и ЛОгин БД-между ними было "или", не правильно видимо выразился


 
zdm77   (2007-10-18 17:38) [26]


> Jeer ©   (18.10.07 16:33) [24]

прошу прощения у автора, но тема интересная. А как шифровать пароли?


 
Jeer ©   (2007-10-18 18:29) [27]


> zdm77   (18.10.07 17:38) [26]


?
Шифровальщиком:))


 
Lamer666   (2007-10-18 19:15) [28]

И так кто нибудь конкретный прммер ВЫЛОЖИт что как делать?


 
Anatoly Podgoretsky ©   (2007-10-18 20:26) [29]

> Lamer666  (18.10.2007 19:15:28)  [28]

Зачем хранить пароли в базе, сервер это уже сделал.


 
Lamer666   (2007-10-18 22:05) [30]


> Anatoly Podgoretsky ©   (18.10.07 20:26) [29]

Правильно ли я понял!
Я создаю в MSSQL->Security->Logins пользователя из ДОМЕНА,даю ему права... а потом он логинется на какойнибудь машине в СЕТИ и идет в MS SQL. MS SQL его узнает и дает те права, которые мы ему дали, правильно?


 
Anatoly Podgoretsky ©   (2007-10-18 22:09) [31]

> Lamer666  (18.10.2007 22:05:30)  [30]

Права надо давать не логинам, а пользователям.


 
Lamer666   (2007-10-18 22:11) [32]

Ну так создовая ЛОГ мы ведь выбираем конкретного пользователя из ДОМЕНА...или это не то же самое?


 
Jeer ©   (2007-10-19 15:32) [33]

Я поясню, что имел в виду, говоря о дополнительной системе аудита пользователей.

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


 
MOA ©   (2007-10-20 14:06) [34]

Прошу прощения за запальчивость... :(
Блин, ребята. Я вижу только одну (1) причину юзать механизм аутентификации SQL  - если предполагаются клиенты не-на Win. Тем более какой-то самопал.
Ну вот зачем заставлять юзеров помнить бесчисленные пароли к самопальным "типа секретным" АРМ-ам? Чтобы убедиться, что они будут их записывать на стикерах под монитором?
Ну ведь есть такие "роли". Ну ведь ими очень удобно пользоваться. Ну зачем, скажите бога ради, выдумывать своё - и думать, что выдумка круче чем разработка серъёзной фирмы (которая, конечно же маздай)?


 
MOA ©   (2007-10-20 14:21) [35]

2Jeer
>Как только мы вводим понятия "системный администратор" и "администратор системы" - становится понятным, что правами управлять чужими правами придется делится.
А GRANT - этого не позволяет?
>Для такого случая вводится понятие "администратор системы", который пользуясь дополнительной системой аудита управляет пользователями в указанном разрезе.
И опять - GRANT -а не хватает....
>Для того, чтобы системный администратор не мог "безнаказанно" менять установки и "узнавать" пароли на вход в программную систему, пароли шифруются и запись подписывается хэш-функцией.
В интегрированной модели эти вопросы не стоят выеденного яйца.


 
DeadMeat   (2007-10-21 10:24) [36]

Я конечно не телепат, но подозреваю, что автор не совсем правильно сформулировал вопрос.
ИМХО, он имел ввиду другое.
Как я понял, он хочет после Open(Login, Password) узнать, что юзер не прошел аутентификацию. Т.е. как получить именно этот ответ от сервера?
Т.е. по сути:

> [3] Ega23 ©   (05.10.07 16:48)

Показал как решить проблему, осталась видать другая. Как узнать, что именно логин/пассворд не правильные, а не другая какая-либо ошибка.
Автор... я прав?
Если прав, то по почте пожалуйста бутылку отменного.... кефира. 2,5%


 
Anatoly Podgoretsky ©   (2007-10-21 11:48) [37]


> Как я понял, он хочет после Open(Login, Password) узнать,
>  что юзер не прошел аутентификацию.

Будет исключение


 
DeadMeat   (2007-10-21 22:00) [38]

> [37] Anatoly Podgoretsky ©   (21.10.07 11:48)
>
> > Как я понял, он хочет после Open(Login, Password) узнать,
>
> >  что юзер не прошел аутентификацию.
>
> Будет исключение

Это понятно.
Пример:
создали новый логин с новой ролью с новыми правами. Чегото гдето забыли поставить (права на одну из процедур например) и в итоге при подключении просиходит исключение. Если его не обрабатывать, то получится, что при любой ошибке, программа будет считать, что не верные логин или пароль.
Я просто почему спрашиваю, у себя сделал так. Просто пишу общую фразу "ДОСТУП ЗАПРЕЩЕН". А если надо показать реальное сообщение, то при удержании клавиши Shift оно показывается. Но все таки хотелось бы узнать, как обработать именно ошибку, типа "не верный логин или пароль"?


 
Jeer ©   (2007-10-22 15:10) [39]


> MOA ©   (20.10.07 14:06) [34]


> MOA ©   (20.10.07 14:21) [35]


Значит ты еще мало каши кушал.

Во многих случаях, аудит  бизнес-процессов и сопровождение - отделенные вещи. GRANT не поможет в реализации ограничений на стороне клиента, тем более в ограничении пользовательского интерфейса.


 
Павел Калугин ©   (2007-10-31 14:02) [40]

> [34] MOA ©   (20.10.07 14:06)

Все понимаю.
Но как штатными средствами сервера задать следующее ограничение:
   Вася Пупкин может смотреть только те документы которые создал сам
   Петя Батарейкин - только то что создал Вася Пупкин и он сам
   Федя Курочкин - документы созданные всеми пользователями



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2008.03.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.009 c
2-1203579448
Quart
2008-02-21 10:37
2008.03.23
QRLabel


2-1203775292
KJ13
2008-02-23 17:01
2008.03.23
Загрузка процессора


2-1204014682
emik
2008-02-26 11:31
2008.03.23
Регистрационій код


2-1203705791
Eero
2008-02-22 21:43
2008.03.23
Как передать неявно созданный объект в процедуру?


15-1202636826
@!!ex
2008-02-10 12:47
2008.03.23
Что за группа? Что за трэк?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский