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

Вниз

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

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

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


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

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


 
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;


 
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]

спасибо



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

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
6-1079858098
Wontar
2004-03-21 11:34
2004.04.11
Сетевой Трафик...


7-1075231094
Ig
2004-01-27 22:18
2004.04.11
Скрытие файлов, папок и др.


1-1079952889
martyanov
2004-03-22 13:54
2004.04.11
Проблемы с временем


6-1079338105
Yojik
2004-03-15 11:08
2004.04.11
ClientSocket при простое и отсутсвии связи... ХЕЛП


6-1075556382
Александр
2004-01-31 16:39
2004.04.11
Помогите отправить SMS с помощь программы