Главная страница
    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.037 c
8-1074332995
*BES*
2004-01-17 12:49
2004.05.09
Управление потоком!!!!


8-1076424193
Maverick
2004-02-10 17:43
2004.05.09
ImageEn


3-1081937227
Турчин
2004-04-14 14:07
2004.05.09
Как можно средствами Delphi обратится к базе данных?


11-1068699751
Ciber SLasH
2003-11-13 08:02
2004.05.09
Чё за обработчик OnChar


6-1079223072
Vitaliy
2004-03-14 03:11
2004.05.09
Как вытащить в ссылки из html документа





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