Форум: "Базы";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизSecurity INTERBASE Найти похожие ветки
← →
axelrodm (2003-07-13 11:19) [0]Уважаемые знатоки INTERBASE!
Как создать среду для LOCAL INTERBASE, чтобы
USER выполнял все действия только через хранимые процедуры,
НЕ ИМЕЯ доступа к таблицам!
Пытался решать задачу так.
Строил процедуру с правами на Таблицу и USER-Mikl с правами на выполнение этой процедуры и без прав на таблицу. В результате при запуске процедуры получаю сообщение, что USER не имеет доступа к ТАБЛИЦЕ!!!
Тексты привожу ниже.
CONNECT "D:\timetable\schooltimetable.gdb" USER "SYSDBA" PASSWORD "masterkey";
SET TERM ^ ;
/* CLIENT */
CREATE PROCEDURE REGISTR_CLIENT (
C_NAME VARCHAR(80),
C_ADDRESS VARCHAR(80),
C_PASSWORD VARCHAR(32))
RETURNS (
C_ID INTEGER,
C_NICKNAME VARCHAR(250))
AS
begin
/* Procedure Text */
insert into client(CLIENT_NAME,CLIENT_ADDRESS,CLIENT_PASSWORD)
values(:c_name,:c_address,:c_password);
select CLIENT_ID, CLIENT_NICKNAME from client where
CLIENT_NAME=:c_name and
CLIENT_ADDRESS=:c_address and
CLIENT_PASSWORD=:c_password
into :c_id, :c_nickname;
suspend;
end
^
GRANT ALL on CLIENT to registr_client;
GRANT EXECUTE ON PROCEDURE registr_client to mikl;
← →
Rad (2003-07-13 11:27) [1]
GRANT INSERT, SELECT ON client TO PROCEDURE Registr_Client;
RTFM, в общем ;-))
← →
Rad (2003-07-13 11:33) [2]
GRANT ALL on CLIENT to registr_client;
дает права пользователю registr_client (и неважно, что он не существует).
P.S. Да, и не подсоединяйся к базе локально (CONNECT "D:\timetable\schooltimetable.gdb"
) - на более новых версиях FB это вообще невозможно), потому что несколько одновременных локальных коннектов не могут работать параллельно, а одновременные локальный и удаленный - могут запороть базу.
Пиши, в общем,CONNECT "localhost:D:\timetable\schooltimetable.gdb"
← →
axelrodm (2003-07-13 11:52) [3]Пожалуйста прокомментируйте подробней ответ
> GRANT ALL on CLIENT to registr_client;
> дает права пользователю registr_client (и неважно, что он
> не существует).
Не понятно как USER mikl может обратиться к USER/procedure registr_client
← →
Rad (2003-07-13 11:57) [4]> Не понятно как USER mikl может обратиться к USER/procedure registr_client
Если естьGRANT EXECUTE ON PROCEDURE registr_client TO mikl
, а у процедуры естьGRANT ALL ON client TO PROCEDURE registr_client
- то все должно работать.
← →
axelrodm (2003-07-13 12:38) [5]Перезагрузил сервер.
запустил Скрипт
CONNECT "localhost:D:\timetable\schooltimetable.gdb" USER "SYSDBA" PASSWORD "masterkey";
revoke all on CLIENT from procedure REGISTR_CLIENT;
revoke all on REGISTR_CLIENT from MIKL;
commit;
GRANT ALL on CLIENT to procedure REGISTR_CLIENT;
GRANT EXECUTE ON PROCEDURE REGISTR_CLIENT to MIKL;
commit;
CONNECT "localhost:D:\timetable\schooltimetable.gdb" USER "MIKL" PASSWORD "aaa";
select C_ID, C_NICKNAME from REGISTR_CLIENT("jkhkjh","76575","pppp");
Плучил ответ
This user dos not have privilege to perform this operation on this object. no permition fo references access to table CLIENT
Запустил скрипт на SYSDBA и все прошло!
CONNECT "localhost:D:\timetable\schooltimetable.gdb" USER "SYSDBA" PASSWORD "masterkey";
revoke all on CLIENT from procedure REGISTR_CLIENT;
revoke all on REGISTR_CLIENT from MIKL;
commit;
GRANT ALL on CLIENT to procedure REGISTR_CLIENT;
GRANT EXECUTE ON PROCEDURE REGISTR_CLIENT to MIKL;
commit;
PASSWORD "aaa";
select C_ID, C_NICKNAME from REGISTR_CLIENT("jkhkjh","76575","pppp");
← →
axelrodm (2003-07-13 13:08) [6]
Спасибо всем за участие
Проблема решается представлением MIKL
GRANT references on CLIENT to MIKL;
Иными словами.
GRANT ALL on CLIENT to procedure REGISTR_CLIENT;
GRANT EXECUTE ON PROCEDURE REGISTR_CLIENT to MIKL;
GRANT references on CLIENT to MIKL;
С уважением. Михаил Аксельрод
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c