Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];

Вниз

Многопользовательность в БД   Найти похожие ветки 

 
Inkotex   (2003-05-05 19:34) [0]

Может кто подскажет как реалезовать правильно(нормально) в interbase многопользовательский доступ к БД с заданием разных уровней доступа к даным?
Спасибо


 
MsGuns   (2003-05-05 20:11) [1]

Роли, домены,..


 
Desdechado   (2003-05-05 20:17) [2]

домены из другой оперы
а вот роли и просто пользователи могут иметь разные права через GRANT на доступ к таблицам, вьюхам, процедурам и пр.
читай LanguageReference


 
Inkotex   (2003-05-05 20:23) [3]

Проблема в том что при связывании пользователя с ролями в InterBase ничего не происходит(нету доступа), может быть ето глюк Interbase? Может кто подскажет как средствами Delphi ето решить. Может кто примечик подкинет?
Спасибо


 
Zacho   (2003-05-05 21:49) [4]


> Inkotex (05.05.03 20:23)

Причем здесь Дельфи ? И никакого глюка в IB нет, а если бы и был, то "средствами Delphi ето решить" просто невозможно :-) Напиши как делаешь с примером.
Кратко, схема действий такая. Создаешь роли (CREATE ROLE), даешь им нужные права на объекты БД (GRANT .. ON .. TO rolename), даешь права определенным юзерам подключаться с определенными ролями (GRANT rolename TO userlist). Читай главу "Planning Security" в Data Definition Guide (сейчас под рукой нет, так что название главы пишу по памяти, могу немного и ошибиться) - там все подробно и с примерами, и Language Reference -Chapter 2 "SQL Statement and Function Reference" про CREATE ROLE, GRANT, REVOKE и т.п. Еще посмотри статьи на http://www.ibase.ru - там тоже что-то было на эту тему.


 
Zacho   (2003-05-05 22:08) [5]

Еще немного добавлю. Для нормальной многопользовательской работы с БД кроме разграничения прав доступа к обьектам БД еще очень важно правильно разработать стратегию использования транзакций при конкуррентном доступе к данным. По этому вопросу читай статьи на http://www.ibase.ru/develop.htm раздел "Транзакции, архитектура IB"


 
Inkotex   (2003-05-05 22:31) [6]

Zacho большое спасибо. Правда то что ты описал в первом сообщение оно и не получается, но буду пытатся разобратся. Всеровно спасибо (может у тебя есть пример?)


 
Zacho   (2003-05-05 23:04) [7]


> Inkotex (05.05.03 22:31)

А примеры есть в Data Definition Guide - довольно простые и понятные даже при слабом знании английского.
Ну вот простой пример. Предположим, есть таблица MY_TABLE. Создаем роль "SOME_ROLE": CREATE ROLE SOME_ROLE
Даем ей все права на MY_TABLE: GRANT ALL ON MY_TABLE TO SOME_ROLE
Даем пользователю "VASYA" право на эту роль: GRANT SOME_ROLE TO VASYA
После этого если пользователь VASYA подключится к БД с ролью SOME_ROLE то у него будут права на чтение, удаление, вствку и изменение данных в таблице MY_TABLE
Если не получится, напиши более подробно, что делаешь и что получаешь в результате.


 
Zacho   (2003-05-05 23:17) [8]

Еще могу дать небольшой совет:
Попробуй все это проделать в IB Expert"е - там есть довольно удобные Менеджер пользователей и Менеджер прав. А потом просто извлеки метаданные базы и посмотри как это выглядит на SQL.


 
Inkotex   (2003-05-05 23:25) [9]

Zacho ето я и делаю и типа все работает, но есть одна загвоздка с какой я не могу розобратся:
Сделал я всю базу в Interbase под пользоватилем SYSDBA
Когда я ставлю LoginPromt:=true програма відает запрос на логин тут все легко SYSDBA сделал базу он ее хозяин он имеет полный доступ. Тепер как ты описал сделал роль God со всеми правами как у SYSDBA (Grant ALL to my_table to god with admin option)
В Interbase сделал нового юзера VASYA,
Присвоил VASYA роль God Grant god to Vasya
Запускаю програму конекчусь к базе под логином VASYA выдает ошибку нет доступа типа нет прав на обзор, удаление ... и т.д
Тепер принудительно в IBDATABESE ставлю в PARAMS role_name:=God
все работает но етож не правильно. Как с каими параметрами мне конектится к базе чтоб динамически подключались изеры к существующим ролям. немогу понять к де ето задается?
\Спасибо


 
Zacho   (2003-05-05 23:40) [10]


> Inkotex (05.05.03 23:25)

Именно это и правильно. Если подключаешься без указания роли - действуют права пользователя, если с указанием роли - права роли. Честно говоря не понял, в чем проблема. И плюнь на стандартый LoginPrompt, сделай свой диалог подключения к базе, с выбором (вводом) роли если надо.


 
Inkotex   (2003-05-06 00:00) [11]

Тут мне тогда не понятен один момент
Когда я через IBConsole сделал несколько юзеров, потом в самой базе сделал несколько ролей.
Как мне сделать чтоб я задал(привязал) какому юзеру соответствует какая роль, и он только вводил свое им’я и пароль. тоесть с одного компютера можна иметь разные права доступа в зависимости от имени пользоватиля. А так я понимаю что с одного компютера(рабочего места) разные пользователи будут заходить под своим именем но под ролю котораю зашита в PARAMS даного екземпляра прогамы.
Или я опять чевото не догоняю.
Спасибо зарания.


 
Zacho   (2003-05-06 00:23) [12]


> Inkotex (06.05.03 00:00)

Кажись, ты не догоняешь две вещи :-)
1. Вовсе не нужно делать по роли на каждого юзера. Как раз наоборот, роли нужны чтобы особенно не морочиться с раздачей прав юзерам. Принцип такой: создал роль, дал ей нужные права, потом просто даешь нужным пользователям право подключаться с этой ролью. Например GRANT SOME_ROLE TO VASYA,PETYA,KOLYA,KATYA. Если это делать без ролей, то нужно каждому юзеру давать все необходимые права, что гораздо морочнее. Кроме того, ролей может быть несколько с разными правами. И, естественно, у разных юзеров могут быть права на разные роли.
2. "Прошивать" роль в Params вовсе не обязательно, обычно делается как раз наоборот - в диалоге подключения к БД пользователь может выбрать нужную роль. Или у тебя проблемы с работой с Params в run-time ? Ну там уж совсем все просто, нужно знать азы программирования на Object Pascal и немного почитать хелп по IBX (или тем компонентам, которыми ты пользуешься)
P.S. IB Console - глюкотень еще та. Список инструментов для работы с IB есть на http://www.ibase.ru/d_tools.htm
Лично мне больше всего нравится IB Expert.


 
Inkotex   (2003-05-06 00:27) [13]

Спасибо Zacho небуду больше надоедать как небуть уже разберусь
главное я знаю что я на правильном пути.


 
Zacho   (2003-05-06 00:37) [14]


> Inkotex (06.05.03 00:27)

Да можешь и понадоедать, пока я спать не лег :-)


 
Inkotex   (2003-05-06 00:50) [15]

Zacho может у тебя есть готовий пример базы + прога на Delphi?
был бы признателен так я точно пойму где ошибку делаю.


 
Zacho   (2003-05-06 00:56) [16]


> Inkotex (06.05.03 00:50)

Да примеры у меня большие довольно. И выдирать из них нужные куски - во-первых лень, во-вторых черевато тем, что получится что-то непонятное и неработающее :-)
Лучше опиши свою проблему, может я (или кто другой) что-нибудь и посоветую.


 
Zacho   (2003-05-06 01:08) [17]

Кстати, если у тебя проблемы именно с ролями - то можешь вообще их не использовать (и соответственно не указывать роль при подключении) - просто давай нужные права юзерам и все.


 
Inkotex   (2003-05-06 01:16) [18]

Проблема у меня одна что в теории все понятно как надо
а на практике получается совсем не то.
Я хочу сделать например
есть база есть програма несколько пользоватилей
сделать несколько пользоватилей с полним доступом делит, инсерт
несколько пользователей с доступом только на выборку селект
+ несколько на селект но всех даных(таблиц)
В базе делаю соответствующии роли с указаниям Grant на соответствующии таблицы и процедуры
Потом через Grant в IBConsole связываю роль с юзерам GRANT SOME_ROLE TO SOME_USER
Тут мне не совсем понятно что дальше + юзери програми могут быть только те которые обявлени в IB (users)я так понемаю?


 
Inkotex   (2003-05-06 01:21) [19]

Давать юзерам права так намного проще но когда много юзеров будет и много таблиц, процедур + несколько юзеров с одними и теми задачами ето не выход для етого как я понимаю и есть роли.



 
Zacho   (2003-05-06 01:30) [20]


> Inkotex (06.05.03 01:21)

Правильно понимаешь. Но не только для этого.

> Inkotex (06.05.03 01:16)

В IB пользователи заводятся на сервер, т.е. общий список пользователей для всех БД на конкретном сервере. А в каждой конкретной БД можно создать свои роли дать какие-либо права на объекты именно этой БД конкретым пользователям и/или ролям.

> Тут мне не совсем понятно что дальше + юзери програми могут
> быть только те которые обявлени в IB (users)я так понемаю?

Опять же, правильно понимаешь ;-) (только не программ, а БД), а в чем затруднения ?


 
Inkotex   (2003-05-06 01:43) [21]

Да я понимаю что пользователе для всех бд на сервере
а каждая конкретная бд имеет свои роли и тд..

Я некак не могу доехать хотя понимаю что ето должно и есть очивидное.

После того как делаеш пользоватилей, роли, после того как в БД
делаеш GRANT SOME_ROLE TO SOME_USER, что дальше?

Как в програме при логине связываеться введеное имя пользователя с ролю, потому что у меня не работает почемуто.


 
Zacho   (2003-05-06 01:53) [22]


> Inkotex (06.05.03 01:16)

Кажется, я понял что ты хочешь. Если что не так, поправь.
Предположим, тебе надо, чтобы было три группы юзеров. Администраторы, операторы, и, скажем гости - у каждой группы свои права. Создаешь три роли (например, administrator, operator, guest), назначаешь им нужные права. После этого при создании нового пользователя даешь ему права на одну из этих ролей (или даже на несколько ролей - вполне реальная ситуация, когда один и тот же пользователь может подключиться к БД и как админ и как оператор). В диалоге подключения (обычно он же - форма входа в программу) делаешь поля ввода для имени пользователя, пароля и комбобокс для выбора роли (можешь обозвать его "Роль" или "Группа" или "Профиль" или еще как-нибудь, главное чтобы юзеру было понятно что это такое) с тремя итемами - "Администратор", "Оператор", "Гость". В обработчике нажатия кнопки "Ok" (или где тебе там надо) подставляешь в Database.Params введенные юзером имя и пароль, и, в зависимости от того, что выбрано в комбобоксе, имя роли.
Естественно, это только довольно абстрактный пример, конкретная реализация - зависит от твоей задачи.


 
Inkotex   (2003-05-06 02:03) [23]

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


 
Zacho   (2003-05-06 02:05) [24]


> Inkotex (06.05.03 01:43)
> Как в програме при логине связываеться введеное имя >пользователя с ролю, потому что у меня не работает почемуто.

Никак. Роль указывается при логине. Какую роль укажешь - с такой юзер и подключится, конечно если у него есть права на эту роль.


 
Zacho   (2003-05-06 02:12) [25]


> Inkotex (06.05.03 02:03)

Какая-то рассинхронизация у нас между постами пошла :-)

> Да все правильно только стой разницей что пользователь не
> должен сам выбирать себе роль(нельзя ему), или проверка
> типа пользователь вася может быть только гость и если он
> поставит в комбо боксе админ выдаст ошибку.
> Вот ето я и не как не доганяю как реализовать?

Пусть сам выбирает себе роль. Если выберет роль, на которую у него нет прав - при попытке подключения получишь ошибку. Обработай ее ( try .. except .. ) и выдавай какое-либо сообщение или что-нибудь делай.
Еще можешь где-нибудь держать список пользователей и допустимых для них ролей. При выборе имени пользователя брать из этого списка роль. Но это имхо криво.


 
Inkotex   (2003-05-06 02:16) [26]

Ага я наконец понял (надеюсь)
Типа при логине указывается имя пароль роль
Например Vasya ***** God
и тогда имя и пароль провереется в IB (users)
а соответсвие имени к даной роле в конкретной БД
и типа если в базе было указано Grant god to Vasya, тогда все ок
если нет и типа вася связан с другой ролю то должна выдаватся ошибка. Я правильно понемаю?
Тогда к примеру реализуется в програме соответствующая форма (логин) к де по событию нажатию на кнопке ете даные передаються в IBDatabase и там проверяються.


 
Zacho   (2003-05-06 02:28) [27]


> Inkotex (06.05.03 02:16)

Правильно. Делаешь что-то типа:

заполнение Params
try
Database.Connect;
except
подключиться не удалось, обрабатываем ошибку подключения, выдаем сообщение и т.п.
end;


 
Inkotex   (2003-05-06 02:30) [28]

Большое спосибо Zacho, теперь я могу спокойно ити спать:)


 
Zacho   (2003-05-06 02:50) [29]


> Inkotex (06.05.03 02:30)

Может быть и не можешь еще :-)
Че-то кажется я прогнал :-( Самому спать вовремя надо было :-)
Кажется мне что при подключении ты ошибку не получишь. Придется проверять после подключения к базе, и если надо - отключаться. В общем, проверь, а то я уже плохо соображаю, спать надо.


 
Johnmen   (2003-05-06 10:12) [30]

>Zacho © (06.05.03 02:50)
>Че-то кажется я прогнал

Правильно подмечено...:)


 
Zacho   (2003-05-06 10:58) [31]


> Johnmen © (06.05.03 10:12)
> Правильно подмечено...:)

Еще бы не правильно :-) Явную чушь спорол :(
В общем, после подключения надо выполнить запрос:
SELECT COUNT(*) FROM RDB$USER_PRIVILEGES WHERE RDB$USER=:USER_NAME AND RDB$PRIVILEGE="M" AND RDB$RELATION_NAME=:ROLE_NAME
Если вернет 0 - значит нет у такого пользователя прав на эту роль.
Кстати, а никто не знает способ проще ?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.007 c
14-83739
Hacker.
2003-05-03 08:37
2003.05.26
Извлечение из ресурсов


14-83731
voland0
2003-05-07 09:26
2003.05.26
Переход с 4 версии Delphi на 7 - ю


3-83412
pok
2003-05-06 18:13
2003.05.26
Update одной таблице по результатам другой....


4-83806
Ик сик
2003-03-28 16:16
2003.05.26
Я пытаюсь поставить hook на нажатие левой кнопки мыши


1-83549
MAZA
2003-05-11 17:09
2003.05.26
TextFile





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский