Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Security  INTERBASE [D6, MSSQL]


axelrodm ©   (2003-07-13 11:19:00) 

Уважаемые знатоки 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;


axelrodm   (2003-07-13 13:08:00) [1]


Спасибо всем за участие

Проблема решается представлением 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;


С уважением. Михаил Аксельрод


axelrodm   (2003-07-13 12:38:00) [2]

Перезагрузил сервер.
запустил Скрипт
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");


Rad   (2003-07-13 11:57:00) [3]

> Не понятно как 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 11:52:00) [4]

Пожалуйста прокомментируйте подробней ответ


> GRANT ALL on CLIENT to registr_client;
> дает права пользователю registr_client (и неважно, что он
> не существует).


Не понятно как USER mikl может обратиться к USER/procedure registr_client


Rad   (2003-07-13 11:33:00) [5]

GRANT ALL on CLIENT to registr_client;
дает права пользователюregistr_client (и неважно, что он не существует).
P.S. Да, и не подсоединяйся к базе локально ( CONNECT "D:\timetable\schooltimetable.gdb") - на более новых версиях FB это вообще невозможно), потому что несколько одновременных локальных коннектов не могут работать параллельно, а одновременные локальный и удаленный - могут запороть базу.
Пиши, в общем, CONNECT "localhost:D:\timetable\schooltimetable.gdb"


Rad   (2003-07-13 11:27:00) [6]

GRANT INSERT, SELECT ON client TO PROCEDURE Registr_Client;
RTFM, в общем ;-))


Наверх

Титульная страница Поиск, карта сайта Написать письмо