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

Вниз

Как программно получить информацию о ROLE   Найти похожие ветки 

 
Term ©   (2004-04-14 17:28) [0]

Как программно получить информацию о ROLE


 
Term ©   (2004-04-14 17:28) [0]

Как программно получить информацию о ROLE


 
Johnmen ©   (2004-04-14 17:34) [1]

Это кто такой/такая ?
:)
Кстати, есть системные таблицы...


 
Johnmen ©   (2004-04-14 17:34) [1]

Это кто такой/такая ?
:)
Кстати, есть системные таблицы...


 
Term ©   (2004-04-14 17:34) [2]

т.е. я имел ввиду, информацию о правах


 
Term ©   (2004-04-14 17:34) [2]

т.е. я имел ввиду, информацию о правах


 
bds   (2004-04-15 11:26) [3]

Вот один из методов. В текст запроса пишешь:

Query.sql.add("SELECT RDB$USER,RDB$PRIVILEGE,RDB$RELATION_NAME "+
"FROM RDB$USER_PRIVILEGES WHERE UPPER(RDB$USER)=?AUser AND UPPER"+"(RDB$RELATION_NAME)=?ARelation");

AUser - имя пользователя или роли
ARelation - имя таблицы/View/Procedure
Ну а дальше "собираешь" права на обьект:

Rights:=[]; // множество прав на обьект
while not Query.eof do
begin
if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="S" then Rights:=Rights+[rtSelect];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="I" then Rights:=Rights+[rtInsert];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="U" then Rights:=Rights+[rtUpdate];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="D" then Rights:=Rights+[rtDelete];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="X" then Rights:=Rights+[rtExecute];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="R" then Rights:=Rights+[rtReference];
     Next;
    end;


 
bds   (2004-04-15 11:26) [3]

Вот один из методов. В текст запроса пишешь:

Query.sql.add("SELECT RDB$USER,RDB$PRIVILEGE,RDB$RELATION_NAME "+
"FROM RDB$USER_PRIVILEGES WHERE UPPER(RDB$USER)=?AUser AND UPPER"+"(RDB$RELATION_NAME)=?ARelation");

AUser - имя пользователя или роли
ARelation - имя таблицы/View/Procedure
Ну а дальше "собираешь" права на обьект:

Rights:=[]; // множество прав на обьект
while not Query.eof do
begin
if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="S" then Rights:=Rights+[rtSelect];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="I" then Rights:=Rights+[rtInsert];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="U" then Rights:=Rights+[rtUpdate];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="D" then Rights:=Rights+[rtDelete];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="X" then Rights:=Rights+[rtExecute];
     if Copy(Trim(FieldByName("RDB$PRIVILEGE").AsString),1,1)="R" then Rights:=Rights+[rtReference];
     Next;
    end;


 
Val ©   (2004-04-15 11:41) [4]

12 Пользователи, права
Для того, что бы получить доступ к базе данных, нужно быть пользователем, прописанным на InterBase-сервере, и иметь пароль. Но этого не достаточно, чтобы оперировать с объектами базы данных. Пользователь должен иметь права на выполнение той или иной операции.
Посмотреть, какие пользователи известны серверу можно, используя базу данных Isc4.gdb.

 select USER_NAME, FIRST_NAME, MIDDLE_NAME, LAST_NAME
 from USERS
 order by USER_NAME;

Этот запрос даст список имен пользователей, а также их имена и фамилии. Помимо пользователей обычных можно определять роли, давать им права, а потом пользователям назначать роли.
Посмотрим, какие роли есть в базе данных.

select * from RDB$ROLES;

Поле RDB$ROLE_NAME - содержит имя роли, а поле RDB$OWNER_NAME - содержит имя пользователя, создавшего роль.
Посмотрим теперь, что можно узнать про права того или иного пользователя, по отношению к объектам базы данных. Информацию об этом можно найти в таблице RDB$USER_PRIVILEGES.

 select RDB$GRANTOR, RDB$PRIVILEGE, RDB$GRANT_OPTION, RDB$RELATION_NAME
 from RDB$USER_PRIVILEGES
 where RDB$USER="SVETA";

Приведенный выше SQL-запрос показывает все права пользователя SVETA. Поле RDB$GRANTOR - содержит имя пользователя, предоставившего это право. RDB$PRIVILEGE - описывает привилегию (расшифровка значений приведена в документации). RDB$GRANT_OPTION определяет, может ли пользователь, получивший эту привилегию, передать ее другому пользователю. Если значение равно единице, то такая возможность есть. RDB$RELATION_NAME - наименование объекта базы данных, для которого привилегия допустима. А как узнать привилегии, назначенные ролям?

 select a.RDB$USER, a.RDB$GRANTOR, a.RDB$PRIVILEGE,
   a.RDB$GRANT_OPTION, a.RDB$RELATION_NAME
 from RDB$USER_PRIVILEGES a, RDB$ROLES b
 where a.RDB$USER = b.RDB$ROLE_NAME;

Этот запрос почти идентичен предыдущему по выдаваемым результатам, кроме поля a.RDB$USER. Оно содержит, в данном случае, наименование роли.
Изменив немного предыдущий запрос, можно узнать, права каких ролей кому предоставлены.

 select a.RDB$USER, a.RDB$GRANTOR, a.RDB$PRIVILEGE,
    a.RDB$GRANT_OPTION, a.RDB$RELATION_NAME
 from RDB$USER_PRIVILEGES a, RDB$ROLES b
 where a.RDB$RELATION_NAME = b.RDB$ROLE_NAME;


 
Val ©   (2004-04-15 11:41) [4]

12 Пользователи, права
Для того, что бы получить доступ к базе данных, нужно быть пользователем, прописанным на InterBase-сервере, и иметь пароль. Но этого не достаточно, чтобы оперировать с объектами базы данных. Пользователь должен иметь права на выполнение той или иной операции.
Посмотреть, какие пользователи известны серверу можно, используя базу данных Isc4.gdb.

 select USER_NAME, FIRST_NAME, MIDDLE_NAME, LAST_NAME
 from USERS
 order by USER_NAME;

Этот запрос даст список имен пользователей, а также их имена и фамилии. Помимо пользователей обычных можно определять роли, давать им права, а потом пользователям назначать роли.
Посмотрим, какие роли есть в базе данных.

select * from RDB$ROLES;

Поле RDB$ROLE_NAME - содержит имя роли, а поле RDB$OWNER_NAME - содержит имя пользователя, создавшего роль.
Посмотрим теперь, что можно узнать про права того или иного пользователя, по отношению к объектам базы данных. Информацию об этом можно найти в таблице RDB$USER_PRIVILEGES.

 select RDB$GRANTOR, RDB$PRIVILEGE, RDB$GRANT_OPTION, RDB$RELATION_NAME
 from RDB$USER_PRIVILEGES
 where RDB$USER="SVETA";

Приведенный выше SQL-запрос показывает все права пользователя SVETA. Поле RDB$GRANTOR - содержит имя пользователя, предоставившего это право. RDB$PRIVILEGE - описывает привилегию (расшифровка значений приведена в документации). RDB$GRANT_OPTION определяет, может ли пользователь, получивший эту привилегию, передать ее другому пользователю. Если значение равно единице, то такая возможность есть. RDB$RELATION_NAME - наименование объекта базы данных, для которого привилегия допустима. А как узнать привилегии, назначенные ролям?

 select a.RDB$USER, a.RDB$GRANTOR, a.RDB$PRIVILEGE,
   a.RDB$GRANT_OPTION, a.RDB$RELATION_NAME
 from RDB$USER_PRIVILEGES a, RDB$ROLES b
 where a.RDB$USER = b.RDB$ROLE_NAME;

Этот запрос почти идентичен предыдущему по выдаваемым результатам, кроме поля a.RDB$USER. Оно содержит, в данном случае, наименование роли.
Изменив немного предыдущий запрос, можно узнать, права каких ролей кому предоставлены.

 select a.RDB$USER, a.RDB$GRANTOR, a.RDB$PRIVILEGE,
    a.RDB$GRANT_OPTION, a.RDB$RELATION_NAME
 from RDB$USER_PRIVILEGES a, RDB$ROLES b
 where a.RDB$RELATION_NAME = b.RDB$ROLE_NAME;


 
Term ©   (2004-04-15 11:53) [5]

спасибо


 
Term ©   (2004-04-15 11:53) [5]

спасибо



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

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

Наверх




Память: 0.49 MB
Время: 0.036 c
4-1079598088
Radiant
2004-03-18 11:21
2004.05.09
Смена шрифтов в стандартных диалогах и на Caption е формы


1-1082437216
Learner
2004-04-20 09:00
2004.05.09
stdcall Есть ли принципиальная разница ?


14-1081748022
Ega23
2004-04-12 09:33
2004.05.09
Кстати, о БД


1-1082379131
ksa3003
2004-04-19 16:52
2004.05.09
DateTimePicker


14-1082523056
Kolyan
2004-04-21 08:50
2004.05.09
Turbo Pascal 7.0





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский