Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Delphi+sql server 2000  (Прочитано 13472 раз)
0 Пользователей и 1 Гость смотрят эту тему.
iden
Гость
« : 19-02-2006 12:51 » 

Здравствуйте, уважаемые знатоки!
Моя схема: delphi->TTable,TQuery->ODBC->sql server 2000
Вопрос простой: почему то не получается добавить новую запись в таблицу через TTable.
Возникает ошибка отсутствия значения ключевого поля. Ввести это значение, я разумеется не могу - оно инкрементное.
Этой проблемы нет при использовании TQuery. В чем может быть дело?
Пока подозрения на какое-либо хитрое свойство TTable.
И еще один вопрос: как сделать авторизацию на сервере из клиента? Насколько я знаю инфа о пользователях лежит в одной из системных таблиц
на сервере. Но в которой именно? Достается она от туда, например, через хранимые процедуры. Верно?
Всем заранее благодарен за помощь.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 19-02-2006 17:39 » 

Ни в какие таблицы при авторизации на SQL Server лазать не нужно, да он и не даст. Авторизация происходит на этапе установки соединения. Авторизация может быть доменной, может быть обычной (логин, пароль). Параметры авторизации указываются в строке соединения.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
iden
Гость
« Ответ #2 : 20-02-2006 05:28 » 

Спасибо за ответ.
К примеру есть несколько пользователей с разными правами доступа.
В соответствии с правами, я организую интерфейс программы-клиента для него.
Делаю отдельную формочку с тремя полями: логин, пароль и роль.
Как вытащить эту инфу с сервера для анализа?
Или по другому - как вообще правильно организовать авторизацию на сервере.
Какие мысли есть по первому вопросу?
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 20-02-2006 13:15 » 

Цитата
Как вытащить эту инфу с сервера для анализа?
Или по другому - как вообще правильно организовать авторизацию на сервере.
Какие мысли есть по первому вопросу?
Сервер сам организует авторизацию, сам контролирует пользователей. Там можно создавать и пользователей с правами, роли с правами для групп пользователей. Назначать пользователям роли. Что запрещено, то не выполнится.

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

Вы же о двухуровневом приложении говорите, следовательно, у него 2 интерфейса: 1) пользователь-приложение, 2) приложение-SQL Server. Определитесь, какие задачи вы решаете, и как соотносится потребность авторизации с решением этих задач.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
iden
Гость
« Ответ #4 : 20-02-2006 14:39 » 

В общем, чтобы было понятно, опишу что должно быть.
Задача-разработать клиента для доступа к данным sql server по схеме Клиент-Сервер.
Аутентификация установлена на сервере. При запуске клиента появляется окно авторизации(объект TForm) пользователя с тремя полями(TEdit):
логин, пароль, роль. После ввода эти данные отправляются на сервер для подтверждения. Если сервер дает добро,
пускаем пользователя к БД в соответствии с его правами. По результату авторизации, я например могу заблокировать некоторые пункты меню.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 20-02-2006 15:42 » 

Цитата
Аутентификация установлена на сервере. При запуске клиента появляется окно авторизации(объект TForm) пользователя с тремя полями(TEdit):
логин, пароль, роль. После ввода эти данные отправляются на сервер для подтверждения. Если сервер дает добро,
пускаем пользователя к БД в соответствии с его правами. По результату авторизации, я например могу заблокировать некоторые пункты меню.
Введённые логин/пароль передаются серверу - он либо устанавливает соединение, либо нет.

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

Далее системная хранимая процедура sp_helpuser и связаные с ней помогут.

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

Если же предполагается динамически менять разрешения ролей, либо настройки задаются для каждого пользователя персонально, то задача усложняется. В крайнем случае проще будет пытаться выполнять действия и в случае ошибки принимать меры по её обработке - уведомлять пользователя "Доступ закрыт", блокировать какие-то элементы управления и т.д. - нежели выуживать все разрешения и запреты пользователя и вычислять, какие ХП и запросы нужно динамически модифицировать.

Лучше не городить огород, а трезво оценить достаточный уровень безопасности.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
iden
Гость
« Ответ #6 : 21-02-2006 05:01 » 

Не могли бы вы набросать код авторизации?
Имеем три поля на формочке(пусть TEdit) по кнопке ОК отправляем на проверку на сервер.
Есть к примеру 5 ролей и 5 пользователей, каждому своя роль.
Как это будет выглядеть в коде.
Заранее спасибо.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 21-02-2006 09:11 » 

Цитата
Не могли бы вы набросать код авторизации?
Во-первых, не хочу - это тривиально, а вы не хотите чуток подумать и открыть help.
Во-вторых, я с Delphi уже 2 года не работаю и под рукой не имею.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
iden
Гость
« Ответ #8 : 21-02-2006 09:57 » new

Было бы время, подумал бы и по хелпам бы полазил
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines