|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Добрый вечер! С Oracle только начала "связываться". и есть вопросы. прочитала что есть здесь по интересующему меня вопросу, но оказалось, что то, что мне нужно узнать описано для "новичка" не совсем понятно. Потому прошу знатоков программирования на foxpro с использованием БД на oracle, если можно ответить на мой вопрос. подключаюсь с помощью SQLSTRINGCONNECT(...) через ODBC как делать выборки понятно. но вот нужно вывести в combobox колонку таблички oracle. тут все пишут об курсорадаптере. пожалуйста, объясните что это за "зверь", как его создать и использовать. потому как кроме того, что combobox можно просматривать, нужна еще и возможность добавлять/редактировать записи => обновлять табличку oracle. если можно то опишите принципы работы и команды. Заранее спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2010, 18:30 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
CursorAdapter - это класс. Чтобы понять, как он работает, попробуйте поставить себя на место разработчиков. Тогда Вы быстро "въедите" в его логику. Есть SQL-сервер. Есть клиентское приложение. Когда Вы делает запрос к SQL-серверу, Вы получаете некую выборку данных и копируете ее в клиентское приложение. Ключевым здесь является термин "копирование". Другими словами, то, что видит пользователь не есть то, что реально хранится на SQL-сервере. Пользователь видит некую копию данных. Соответственно и меняет он копию данных. А затем необходимо организовать процесс переноса изменений из копии в собственно SQL-сервер. Выборка из SQL-сервера осуществляется командой Select-SQL. Модификация данных на SQL-сервере осуществляется соответственно командами Insert-SQL, Update-SQL, Delete-SQL. Класс CursorAdapter позволяет до некоторой степени упростить процесс ручного написания соответствующих команд заменяя их набором настроек. Т.е. на сервер все-равно посылаются SQL-команды, просто программисту их писать не надо. Их "пишет" класс CursorAdapter. Что и как надо настривать поищите на этом форуме. Сделайте поиск по словам "CursorAdapter", "Remote View", "SqlExec" PS: Объект ComboBox - это объект только и исключиельно для выбора значения из списка. Использовать его для ввода значений в выпадающий список, который он же и отображает - не самое лучшее решение. Возможно, но лучше не надо. Вы просто не сможете отличить ввод нового значения от ошибки выбора. Как следствие - получите много мусора в данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2010, 19:22 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
oApp.gnConnectHandle = SQLStringConnect("DSN=OracleXE; UID=FVI; PWD=fvi; DBQ=XE") *** Выборка lnSetprop = SQLSETPROP(oApp.gnConnectHandle, 'asynchronous', .F.) leCommand = 'SELECT * ' leCommand = leCommand + ' FROM medical ' leCommand = leCommand + " WHERE APPOINT = '" + oApp.gcAppoint + "' AND " leCommand = leCommand + " BRANCH = '" + oApp.gcBranch + "'" lnConnHandle = SQLEXEC(oApp.gnConnectHandle, leCommand, "vMedic_temp") *** Добавление lcSelect = " INSERT INTO dispan ( Iden, Name, Otch, Birth, " lcSelect = lcSelect + " Confirm_grup, Confirm_data )" lcSelect = lcSelect + " VALUES ('" + oApp.gcIden + "', " lcSelect = lcSelect + "'" + oApp.gcName + "', " lcSelect = lcSelect + "'" + oApp.gcOtch + "', " lcSelect = lcSelect + "'" + lcBirth + "', " lcSelect = lcSelect + "'" + oApp.gcConfirm_grup + "', " lcSelect = lcSelect + "'" + lcConfirm_data + "'" + ")" lnConnHandle = SQLEXEC(oApp.gnConnectHandle, lcSelect) *** Изменение lcSelect = " UPDATE dispan SET " lcSelect = lcSelect + " Confirm_grup = '" + oApp.gcConfirm_grup + "' , " lcSelect = lcSelect + " Confirm_data = '" + lcConfirm_data + "'" lcSelect = lcSelect + " WHERE IDEN = '" + oApp.gcIden + "' AND " lcSelect = lcSelect + " NAME = '" + oApp.gcName + "' AND " lcSelect = lcSelect + " OTCH = '" + oApp.gcOtch + "' AND " lcSelect = lcSelect + " BIRTH = '" + lcBirth + "' " lnConnHandle = SQLEXEC(oApp.gnConnectHandle, lcSelect) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2010, 06:59 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
fvi, 1)это откуда и зачем? 2)откройте для себя команду TEXT...ENDTEXT ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2010, 07:25 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
ВладимирМ, Спасибо. цель ясна. буду уточнять детали. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2010, 16:34 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Курсорадаптер не обеспечивает одно из основных требований клиент-серверных приложений - безопасность данных базы. Поэтому для серьезных баз я считаю применять его не следует. Концептуально: пользователь получает доступ к данным через объект оракла view только для чтения. Изменение данных выполняется только через процедуры оракла, доступ к которым пользователь получает только для исполнения. Процедуры содержат логику контроля прав пользователя на выполнение изменений и логику установленных правил контроля данных. Доступ к таблицам у пользователя отсутствует. На клиентском компьютере grid - только для чтения. Изменения - через отдельное окно с передачей данных в процедуру оракла и анализом ответа о проведенных изменениях. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2010, 20:51 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Vch1, курсорадаптер тоже может все это обеспечить. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2010, 21:04 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Vch1Курсорадаптер не обеспечивает одно из основных требований клиент-серверных приложений - безопасность данных базы. Вы путаете цель и способ ее достижения. Насколько я понимаю, под обеспечением безопасности данных Вы понимаете тот факт, что должна быть возможность разрешать/запрешать пользователю просматривать/изменять те или иные данные. Для начала, Вы, как и многие до Вас, кое-что принимает "по умолчанию" по принципу "ну, это же очевидно!". И только когда начинаешь "проговаривать" эти самые "очевидные" вещи, выясняется, что не очень-то и очевидно. Что в Ваших рассуждениях пропущено? Во-первых, тот "очевидный" факт, что Вы исходите из предположения, что к базе данных может быть организован доступ из разных приложений. Что, вообще-то говоря, сомнительно. Обычно база данных создается под одно конкретное приложение и права доступа регулируются на уровне приложения. Следующее предположение "по умолчанию", что эти разные приложения будут написаны разными группами разработчиков. Разными в том смысле, что они не имеют единого стандарта обеспечения прав доступа на уровне самого приложения. Что, опять же, вызывает сомнения. Обычно все-таки база данных обслуживает вполне конкретная группа разработчиков, имеющая некий корпоративный стандарт обеспечения прав доступа. Наконец, что же все-таки обычно имеют в виду при подобных высказываниях на самом деле ? Да тот элементарный факт, что базы данных кто-то будет просматривать напрямую через приложения MS Office (Access, Excel)! А стоит ли эта задача такого усложнения системы? Как правило - нет. И тому есть много причин. Подавляющее большинство задач - это база данных, разработанная для целей "обслуживания" одного конкретного приложения, ну или группы приложений, создаваемых одной командой разработчиков. Поэтому где именно осуществлять контроль доступа: на уровне базы данных или на уровне приложения - не имеет принципиальной разницы. Более того, любое клиент-серверное приложение стремится получить себе админские права по доступу к данным и "рулить" доступом уже внутри собственно приложения. По той простой причине, что кроме обеспечения доступа к данным необходимо еще определять права доступа к интерфейсу. И если база данных "знает" о самих данных и может как-то управлять доступностью к ним, то вот об интерфейсе она ничего не знает. Как следствие, и управлять доступностью не может! Для справки: Если нет прав на выборку - то можно поставить свойство CursorAdapter.NoData = .T. и не будет в выборке никаких данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2010, 11:40 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Под безопасностью данных я понимаю полностью контролируемый сервером (ораклом) доступ к данным базы со стороны не привелигированных пользователей не зависимо от того какими средствами выполняется попытка получить доступ (клиентская часть на фоксе, или другие программные средства, например PL SQL Developer). Оракл позволяет обеспечить такой уровень безопасности. С помощью оракла создают большие базы с большим количеством пользователей разного уровня подготовки. Для таких баз обеспечение безопасности данных - одно из основных требований. Понятно, за выполнение таких требований нужно платить. Но для небольших приложений нет смысла применять оракл. Я не ставлю под сомнение полезность курсорадаптера. А говорю о том, что его применение для обслуживания баз данных оракла (больших хранилищ данных с многопользовательским доступом, назначение оракла) не оправдано по причине ослабления уровня безопасности сервера оракла. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2010, 20:39 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
ВладимирМ И если база данных "знает" о самих данных и может как-то управлять доступностью к ним, то вот об интерфейсе она ничего не знает. Как следствие, и управлять доступностью не может! Может, если нужно. В оракле создается карточка пользователя с правами доступа, в т.ч. и пунктами меню приложения на фоксе. Доступ на изменение карточки получают технологи системы (ограниченная група привелигерованных пользователей). Конкретный пользователь получает доступ к карточке только на чтение. При регистрации пользователя в оракле клиентское приложение получает информацию о доступных пользователю пунктах меню и выполняет настройку доступных ему пунктов меню. Все очень просто. Более того, в карточке прописаны и права на выполнение операций. Это позволяет отключать кнопки выполнения операций на формах. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2010, 20:55 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Vch1Я не ставлю под сомнение полезность курсорадаптера. А говорю о том, что его применение для обслуживания баз данных оракла (больших хранилищ данных с многопользовательским доступом, назначение оракла) не оправдано по причине ослабления уровня безопасности сервера оракла.Djn отсюда подробнее. Каким образом сие происходит? Каким образом ослабляет? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2010, 21:52 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Vch1Под безопасностью данных я понимаю полностью контролируемый сервером (ораклом) доступ к данным базы со стороны не привелигированных пользователей не зависимо от того какими средствами выполняется попытка получить доступ (клиентская часть на фоксе, или другие программные средства, например PL SQL Developer). Что и требовалось доказать. Вы говорите о доступе к данным из ВНЕ приложения. Некий "хакерские" трюки. Что, как правило, не очень-то и нужно. Ну, например, Вы сами сможете разобраться без документации во всех взаимосвязях небольшой базы данных таблиц эдак на сотню..другую? Ну, наверное, помучившись несколько недель сможете... Но, что более реально, все-таки обратитесь к разработчику, чтобы он предоставил Вам некий интерфейс как-то предварительно организовав данные. Разумеется, программист предусмотрит безопасный доступ к таким данным. Зачем городить огород с хранимыми процедурами? Я не говорю, что выбранная Вами стратегия не нужна. Я говорю, что в большинстве практических задач без этого вполне можно обойтись. Все решается более простыми средствами. Vch1В оракле создается карточка пользователя с правами доступа, в т.ч. и пунктами меню приложения на фоксе. Доступ на изменение карточки получают технологи системы (ограниченная група привелигерованных пользователей). Конкретный пользователь получает доступ к карточке только на чтение. Вы опять путаете цель и средства ее достижения. Разумеется, регулирование прав доступа осуществляется при помощи таблиц с ролями. Где-то ведь надо хранить информацию о том, что и кому доступно. Естественно в каких-то таблицах. Только вот, мало иметь информацию, надо ее еще применить. А разве сами пункты меню, формы, кнопки, объекты хранятся на сервере? Нет конечно. Т.е. Вы берете информацию о доступности объектов из БД, переносите эту информацию на клиентское приложение, а затем, на основании этой информации определяете доступность объектов клиентского приложения. При чем здесь ХП сервера? CursorAdapter вполне справится с извлечением этой информации. Применение этой информации все-равно задача приложения! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2010, 01:39 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Что и требовалось доказать. Вы говорите о доступе к данным из ВНЕ приложения. Некий "хакерские" трюки. Что, как правило, не очень-то и нужно. --------------- Как раз наоборот, очень нужно. Система должна гарантировать безопасность данных. Полагаться на порядочность пользователей и их добрые намерения нельзя. Кроме того уровень подготовки пользователей разный. А инструментальные средства доступа к серверу оракла позволяют довольно просто внести изменения в данные или уничтожить их (при наличии прав), например с помощью PL/SQL Developer. Поэтому необходимо: полностью исключить непосредственный доступ пользователей к данным сервера и полностью взять под контроль сервера управление областью видимости данных, прав и правил внесения изменений в данные, исключив при этом возможность пользователям изменять установленные для них правила и права. Оракл позволяет это сделать с помощь объектов: представления (view). роли, хранимые процедуры оракла. Доступ к базе выполняется без регистрации в операционной системе, на которой установлен сервер. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2010, 19:55 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Вы берете информацию о доступности объектов из БД, переносите эту информацию на клиентское приложение, а затем, на основании этой информации определяете доступность объектов клиентского приложения. При чем здесь ХП сервера? ------------- Да, для управления объектами клиентского приложения информация поступает из сервера. Но, как я уже говорил, права и правила изменения данных прошиты в хранимой процедуре и таблицах сервера. Пользователь может изменить данные только через хранимую процедуру. У него нет прав на изменение хранимой процедуры и таблиц с правами. Переданные с клиентского приложения данные для изменения проходят проверку в хранимой процедуре перед регистрацией в таблицах. Непосредственный доступ к таблицам имеют только хранимые процедуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2010, 20:10 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Парень, тут, между прочим, почти все с серверами работают. Владимир пытается тебе объяснить, что ты ошибаешься в некоторых концептуальных вещах, а ты лекции читаешь про вещи, которые находятся на два уровня ниже. Ну это так, по-доброму. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2010, 20:40 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Vch1 Давайте так. Кто вообще имеет прямой доступ к базе данных? Т.е. может напрямую подключится, ну, например, из Access? Любой желающий? И администратор базы данных допускает подобное подключение? И его еще до сих пор не уволили? Или все-таки "узок круг этих приложений"? В том смысле, что подключение к базе данных в принципе возможно только под вполне определенными логинами, которые выдаются определенным приложениям? Если влез кто-то из другого приложения, такое соединение автоматически пресекается. Разными способами. Если доступ осуществляется только и исключительно из приложения, то какая разница кто будет контролировать права доступа? Собственно сервер или клиентское приложение? Ведь прямое подключение к базе минуя приложение запрещено. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2010, 21:11 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
В том смысле, что подключение к базе данных в принципе возможно только под вполне определенными логинами, которые выдаются определенным приложениям? --------------------- В оракле логины выбаются пользователям, а не приложениям. Я встречал проекты, где логины и пароли обслуживает приложение, а пароль и логин доступа к базе оракл скрыт от пользователя в приложении. На мой взгляд такая схема менее безопасна. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2010, 16:11 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Fffffffffffffffff Однажды в шахматном клубе я стал свидетелем разговора кандитата в мастера спорта по шахматам с международным гроссмейстером. КМС говорит: Мы тоже играем в шахматы. На что Гроссмейстер ответил: Вы играете не в те шахматы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2010, 16:19 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Vch1В том смысле, что подключение к базе данных в принципе возможно только под вполне определенными логинами, которые выдаются определенным приложениям? --------------------- В оракле логины выбаются пользователям, а не приложениям. А сервер типа отличает юзера от приложения? А приложение не прикидывается юзером? Вы хотите позаниматься словесной эквилибристикой?Я встречал проекты, где логины и пароли обслуживает приложение, а пароль и логин доступа к базе оракл скрыт от пользователя в приложении. На мой взгляд такая схема менее безопасна.Вы думаете мало таких приложений? Думаете мы таких не видели? И о чем нам это может говорить? А Володя Максимов Вам не про это писал: Более того, любое клиент-серверное приложение стремится получить себе админские права по доступу к данным ? Вы на мой вопрос отвечать будете или как? Как курсорадаптер снижает безопасность работы с сервером? ps: если можно, то поменьше воздыханий в сторону оракла. больших хранилищ данных с многопользовательским доступом, назначение ораклаЭто не прерогатива одного только оракла. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2010, 16:34 |
|
Fox и Oracle
|
|||
---|---|---|---|
#18+
Vch1Fffffffffffffffff Однажды в шахматном клубе я стал свидетелем разговора кандитата в мастера спорта по шахматам с международным гроссмейстером. КМС говорит: Мы тоже играем в шахматы. На что Гроссмейстер ответил: Вы играете не в те шахматы. А шахматы тут причем? Вы уж продолжайте про Оракл. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2010, 17:47 |
|
|
start [/forum/topic.php?fid=41&msg=36561887&tid=1585422]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 338ms |
total: | 480ms |
0 / 0 |