Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Как программно получить информацию о 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
8-1076286432
Maratus
2004-02-09 03:27
2004.05.09
Прорисовка двигающегося выделения как в графических пакетах


1-1082383062
killer
2004-04-19 17:57
2004.05.09
передача переменной TStringList из DLL


14-1081961623
Fay
2004-04-14 20:53
2004.05.09
Что случилось с орешником?


1-1082361509
xman
2004-04-19 11:58
2004.05.09
Конвертор


1-1082661442
Yegorchic
2004-04-22 23:17
2004.05.09
TImage.Picture.Loadfromfile





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