|
|
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Здравствуйте коллеги ! Часто при работе с БД используется технология организации доступа к данным таблиц используя т.н. SUID процедуры (для каждой из таблиц пишутся ХП чтения, вставки, обновления и удаления записей, вызываемые в дальнейшем клиентской частью). Приемуществ у этого подхода масса, но есть одна проблема. В случае использования прямого доступа к данным таблицы возможно обновить только одно поле записи используя конструкцию типа UPDATE tablename SET fieldname=@newvalue WHERE id=@id оставив остальные поля записи нетронутыми. При использовании SUID, этой операции соответствует вызов UPDATE процедуры соответствующей таблицы: EXEC tablename_update @id, @fieldname, .... Так вот дело в том, что список параметров этой процедуры - список ВСЕХ полей несущей таблицы (потенциально может меняться любое из полей), и чтобы вызвать процедуру нужно указать ВСЕ параметры (т.е. значения ВСЕХ полей обновляемой записи). Но мне не нужно изменять ВСЕ поля, нужно изменить только одно ! Как отделить поля подлежащие обновлению от остальных ? Как Вы организуете свои SUID процедуры ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 10:11 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Добавить какое нить значение поумолчанию и в случае, если у поля в замену идет такое значение, то не изменять его. А можно с клиента переписывать все значения - измененные и неизмененные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 10:54 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
bpostПриемуществ у этого подхода масса, А нельзя ли поподробнее про преимущества? Но именно у описанного подхода: "для каждой из таблиц пишутся ХП чтения, вставки, обновления и удаления записей, вызываемые в дальнейшем клиентской частью". Я пока только недостатки вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 11:27 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
bpostЧасто при работе с БД используется технология организации доступа к данным таблиц используя т.н. SUID процедуры Есть такая глупость. bpostПриемуществ у этого подхода Только одно: он наиболее понятен тупому мозгу. В остальном исключительно недостатки. Один из этих недостатков Вы описываете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 11:33 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Только одно: он наиболее понятен тупому мозгу. В остальном исключительно недостатки. Один из этих недостатков Вы описываете. А с точки зрения построения систем по архитектуре DB <-> AppServer <-> Client ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 12:23 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
2b&2b А с точки зрения построения систем по архитектуре DB <-> AppServer <-> Client ? Большинсиво из видимых мне недостатков suid процедур никак не исчезают при вставке между СУБД и клиентом дополнительного звена, а некоторые даже проявляются ярче. Ну а преимуществ пока никто не назвал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 12:55 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
2b&2bА с точки зрения построения систем по архитектуре DB <-> AppServer <-> Client ? Никакой разницы. Точнее, пожалуй, так: если AppServer и так плохо работает с DB, то CRUD-процедуры картину не испортят, в остальном - никакой разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 13:33 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
softwarerТолько одно: он наиболее понятен тупому мозгу. В остальном исключительно недостатки. Если смотреть на подход как на таковой, то да. Если смотреть на общее решение работы с базой то тут всплывает фактор "безобразно, зато единообразно" Сейчас у меня в проекте есть некий мэппер, который умеет мэпить объект на параметры ХП. Научить его работать напрямую с таблицами можно, конечно, но зачем ? Подчеркиваю, я не являюсь сторонником концепции "все на процедурах !" не являюсь поклонником ORM Однако используя и то и то я не заметил сколь либо серьезных недостатков, равно как и достоинств. К bpost Либо обновляются все поля, что не есть проблема чаще всего. Либо пишите хранимую, обрабатывающую только нужные вам параметры в той комбинации, как вам этого хочется. Либо эксперементируйте с динамическим SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 13:57 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Один softwarerТолько одно: он наиболее понятен тупому мозгу. В остальном исключительно недостатки. Если смотреть на подход как на таковой, то да. Если смотреть на общее решение работы с базой то тут всплывает фактор "безобразно, зато единообразно" Сейчас у меня в проекте есть некий мэппер, который умеет мэпить объект на параметры ХП. Научить его работать напрямую с таблицами можно, конечно, но зачем ? А зачем вы свой мэппер писали? И что мешало сразу написать мэппер, работающий с таблицами? То есть кроме того, что "мы уже так сделали" никаких других преимуществ назвать нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 14:53 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyА зачем вы свой мэппер писали? Откуда вы взяли, что мы писали мэппер ? Bogdanov AndreyИ что мешало сразу написать мэппер, работающий с таблицами? Мешало то, что мы мэппер не писали. Bogdanov AndreyТо есть кроме того, что "мы уже так сделали" никаких других преимуществ назвать нельзя? С чего вы взяли, что я говорю о каких-то преимуществах ? Поясняю. Мы нашли устраивавшее нас решение, особенностью которого было то, что оно (без доработок) позволяло работать только через ХП. В ходе эксплуатации выяснилось, что в устранении этого "недостатка" необходимости нет. Если бы мы почувствовали сколь-либо существенные неудобства, то доработали бы мэппер. Как контр-пример, мэппер, который умеет работать ТОЛЬКО напрямую с таблицами пришлось бы дорабатывать наверняка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 15:24 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
ОдинЕсли смотреть на общее решение работы с базой то тут всплывает фактор "безобразно, зато единообразно" Согласен, всплывает. В графе "недостатки". Человек - любопытное существо. Если попробовать заставить его самого пользоваться "безобразным единообразным решением" - например, "ездить на работу на автобусе" - тут же начнется ор: - А метро быстрее! - А мерседес круче! - А мне пешком нравится! А вот в том, чтобы спроектировать такое "для других" - так он только рад. И плевать, что будут ругаться - главное, что спроектировать и запустить в производство единственный автобус ему проще, чем автобус+мерседес+метро. А уж сейлы отработают свои килобаксы и разведут клиента. ОдинСейчас у меня в проекте есть некий мэппер, который умеет мэпить объект на параметры ХП. Научить его работать напрямую с таблицами можно, конечно, но зачем ? Во-первых, Вы в этой фразе предлагаете согласиться с логической ошибкой. "Отказ от тупых процедур" - вовсе не обязательно "напрямую с таблицами", и не стоит приплетать сюда эту "прямую работу" - тут же появятся личности, которые "не умеют готовить" и обсуждение превратится в ликбез на совершенно другую тему. Во-вторых, суть именно в вопросе "работать единообразно или эффективно". Судя по последним фразам Вашего письма, Вы согласны с тем, что "одна простая процедура" - не всегда удовлетворит потребности. Давайте смотреть, что мы имеем в этом случае. Предположим, что у нас есть, например, три метода, которые должны применяться в приложении для достаточно качественной работы с БД. "Естественный" вариант - научить им маппера, сделать в нем соответствующие настройки или логику выбора и наслаждаться. Какие другие варианты?.. Вы, собственно, предлагаете: если нам нужно применить метод2 или метод3, давайте обернем вызов соответствующего кода в код, соответствующий методу1. Что же в этом хорошего? Ровно одно: обертки, может быть, будет писать кто-то другой. Сложность никуда не девается; просто вместо того, чтобы реализовать ее в одном месте, Вы предлагаете размазать ее по всем местам, где она потребуется. Неизбежно появится дублирование кода (поскольку очень похожие вещи придется реализовывать в куче мест), в самом лучшем случае - сформируется еще некоторое "оберточное API". Эффективность от того не улучшится - конечно, и упадет несильно, но сколько-то ресурсов заберет совершенно напрасно. А самое главное - таким образом мы удалимся от главной цели: легко и просто писать бизнес-функции. Напомню: цель любого API в том, чтобы позволить программисту реализовывать реально нужные операции "одной строкой". Это позволяет ему сосредоточиться на основном: на бизнес-логике, на том, как из этих операций формируется решение прикладной задачи. Вы по сути говорите: "мне лень сделать это в API, пусть лучше прикладной программист, каждый раз, когда встречает такую проблему, оторвется от нее и напишет некую прокладку вот такого-то вида". С точки зрения идеологии API это просто-таки саботаж. Да, безусловно, если некая функциональность нужна "один раз в год", ее можно и реализовывать таким образом, не перетаскивая в стандартные решения. Но это не тот случай. ОдинОднако используя и то и то я не заметил сколь либо серьезных недостатков, равно как и достоинств. Главный недостаток - никто не будет писать эти обертки. Будут писать тупые процедуры, делающие на порядок больше ввода-вывода, чем нужно, а потом кричать про "сервера БД плохо масштабируются, нужна многозвенка". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 15:25 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
ОдинОткуда вы взяли, что мы писали мэппер ? ... Мешало то, что мы мэппер не писали. ... С чего вы взяли, что я говорю о каких-то преимуществах ? Прошу прощения, если неправильно вас понял. Мне показалось, что вы выступили на стороне той точки зрения, что работать через ХП - хорошо. Ну нет, так нет. Мне, действительно, было бы интересно услышать хоть что-то о преримуществах такого подхода. А то про него многие говорят. Жаль, что вы не апологет процедур. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 15:43 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
softwarer Извините, как-то очень много букв, но нить ваших рассуждений я так и не смог понять :( Бог с ним, тема не настолько интересная, чтобы пять страниц выяснять кто и что имел ввиду. Все что я хотел сказать в данном топике: я не наблюдаю никаких особенных ужасов при использовании действительно не очень красивого подхода "все через ХП" Хотя теоретически они, ужасы, есть. В целом - все фигня, главное пчелы. Архитектура приложения вообще не так важна, как это кажется программистам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 16:08 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
ОдинБог с ним, тема не настолько интересная, чтобы пять страниц выяснять кто и что имел ввиду. "Безобразно, но единообразно" - не достоинство, ни вообще, ни в данном случае. ОдинВсе что я хотел сказать в данном топике: я не наблюдаю никаких особенных ужасов при использовании действительно не очень красивого подхода "все через ХП" Хотя теоретически они, ужасы, есть. Красота - категория абстрактная. Я предпочитаю удобство; если мне нужно что-то сделать, к API один вопрос: "можно сделать" или "надо извращаться". "Я не наблюдаю" - сами понимаете, флеймово-уязвимая позиция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 16:33 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
softwarer"Безобразно, но единообразно" - не достоинство, ни вообще, ни в данном случае. Ну это как сказать. Я не хотел отвечать в первый раз, но раз уж зацепились.. Разнообразие выбора - это не достоинство само по себе. Важно что это разнообразие обеспечивает. В идеальном случае должн быть один-единственный вариант, который удовлетворит всех. С одной стороны. С другой, при выборе архитектуры решения мы не стремимся удовлетворить прихоти программистов (я хочу пешком, а я на мерседесе), ведь так ? Мы стремимся найти оптимальное решение каких-то проблем. Опять таки, идеально, если это будет одно, _единое_ решение. Вот тут мы вынуждены признать, что часто это единствено-верное решение найти невозможно. И появляется разнообразие, но не как достоинство, как вынужденая мера. Я каждый день езжу на машине по мосту через речку. А вернее стою в пробке на нем. По этому же мосту проходит метро и еще тротуары есть. С моей точки зрения автомобилиста метро надо убрать и тротуары тоже. И сделать еще 3 полосы. Мне нужно единообразие. На ор других мне в общем то наплевать. Так что все в порядке с человеком, разнообразие "вообще" ему не нужно, ему нужно чтобы был устраивающий его вариант. softwarer"Я не наблюдаю" - сами понимаете, флеймово-уязвимая позиция. Ну я считаю, что она честная по крайней мере. Уязвимая сторона всех этих рассуждений о пользе-вреде какой-либо технологии заключается в том, что на форуме она рассматривается в отрыве от всего остального. Легко выдрать какой-то кусок и теоретически порассуждать о его достоинствах-недостатках. И можно много всего понапридумывать. Поэтому я и говорю, что я не наблюдаю, хотя вполне возможно что я не вижу полной картины или недостатки нивелируются чем-то или весь процесс именно нашей разработки не приводит к ним. Что вижу, о том и пою. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 17:30 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
ОдинРазнообразие выбора - это не достоинство само по себе. Согласен. Важную роль в рассмотрении играет "безобразно". Один комментарий к дальнейшим Вашим рассуждениям - есть разница между "внешним" и "внутренним" взглядом. Одним из достоинств API является возможность сочетать внешнее единообразие, общий интерфейс со внутренним разнообразием, разнообразием реализации. В том, что Вы говорите, неучет этого приводит к некоторой путанице, как мне кажется. Ну а к сказанному ранее, кстати: Вы предлагали вместо [единообразный интерфейс маппера] - [разнообразные реализации] делать [единообразный интерфейс маппера] - [единообразный интерфейс ХП] - [разнообразные реализации]. Смысла в этом я пока что не вижу, просто лишнее звено. ОдинНу я считаю, что она честная по крайней мере. Безусловно. Я просто отметил, что он... неконструктивен, что ли. Если начинать разбирать, уйдем в стандартные флеймы, чего не хочется, а в таком виде.... допустим, Вы скажете: "я не видел слона". Я отвечу: "А я не видел жирафа". И все, поговорили, но пользы с того... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 17:47 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Одна из возможностей хранимых процедур - это инкапсуляция. Она может быть полезной при итерационной разработке, или при расширении/изменении, когда добавляется новая логика поверх существующего интерфейса. Вторая (и не последняя) возможность - это включение процедурных расширений SQL. Названное выше - это отнюдь не преимущества или недостатки, а всего лишь возможности. Использовать их или нет - это вопрос другой. Но ежели принято решение держать бизнес-логику в СУБД, то процедуры, ИМХО, - это более предпочтительный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 17:53 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
softwarerНу а к сказанному ранее, кстати: Вы предлагали вместо [единообразный интерфейс маппера] - [разнообразные реализации] делать [единообразный интерфейс маппера] - [единообразный интерфейс ХП] - [разнообразные реализации]. Смысла в этом я пока что не вижу, просто лишнее звено. Я наверное как то плохо сформулировал. Я не предлагал такое решение. Я не агитирую за него. Я его описал и сказал, что ничего страшно плохого не заметил. softwarerБезусловно. Я просто отметил, что он... неконструктивен, что ли. Если начинать разбирать, уйдем в стандартные флеймы, чего не хочется, а в таком виде.... допустим, Вы скажете: "я не видел слона". Я отвечу: "А я не видел жирафа". И все, поговорили, но пользы с того... А мы узнаем что бывает слон и жираф. Для меня это польза. А иначе получается что мы описываем абстрактное животное, толстое и с длинной шеей. И начинаем придумывать как оно живет и питается. Хотя это интереснее, конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 18:07 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Sergey TokarevОдна из возможностей хранимых процедур - это инкапсуляция. Она может быть полезной при итерационной разработке, или при расширении/изменении, когда добавляется новая логика поверх существующего интерфейса.Если вы что-то меняете не добавляя новых полей - то при обычном подходе есть триггера. Если добавляются поля, которые надо выносить в UI - то здесь весь выигрыш пропадает. Sergey TokarevВторая (и не последняя) возможность - это включение процедурных расширений SQL. VIEW + Instead of trigger Нужны в особо изощренных случаях. Sergey TokarevНазванное выше - это отнюдь не преимущества или недостатки, а всего лишь возможности. Использовать их или нет - это вопрос другой. Но ежели принято решение держать бизнес-логику в СУБД, то процедуры, ИМХО, - это более предпочтительный подход.Не путайте бизнес логику с элементарным сохранением данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 19:22 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Благодарю всех за насыщенные комментарии :) По поводу преимуществ SUID подхода - для меня важны два: 1) Возможность организовать гибкое разделение доступа пользователей к данным. Допустим, что необходимо ограничить "видимость" данных для пользователя записями относящимися к его подразделению и имеющими сумму контракта не более $10000, находящимися в статусе "подготовлено", расчетный /ХП/ коэффициент риска для которых не превышает 0,85. (Примерчик простоват, реально критерии бывают и посложнее). Средствами управления доступа встроенными в СУБД (permissions) как правило можно ограничить доступ к таблице или ее полям, но не к записям (тем более по достаточно сложным критериям). Эту задачу можно решить А) Накладывая указанные ограничения в SQL SELECT запросе на клиенте; Б) Фильтруя записи в AS; В) В SELECT процедуре SUID. Приемущество подходов Б) и В) в том, что при правильно настроенных permissions клиент не сможет получить закрытые для него данные никаким способом (включая ISQL). В случае, если использование AS в ИС не планируется, то SELECT процедура - неплохой выход. Аналогично, сложные ограничения доступа можно накладывать и процедурах удаления и изменения записей. (Да и вероятность того, что умный/зловредный юзер наберет в ISQL "DELETE FROM tablename" исключается). 2) Изоляция клиенских приложений от деталей структуры БД. В этом смысле SUID процедуры могут действовать подобно интерфейсам (контрактам) ЯП общего назначения, позволяя изменять детали реализации БД гарантированно изолируясь от клиенских приложений использующих ее. На самом и 1) и 2) можно реализовать и в AS, и в SUID процедурах но, повторяю, не всегда есть необходимость строить AS для этого, тем более что все это можно решить средствами СУБД. Конечно есть и минусы (см. посты выше); основной ИМХО - снижение производительности. Теперь по теме топика :) Пришел к выводу, что в UPDATE процедуры придется добавлять дополнительный параметр (BITMASK) с перечнем измененных полей (изменять все не катит). Еще раз всем спасибо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 19:23 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
bpost1) Возможность организовать гибкое разделение доступа пользователей к данным. Процедуры для этого сугубо не обязательны. bpostЭту задачу можно решить В том числе способами, которые Вы забыли упомянуть. bpostПриемущество подходов Б) и В) .. И не только их... bpost(Да и вероятность того, что умный/зловредный юзер наберет в ISQL "DELETE FROM tablename" исключается). Хм. Такое впечатление, что Вы попали в ту самую упомянутую выше логическую ошибку "либо тупые процедуры, либо прямой доступ". bpost2) Изоляция клиенских приложений от деталей структуры БД. Процедур совершенно не требует. Впрочем, и само по себе желание - отправдано только с точки зрения сугубых теоретиков. bpostПришел к выводу, что в UPDATE процедуры придется добавлять дополнительный параметр (BITMASK) с перечнем измененных полей (изменять все не катит). Плохое решение, имхо, причем со всех точек зрения, начиная с идеологической и кончая сугубой техникой. Для начала Вам придется громоздить этакий генератор sql-я, либо копируя по процедурам прорву очень похожего кода, либо натыкаясь на недостаточность серверного языка для решения этой задачи. Когда справитесь с этой задачей, пойдут проблемы динамического sql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 19:45 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
2 softwarer: softwarerДля начала Вам придется громоздить этакий генератор sql-я, либо копируя по процедурам прорву очень похожего кода, либо натыкаясь на недостаточность серверного языка для решения этой задачи. Когда справитесь с этой задачей, пойдут проблемы динамического sql Не думаю, шаблоны SUID процедур форируются PowerDesigner-ом, ну а от реализации логики доступа все равно не уйдешь. Мне проще делать это на языке ХП. По поводу остального: разумеется использование SUID - не единственный подход, но это возможный подход для реализации комплексной логики доступа. softwarerВ том числе способами, которые Вы забыли упомянуть - ну разумеется :) нельзя объять необъятного (С). softwarerВпрочем, и само по себе желание - отправдано только с точки зрения сугубых теоретиков Изоляция звеньев, формальные контракты между ними необходимы в многоуровневой ИС, иначе может случиться, что изменение реализации звена 1 приведет к неработоспособности звеньев 2,3,4... , которые, возможно, разрабатываются не Вами (или, упаси Господи, вообще уже не сопровождаются разработчиком :)). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 20:19 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
bpostНе думаю, шаблоны SUID процедур форируются PowerDesigner-ом, Угу, уже требуется костыль. Все больше тупого кода, все труднее искать и сопровожать "нетупой". bpostПо поводу остального: разумеется использование SUID - не единственный подход, но это возможный подход для реализации комплексной логики доступа. Возможный. Но это не синоним "достаточно качественный". bpost softwarerВ том числе способами, которые Вы забыли упомянуть - ну разумеется :) нельзя объять необъятного (С). Разумеется. Однако, рассуждения, который Вы приводите сразу после этого, как раз и пытаются заняться этим. Грубо говоря, из факта "один плохой способ лучше другого плохого способа" ничего особенного не следует. bpostИзоляция звеньев, формальные контракты между ними .... Простите, у меня нет времени подробно рассказывать о разнице между теорией и практикой. Буквально в два слова: во-первых, СУБД сама по себе является движком высокоуровневых абстракций, таких как view и table function, и они обеспечивают все потребности "изоляции" вкупе с много лучшим качеством других операций. Во-вторых, "изменения", затрагивающие БД, можно разделить на две больших группы, из каждой из которых приведу по примеру: 1. Изменился алгоритм начисления зарплаты. Меняется исключительно внутренность некоторой процедуры, которая - если расчет происходит в СУБД - будет оформлена как ХП в любой вменяемой архитектуре. 2. Появились иностранные сотрудники, зарплата которым перечисляется в национальных валютах. Это приведет к необходимости изменений во многих компонентах; в БД появятся дополнительные поля и скорее всего логика, на клиенте - дополнительные колонки и настройки, интерфейс с банком дополнится валютой перечисления и так далее. В целом, подход "только ХП" не обеспечивает практически более высокой независимости звеньев по сравнению с подходом "разумно использовать DML с клиента". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 21:09 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
Ну буду подробно комментировать вопросы разделения доступа, про это и sofwarer ответил, а вот про "изоляцию" хочется добавить пару слов. Вот это bpost2) Изоляция клиенских приложений от деталей структуры БД. В этом смысле SUID процедуры могут действовать подобно интерфейсам (контрактам) ЯП общего назначения, позволяя изменять детали реализации БД гарантированно изолируясь от клиенских приложений использующих ее. никак не увязывается у меня вот с этим: bpostдля каждой из таблиц пишутся ХП чтения, вставки, обновления и удаления записей, вызываемые в дальнейшем клиентской частью Как я ж тут изоляция, если клиентское приложение все равно знает обо всех таблицах и их колонках, просто вместо удобного, выработанного годами интерфейса к ним имеет некую неполноценную подпорку? Sergey TokarevНо ежели принято решение держать бизнес-логику в СУБД, то процедуры, ИМХО, - это более предпочтительный подход. Не надо путать SUID процедуры и бизнес-логику. SUID процедуры никакого отношения к бизнес-логике не имеют. Это всего лишь некий интерфейс. Никто не спорит процедуры - вещь удобная и отказываться от них нет никакого резону, но использовать их надо когда надо. А добровольно выкручивать себе руки, запрещая использовать удобный SQL-интерфейс, а потом героически решать возникающие проблемы- это, извините, не нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 21:47 |
|
||
|
SUID процедуры
|
|||
|---|---|---|---|
|
#18+
2 softwarer: Топик получается интересным. 2 all: Хорошо, оставим пока в покое SUID. Задача остается той же: организовать ограничение доступа пользователя к записям таблицы по некоторому сложному критерию (возможно реализованному в ХП), причем сделать это таким образом, чтобы клиент подключившись к БД под своей учетной записью НИКАКИМИ средствами (ни штатными ни нештатными) не смог "увидеть" или "изменить" "запретные" для него записи. Решение с использованием промежуточного AS оставим за скобками (тут все понятно). СУБД: MS Sql Server 2000 или Interbase/Firebird (на выбор). Как бы Вы решили эту задачу средствами СУБД, и чем Ваше решение принципиально отличается в лучшую сторону от SUID подхода ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2007, 22:48 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34641686&tid=1544415]: |
0ms |
get settings: |
7ms |
get forum list: |
23ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
87ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 523ms |

| 0 / 0 |
