|
|
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
В компании есть несколько БД, разработанные под определенные приложения. С каждой из БД имеет право работать определенные сотрудники (из написаных Клиентских приложений). Для того, чтобы не дублировать пользователей в каждой из Баз, собираюсь вынести их в отдельную БД и запрашивать их права оттуда соответственно. На данный момент пользователи хранятся в отдельной табличке в каждой из Баз (на фирме нет домена). Хотел поменять данную структуру хранения и создавать под каждого пользователя свой логин в MS SQL и соответственно его правам задавать права доступа только на необходимые ему таблицы. Но в некоторых довольно сложных системах встречал другой подход: создается пользователь в БД от которого и выполняются все запросы, а ограничения вынесены только в пользовательский интерфейс. Хотел попросить совета: где можно почитать полезную информацию по проектированию БД пользователей? Какой Вы применяете подход? Опишите подводные камни... В ближайшее время планируется создание домена, после чего используя Актив Директори будут автоматически импортироваться новые пользователи в БД... Буду благодарен за все советы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2010, 17:01 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
Ну пример простой... Вот работают у Вас все БД как полагается, а именно БД пользователей нагнулась - что делать будете? Без выноса пользователей в отдельную БД при выходе из строя одной БД - только часть пользователей не может работать, а в Вашем случае не смогут работать все. Я понимаю что эта база маленькая и восстановить ее впринципе можно быстро. Но оцените реально время простоя, думаю это будет около часа (сами понимаете бывают обеды, Ваше нерабочее время или просто в магазин за батоном пошел - не всегда рука на кнопке "восстановить все" :) )... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2010, 17:17 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
При таком раскладе, БД пользователей выносить на отдельный сервер и реплицировать или доставлять лог шипингом на каждый сервер БД, тогда и есть время на востановление основной БД пользователей и делаеться все централизованно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2010, 17:27 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
Kirillich, Не дошел я еще до репликаций :) Пока просто хотел упростить себе и другим работу. 1 час простоя для нас сейчас не сверх критичен, так что сейчас это не учитываем. А на счет работы с пользователями? Не могли бы вы описать создаете ли для каждого виндового своего пользователя в СКЛ или там есть один, а доступ регламентируется внутренними правами в клиентском приложении? (Возможно есть еще варианты?) В одной СРМ видел, что пользователь заходило со своими правами только на стартовую страничку, а дальше работал от админского пользователя. Модератор: Тема перенесена из форума "Microsoft SQL Server". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 10:34 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
KirillichПри таком раскладе, БД пользователей выносить на отдельный сервер и реплицировать или доставлять лог шипингом на каждый сервер БД, тогда и есть время на востановление основной БД пользователей и делаеться все централизованно хм... расстреливалбы на месте тех кто так проектирует системы :) т.е. вместо того чтобы оставить пользователей в своих БД (что опять же не всегда нужно, обычно хватает внутренних механизмов авторизации MSSQL и ОС) мы начинаем городить огороды... уже дошли до реплицирования, за которым надо следить и которое надо поддерживать - скучно? создаем доп проблемы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 10:39 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
New_FrozenKirillich, Не дошел я еще до репликаций :) Пока просто хотел упростить себе и другим работу. В данной задаче даже и не доходите... Если руководство грамотное - уволят. New_Frozen1 час простоя для нас сейчас не сверх критичен, так что сейчас это не учитываем. Сейчас не критичен - это очень здорово, но зачем допускать этот простой независимо от критичности? New_FrozenА на счет работы с пользователями? Не могли бы вы описать создаете ли для каждого виндового своего пользователя в СКЛ или там есть один, а доступ регламентируется внутренними правами в клиентском приложении? (Возможно есть еще варианты?) Тут нет единого совета - каждая система индивидуальна, и требования бывают различны. Мой подход - на клиента выносить минимум логики. New_FrozenВ одной СРМ видел, что пользователь заходило со своими правами только на стартовую страничку, а дальше работал от админского пользователя. Это однозначно не правильно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 11:20 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
New_Frozen, Видимо если то что у вас сейчас есть работает в такой схеме, то на это были причины. Вы уверены что удалив пользователей в этих БД приложения будут корректно работать? Если вам лень в каждой БД создавать пользователя - можете создавать их скриптом сразу в нужных БД. Т.е. сделать управление пользователями по всем БД. Это будет и наглядно и удобно. Дальше нужно смотреть что и как использует данные о пользователях. Если все работающие у вас приложения написаны по одному принципу (в чем я лично очень сомневаюсь), то тогда стоит сделать копии и попробовать в тестовом режиме поганять данные. А если к примеру у вас приложения работают с распределенными узлами - удаление пользователей из базы сразу тормознет всю работу. Сто раз отмерь - один отрежь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 13:12 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
Злой БобрNew_Frozen, Видимо если то что у вас сейчас есть работает в такой схеме, то на это были причины. Вы уверены что удалив пользователей в этих БД приложения будут корректно работать? Если вам лень в каждой БД создавать пользователя - можете создавать их скриптом сразу в нужных БД. Т.е. сделать управление пользователями по всем БД. Это будет и наглядно и удобно. Дальше нужно смотреть что и как использует данные о пользователях. Если все работающие у вас приложения написаны по одному принципу (в чем я лично очень сомневаюсь), то тогда стоит сделать копии и попробовать в тестовом режиме поганять данные. А если к примеру у вас приложения работают с распределенными узлами - удаление пользователей из базы сразу тормознет всю работу. Сто раз отмерь - один отрежь. То есть, насколько я понял: 1. Пользователи автоматически импортируются в какую-то БД из домена. 2. Автоматическое создание таких пользователей по всем задействованным БД. 3. Задание прав пользователям для определенных приложений. 4. В дальнейшем пользователь будет работать под своей учёткой при запросах к определенной БД и иметь только круг своих полномочий. Сейчас в наших приложениях не пользователи - это записи в таблицах Users :) А на самом деле приложение выполняет запросы под админом, регламентируются только права на интерфейс приложения по сути. Поскольку такую систему трудно назвать защищенной, то я хотел переделать работу с пользователями и для этого узнаю какие подходы используются и кому что из них нравиться больше :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 14:36 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
New_Frozen, Вы поняли неправильно. Мое мнение сводится к тому что сначала необходимо разобраться с приложениями и только потом пытаться что-то оптимизировать. В идеале приложение должно слать запрос с параметрами на сервер, а там уже выполняться (или невыполняться) какие-то действия. Т.е. никакого доступа к БД из приложения напрямую быть недолжно, т.к. заведется какой-то партизан и нагадит где только можно. Поэтому начинайте с изучения приложений. Поднимите информацию о задачах которые ставились в процессе внедрения приложений. Короче, когда будете знать ответы на все вопросы по вашей ИС, только тогда можно что-то думать менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 14:53 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
Если New_FrozenВ ближайшее время планируется создание домена а СУБД, как я понял - MS SQL, не понимаю: зачем вы затеваете эти пляски? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2010, 17:55 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
Злой БобрNew_Frozen, Вы поняли неправильно. Мое мнение сводится к тому что сначала необходимо разобраться с приложениями и только потом пытаться что-то оптимизировать. В идеале приложение должно слать запрос с параметрами на сервер, а там уже выполняться (или невыполняться) какие-то действия. Т.е. никакого доступа к БД из приложения напрямую быть недолжно, т.к. заведется какой-то партизан и нагадит где только можно. Поэтому начинайте с изучения приложений. Поднимите информацию о задачах которые ставились в процессе внедрения приложений. Короче, когда будете знать ответы на все вопросы по вашей ИС, только тогда можно что-то думать менять. Часть из этих приложений написаны или доработаны мной. Я недостаточно хорошо знаю как правильно спроектировать БД и связи между ними, чтобы уменьшить количество дублирующей информации/работы. В моем понимании: 1. Сис админ заводит пользователя в домене. 2. Пользователь автоматом импортируется в БД. 3. Отдел кадров вносит информацию о пользователе. 4. Данный пользователь становится доступный во всех приложениях, используемых на фирме. 5. Начальники отделов выдают права новому пользователю в своих системах. Насколько я понимаю при такой организации достигается определенный уровень безопасности, нет необходимости в участии программиста в процессе добавления нового пользователя, легко прикрутить новое приложение (БД) для использования текущего списка пользователей. Что неправильного в размышлениях? МОЖЕТЕ ЛИ ПОСОВЕТОВАТЬ ЧТО-ТО ПОЧИТАТЬ ПО ПРОЕКТИРОВАНИЮ СЛОЖНЫХ И МАСШТАБИРУЕМЫХ СИСТЕМ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 11:21 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
baracs, Опишите Вашу идею как это организовать, потому что я ищу дополнительную информацию и хочу в этом разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 11:23 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
New_FrozenВ моем понимании: 1. Сис админ заводит пользователя в домене. 2. Пользователь автоматом импортируется в БД. 3. Отдел кадров вносит информацию о пользователе. Вот тут переставлено с ног на голову. Сначала кадровичка вносит информацию о пользователе, потом на основании этого выполняются все прочие действия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 11:25 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
softwarer, Возможно :) Для этого и вынес на обсуждение, чтобы ткнули носом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2010, 11:43 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
Уважаемый New_Frozen, допустим, нам нужно знать, кто из пользователей что делал. В этой ситуации в обычной базе данных можно создать отдельную таблицу (набор таблиц) - лог операций и/или во всех остальных таблицах добавить поля CreatorId, CreatedDate, UpdaterId, UpdateDate (ID пользователей, создавших запись и последних изменивших ее, даты создания и последнего изменения) Как планируется журнализация действий в схеме с отдельной БД пользователей? Оно, конечно, реализуемо, но если запись в одной БД, а ID пользователя - в другой, то не получится реализовать ограничения целостности в виде связей между данной таблицей и таблицей пользователей. Я бы задумался о переходе на Oracle и реализации в рамках одной БД нескольких схем - административной схемы (пользователи, привилегии, журналы действий и т.д.) и отдельных схем с наборами таблиц для каждого из приложений. Правда, это будет мегаработа: если Ваши приложения работают с БД напрямую (без слоя ORM), то их тупо придется переписывать. Возможно, в MS SQL Server есть нечто подобное схемам Oracle. Как вариант - вынести пользователей в отдельную БД и в каждой из рабочих баз подключить эту БД в качестве внешнего источника (как гетерогенные источники данных в Oracle). Но вообще идея с отдельной БД плоха, вариант с ее выходом из строя - ярчайший косяк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2010, 00:51 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
JohnSparrowдопустим, нам нужно знать, А можем и допустить, что не нужно :) JohnSparrowто не получится реализовать ограничения целостности в виде связей Очень спорно, но допустим. JohnSparrowПравда, это будет мегаработа: И всё ради того, чтобы реализовать один внешний ключ JohnSparrowесли Ваши приложения работают с БД напрямую (без слоя ORM), то их тупо придется переписывать. Ну а с ORM ещё хуже. JohnSparrowВозможно, в MS SQL Server есть нечто подобное схемам Oracle. В некотором смысле есть. Databases. JohnSparrowНо вообще идея с отдельной БД плоха, вариант с ее выходом из строя - ярчайший косяк. (задумчиво) Скажите это мелкософту с его AD, Ораклу с его OID и прочим.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2010, 01:04 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
softwarer, Вас не затруднит конкретизировать свои замечания? Есть ряд моментов, которые можно рассмотреть в контексте обсуждаемой темы, но покамест Ваши соображения неочевидны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2010, 01:55 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
JohnSparrow, главное моё соображение (которое почему-то беспатентно свистнули и используют мировые вендоры) в том, что поддержка одной хорошо сделанной базы выходит много дешевле и надёжнее, нежели интеграция между собой кучи разнородных модулей. Собственно, любой, кто пытался сделать в интернете "один пароль на основные ресурсы" знает, что это почти нереально: один сервер допускает в пароле только латинские буквы, другой требует символы типа #$%^@, третий хочет разный регистр, а аська так вообще режет по восьми символам. И вот такое вот развлечение предстоит по Вашей милости пользователям.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2010, 02:01 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
softwarerJohnSparrow, главное моё соображение (которое почему-то беспатентно свистнули и используют мировые вендоры) в том, что поддержка одной хорошо сделанной базы выходит много дешевле и надёжнее, нежели интеграция между собой кучи разнородных модулей. Честно говоря, это самое главное соображение я и имел в виду, когда писал, что неплохо бы сделать единую базу данных с набором схем для каждого приложения (его предметной области и модели данных). Относительно AD/OID. Не спорю, но в данном случае речь идет о создании дополнительной обычной БД пользователей, которую нужно защищать от сбоев и т.п. Налицо явное умножение сущностей, бритва Оккама со всеми вытекающими. Вопрос: почему с ORM еще хуже, т.е. придется потратить больше сил и времени на переписывание кода клиентов, использующих ORM, чем тех, которые работают со своими БД напрямую? Если, конечно, я правильно Вас понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2010, 02:19 |
|
||
|
БД пользователей
|
|||
|---|---|---|---|
|
#18+
New_Frozenbaracs, Опишите Вашу идею как это организовать, потому что я ищу дополнительную информацию и хочу в этом разобраться. Почитайте про Windows Authentication MS SQL, про роли сервера и БД... Подсказка: доменной группе можно предоставить доступ к SQL Server-у и отобразить ее как пользователя конкретной БД. Причем, скуль будет различать виндовых пользователей, входящих в эту группу, по их логинам. З.Ы. Это не моя идея, а обычная практика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2010, 11:29 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36960002&tid=1542443]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 211ms |
| total: | 472ms |

| 0 / 0 |
