Выполнять хранимые процедуры Oracle PL / SQL в NHibernate - PullRequest
2 голосов
/ 04 марта 2011

Прежде всего, извините за мой английский.

Сейчас я создаю базу данных Oracle, в которой все DML упакованы в хранимые процедуры (например, клиент не может напрямую выполнить «INSERT ONTO Articles (...»), вместо этого он должен вызвать SP «ArticleInsert ()»). База данных также имеет свою собственную систему безопасности - специальные таблицы, такие как «Пользователи», «Привилегии», «Пользователи_Привилы». Когда я устанавливаю соединение с базой данных, я должен выполнить специальную хранимую процедуру, чтобы «Войти в систему», например, «Login (database_user, user_password)». После этого база данных «знает», кто я, и знает мои привилегии.

Я планирую написать клиентское приложение на C # с использованием NHibernate. Но этот ORM для каждой новой модификации объекта использует новое соединение с базой данных из пула. Итак, когда я напишу класс «Article» и подавление стандартного поведения NHib DML («INSERT / UPDATE / DELETE» будет заменено выполнением соответствующих хранимых процедур), как я могу выполнить «Login (database_user, user_password)», когда NHibernate вызывает новое соединение БД из бассейн

Или как решаются такие задачи?


Спасибо

Ответы [ 2 ]

0 голосов
/ 04 марта 2011

Это не первое колесо, которое я изобретаю из-за недостатка знаний :).

Предположим, что мы внедряем систему управления персоналом для какой-то организации. Эта организация состоит из набора отделов, которые имеют свои собственные отделы и так далее. Итак, у нас есть иерархическая структура, и у каждого отдела есть как минимум три атрибута: - Я БЫ - PARENT_ID (идентификатор родительского отдела) - ИМЯ

Например, у нас есть SP в базе данных - DeptChangeName (Id, NewName), и мы хотим, чтобы один пользователь БД мог изменять имена только для отдела с ID = 112 и его дочерних элементов, а другой пользователь мог изменять имя только для отдела с ID = 34 и это дети. Таким образом, привилегия - не только «выполнить DeptChangeName», но - «выполнить DeptChangeName с ID = 112 или его потомками».

Другой пример - пользователь "Xxx" может создавать новые подотделы с ID = 112 с неопределенной глубиной.

Если эти ситуации можно решить с помощью средств Oracle без «ручных звонков», не могли бы вы дать мне подходящую ссылку или фразу для Google?

0 голосов
/ 04 марта 2011

Я думаю, вы немного изобретаете колесо.Oracle обеспечивает такую ​​же степень детализации доступа к записи, как и любая СУБД, и даже больше, чем вам, вероятно, нужно.Почему вы не используете эту власть для разметки привилегий данных?

В любом случае, для операций CRUD, да, вы можете переопределить генерирование SQL по умолчанию в NHibernate, указав хранимую процедуру для операций вставки, обновления и удаления.Запросы ДОЛЖНЫ выполняться на условиях NH;вы обходите 90% мощности NHibernate, заставляя ленивую загрузку каждого поля и потомка объекта, вызывая хранимую процедуру поиска.Поэтому вам нужно как минимум переделать систему безопасности, чтобы при необходимости разрешить SELECT для аутентифицированных пользователей в схемах / таблицах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...