Форум: "Базы";
Текущий архив: 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