Sql Server и Visual C++ Builder

M!sty

Новичок
Излагаю ситуацию:
в Builder C++ пишется приложение, позволяющее работать с базой данных SQL.
В самом SQL заданы пользователи с разными правами (уровень доступа, права чтения, изменения, удаления, запуска скриптов),
НО база запускается от учётной записи администратора, запрос имени пользователя/пароля при старте отсутствует напрочь.

В чём может быть проблема? Какие настройки следует смотреть?
Спасибо.

вопрос от snzStorm_ru
 

Mike22

Местный
А в чём проблема то?

И зачем вам при старте сервера запрос имени/пароля??? Что он вам даст? :D

Похоже вы немного "не догоняете" схему клиент-сервер и методы обеспечения безопасности и разграничения доступа в ней.
Без обид.
:D
 

snzStorm_ru

10L 9R
Сервер запускает администратор, с этим проблем никаких. Сервер может быть настроен и под аутентификацию от учётной записи ОС, и от внутренней учётной записи SQL.

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

Так в чём же может быть проблема? :D
 

PMAP

Пользователь
в Builder C++ пишется приложение, позволяющее работать с базой данных SQL.
В самом SQL заданы пользователи с разными правами
...прога изначально запускается с админским уровнем доступа без запроса имени/пароля...
Банальный ответ. Если прога запускается с админскими правами (автоматом), то ее нужно переделать так, чтобы она подключалась к серверу SQL с определенными именем и паролем (запрашивала у пользователя или как-то иначе)...
Хммм, а может Вы не знаете как это сделать? Тогда внимательней изучите интерфейс библиотеки, которая осуществляет подключение.

И ещё. Что это такое "Visual C++ Builder"?
Может быть "Miscrosoft Visual C++" или "Borland C++ Builder".
 

snzStorm_ru

10L 9R
В чём может быть проблема? Какие настройки следует смотреть?
нужно переделать так, чтобы она подключалась к серверу SQL с определенными именем и паролем (запрашивала у пользователя или как-то иначе)...
Логично :( за этим и спрашиваю, собственно.

Тогда внимательней изучите интерфейс библиотеки, которая осуществляет подключение.
Посмотрю, спасибо.

Может быть "Miscrosoft Visual C++" или "Borland C++ Builder".
Borland C++Builder 6.
__________________
Ещё вопрос.
Сервер запускает администратор под своей учётной записью, он же затем тестирует подключение и работу.
Возможно, поэтому запроса имени/пароля нет?

Как вариант, пробовать подцепиться под учётной записью пользователя, нет?
 

snzStorm_ru

10L 9R
Вариант: ADOConnection + ADOQuery - всегда идёт запрос имени пользователя и пароля.
Неудобно, если много таких ^^^ связей, но, в принципе, задача решается.
 

PMAP

Пользователь
Сервер запускает администратор под своей учётной записью, он же затем тестирует подключение и работу.
Возможно, поэтому запроса имени/пароля нет?
Нет. Скорее всего пользователь регистрируется под некой учетной записью, имеющей права администратора, установленной по умолчанию, для не идентифицированных подключаний. Например учетная запись гостя, или анонима.

Как вариант, пробовать подцепиться под учётной записью пользователя, нет?
Нет. У администратора должен быть полный доступ к серверу, он ведь получеловек - полубог. Поэтому он и регистрируется под учетной записью администратора.

Вариант: ADOConnection + ADOQuery - всегда идёт запрос имени пользователя и пароля.
Неудобно, если много таких ... связей, но, в принципе, задача решается.
А как иначе? Логика простая: подключаемся к серверу (ADOConnection), посылаем ему всякие запросы (ADOQuery), после работы закрываем соединение (тот же ADOConnection).
Кстати. Если используется SQL Server, то почему бы не воспользоваться SQLConnection.
Ну да ладно. В обоих ADOConnection и SQLConnection, есть понятие ConnectionString, это текстовая строка с параметрами подключения, в ней-то как раз и нужно указывать имя пользователя и пароль.

PS: Интересно - о каком SQL сервере говорим?
 

snzStorm_ru

10L 9R
Интересно - о каком SQL сервере говорим?
Microsoft SQL Server 2000.

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

Сервер запускает администратор под своей учётной записью, он же затем тестирует подключение и работу.
Возможно, поэтому запроса имени/пароля нет?

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

Mike22

Местный
PS: Интересно - о каком SQL сервере говорим?
Да, тут уже о чём только не говорили и чего только не нафантазировали. :)
А автор вопроса ни словом не обмолвился и никак не прокомментировал ни один ответ.

... Я хочу сделать так ...
А разве можно как-то по другому?
 

spk

Пользователь
Не поняли друг друга, похоже...
Я хочу сделать так: на одном сетевом компе администратор с админскими правами запускает сервер,
на другом компе пользователь с пользовательской учётной записью цепляется к базе.
И посмотреть, что будет.
Наверняка для строки подключения есть ее "построитель". Типа диалоговые окошки к какому серверу подключаться и каким образом.
Так вот на sql-сервере заведите уч. запись с аутентификацией самим sql-сервером (хотя эта возможность зависит от того как сервер установили :))
В "Построителе" найдите опцию что-то типа использовать уч. запись sql-сервера. таким образом получите строку подключения нужную. посмотрите как
она устроена. в принципе можно ее и ручками написать.
Про борландовский продукт немого знаю. сказал в теории. Думаю он умеет и напрямую к sql-серверу цепляться и через odbc. Во втором случае достаточно
вместо динамического формирования строки подключения настроить на клиенте odbc источник.
 

PMAP

Пользователь
Я хочу сделать так: на одном сетевом компе администратор с админскими правами запускает сервер,
на другом компе пользователь с пользовательской учётной записью цепляется к базе.
А разве можно как-то по другому?
Всё на одном компьютере можно делать. Разницы никакой. У сервера есть понятие - подключение, хоть это администратор или простой пользователь цепляется, у каждого свои права.
Ещё фраза смущает "администратор с админскими правами запускает сервер". При запуске сервера, права админа не нужны, а вот при управлении - нужны. И вообще, в автозапуске пусть стартует, чего с ним возиться. Это же сервер, он должен работать постоянно, в идеале.

И посмотреть, что будет.
Хммм... Может я тебе проще расскажу и тему закроем :)

Теперь по топику:
Попробуй из приложения подключиться к SQL серверу с каким-нибудь заведомо существующим пользователем (учетная запись на SQL сервере).
Далее посмотри на сервере активные соединения.
Далее три варианта:
- соединение с "заведомым" пользователем есть - всё ОК, топик решен.
- соединения с "заведомым" пользователем нет, но появилось с каким-то другим, которого небыло. Ищи "галочки" на сервере.
- соединения с "заведомым" пользователем нет и ничего небыло. Ошибка в твоей программе.

Да, тут уже о чём только не говорили и чего только не нафантазировали. ;)
:angry: Ещё до вопроса "В чем смысл жизни?" не дошли!
 

snzStorm_ru

10L 9R
А автор вопроса ни словом не обмолвился и никак не прокомментировал ни один ответ
вопрос от snzStorm_ru
У меня не всегда Инет есть, попросил отпостить даму. Поэтому топик к ней самой малое отношение имеет.

Так вот на sql-сервере заведите уч. запись с аутентификацией самим sql-сервером (хотя эта возможность зависит от того как сервер установили )
В "Построителе" найдите опцию что-то типа использовать уч. запись sql-сервера. таким образом получите строку подключения нужную. посмотрите как она устроена.
Уже в процессе, спасибо)

Ещё фраза смущает "администратор с админскими правами запускает сервер". При запуске сервера, права админа не нужны, а вот при управлении - нужны. И вообще, в автозапуске пусть стартует, чего с ним возиться. Это же сервер, он должен работать постоянно, в идеале.
Поставил настройку, что только админ может запускать сервер (одно из условий приложения которое пишу),
из автозапуска убрал - памяти на машине не слишком много =/

Далее три варианта:
- соединение с "заведомым" пользователем есть - всё ОК, топик решен.
- соединения с "заведомым" пользователем нет, но появилось с каким-то другим, которого небыло. Ищи "галочки" на сервере.
- соединения с "заведомым" пользователем нет и ничего небыло. Ошибка в твоей программе.
Буду прорабатывать, спасибо!
 

snzStorm_ru

10L 9R
Итак:
на компе сделал учётные записи с правами "пользователь",
добавил их в SQL-сервере,
настроил и перепроверил права доступа,
поставил пимпу "запускать сервер при загрузке ОС",
перезагрузился,
вошёл под юзером,
запустил прогу - РАБОТАЕТ :)
с запросом имени и пароля и со всеми правами!

ВСЕМ, кто помог, огромная благодарность,
вопрос решился,
тему сохраняю себе на винт.
 

Mike22

Местный
Отлично, что у вас получилось то, чего вы добивались.

Но! Позволю ремарку.
Я (и множество экспертов по безопасности :) ) настоятельно рекомендую не смешивать пользовательские аккаунты с учётными записяями и правами доступа к БД.
Я понимаю, это удобно. Но это очень и очень небезопасно.
 

snzStorm_ru

10L 9R
Я (и множество экспертов по безопасности ) настоятельно рекомендую не смешивать пользовательские аккаунты с учётными записяями и правами доступа к БД.
Я понимаю, это удобно. Но это очень и очень небезопасно.
Понимаю, сам учусь по этому делу :)
Поэтому и проверял как авторизацию из-под пользовательского аккаунта, так и из-под учётной записи.
Всё ж хочется увидеть на практике и пощупать руками.
 
Сверху