Раздача прав процедуре
Раздача прав процедуре
Есть процедура в котророй вызывается несколько процедур и открываются несколько таблиц.
Раздаю права для процедуры на доступ к этим объектам.
Но при вызове процедуры, выходит сообщение , что нет доступа к этим объектам. Приходится давать права на эти объекты пользователю.
Может я чтото не правильно делаю?
Для чего раздаются права процедуре.
Если убрать права процедуры на доступ к таблицам, а оставить права у пользователя то все работает
FireBird 1.5
Раздаю права для процедуры на доступ к этим объектам.
Но при вызове процедуры, выходит сообщение , что нет доступа к этим объектам. Приходится давать права на эти объекты пользователю.
Может я чтото не правильно делаю?
Для чего раздаются права процедуре.
Если убрать права процедуры на доступ к таблицам, а оставить права у пользователя то все работает
FireBird 1.5
А мужики то не знают (С):Олег писал(а):Для IB/FIB так и должно быть (диалект 1 так точно). ХП и триггера работают с "правами" пользователя их вызвавших.
Код: Выделить всё
SET TERM !;
create procedure test
returns (ID Int, DateReg Date)
as
begin
For Select ID, DateReg
From Classes
Into :ID, :DateReg
Do Suspend;
end!
SET TERM ;!
grant select on classes to procedure test;
grant execute on procedure test to GUEST;
Connect 'MyDataBase' User 'GUEST' Password 'A_Poh';
SET TIME;
/*Это намёк нащщет диалекта и типа Date для тех кто понимает*/
select * from test;
ID DATEREG
=========== ====================
1 11-NOV-1996 00:00:00
2 11-NOV-1996 00:00:00
3 11-NOV-1996 00:00:00
4 11-NOV-1996 00:00:00
6 11-NOV-1996 00:00:00
8 11-NOV-1996 00:00:00
11 11-NOV-1996 00:00:00
12 11-NOV-1996 00:00:00
13 11-NOV-1996 00:00:00
14 11-NOV-1996 00:00:00
21 4-MAR-1997 12:25:25
23 18-NOV-1997 15:14:44
LI-V1.5.1.4481 Firebird 1.5
а также всегда так было начиная с IB4 (это только на моей памяти).
Ы? Що я делаю неправильно? Имхо вам, робяты, надобно не жужжать, а либо не забывать синтаксис grant, то бишь помнить про слова procedure и trigger, дабы права не складывались на одноимённого юзера, пусть даже не существующего на данном сервере, либо опять же не забывать почитывать Release Notes, ежели пользуете Execute Statement.
Права на запуск этой процедуры есть.dimitr писал(а):Люди, вы все чего? Человек небось просто не дал права своему юзверю на EXECUTE этой процедуры.
Я не писал пользовался IBExpert. Права раздаю от пользователя SYSDBAMerlin писал(а): А король-то голый?Может и так. А я подумал что не написал слово procedure в гранте ей прав на таблицы
На тестовой базе все получается.
А на рабочей базе приходится довать пользователю помимо всего прочего права на SELECT таблицы. только после этого она запускается нормально.
А у процедуры можно отменть права на SELECT этой таблицы. Все равно процедура запускается.

уважаемый, так мы будем тут бесконечно в ступе воду толочь. Не хочешь приводить текст процедуры - ну и ладно. Процедуре должны быть выданы все права на все упоминаемые в ней объекты (в т.ч. на references), независимо от if и других "веток выполнения". Причем, вполне может быть что ты напоролся на какой то баг. Но без текста нам это неведомо. Насчет тестовой проверки - вполне возможно, что тест неидентичен оригиналу. Иначе "на тесте проходит, а в рабочей нет" - эквивалентно неопознанному стуку в подвале...
Код таблицы:
Процедура -

Код: Выделить всё
/******************************************************************************/
/*** Generated by IBExpert 28.04.05 9:25:36 ***/
/******************************************************************************/
SET SQL DIALECT 3;
SET NAMES WIN1251;
/******************************************************************************/
/*** Tables ***/
/******************************************************************************/
CREATE TABLE REPORT (
TJ DOUBLE PRECISION,
FIFTEN DOUBLE PRECISION,
PH DOUBLE PRECISION,
ROLLOUT DOUBLE PRECISION,
FIRST_BL DOUBLE PRECISION,
FIFTH_BL DOUBLE PRECISION,
TENTH_BL DOUBLE PRECISION,
EITEENTH_BL DOUBLE PRECISION,
FIRST_BL2 DOUBLE PRECISION,
FIFTH_BL2 DOUBLE PRECISION,
TENTH_BL2 DOUBLE PRECISION,
EITEENTH_BL2 DOUBLE PRECISION,
DAY_OF DATE NOT NULL,
TIME_ID DOM_HOUR /* DOM_HOUR = SMALLINT Default 1 NOT NULL CHECK (VALUE between 1 and 24) */
);
/******************************************************************************/
/*** Primary Keys ***/
/******************************************************************************/
ALTER TABLE REPORT ADD PRIMARY KEY (DAY_OF, TIME_ID);
/******************************************************************************/
/*** Privileges ***/
/******************************************************************************/
/* Privileges of users */
GRANT ALL ON REPORT TO DEVELOPER WITH GRANT OPTION;
GRANT ALL ON REPORT TO MECHANICS WITH GRANT OPTION;
/* Privileges of roles */
GRANT SELECT, INSERT, UPDATE ON REPORT TO BOSSSMEN;
GRANT SELECT, INSERT, UPDATE, DELETE ON REPORT TO OPERATORS_C2;
/* Privileges of procedures */
GRANT SELECT ON REPORT TO PROCEDURE COLLECTOR_PERIOD;
GRANT SELECT ON REPORT TO PROCEDURE COLLECTOR_SMENA_DAY;
GRANT SELECT ON REPORT TO PROCEDURE PULP_EXHAUST_HOUR_DAY;
GRANT SELECT ON REPORT TO PROCEDURE PULP_EXHAUST_PERIOD;
GRANT SELECT ON REPORT TO PROCEDURE PULP_PH_HOUR_DAY;
GRANT SELECT ON REPORT TO PROCEDURE PULP_PH_PERIOD;
GRANT SELECT ON REPORT TO PROCEDURE PULP_TJ_HOUR_DAY;
GRANT SELECT ON REPORT TO PROCEDURE PULP_TJ_PERIOD;
GRANT SELECT ON REPORT TO PROCEDURE SAND_CONTENT_HOUR_DAY;
GRANT SELECT ON REPORT TO PROCEDURE SAND_CONTENT_PERIOD;
GRANT SELECT ON REPORT TO PROCEDURE TABLE_BOSS_SHIFT;
GRANT SELECT ON REPORT TO PROCEDURE TABLE_WORK_FACTORY_2;
Код: Выделить всё
SET TERM ^ ;
CREATE PROCEDURE TABLE_WORK_FACTORY_2 (
PARAM_DATE DATE)
RETURNS (
ACCEPTED_ORES_DAY DOUBLE PRECISION,
ACCEPTED_ORES_DAY_DIFFERENCE DOUBLE PRECISION,
ACCEPTED_ORES_BEGINNING_MONTH DOUBLE PRECISION,
ACCEPTED_ORES_BEGIN_MONTH_DIFF DOUBLE PRECISION,
PERCENT_FILLING_BUNKER_BEGIN DOUBLE PRECISION,
PERCENT_FILLING_BUNKER_END DOUBLE PRECISION,
PROCESSING_SCALES_SHOP2_DAY DOUBLE PRECISION,
PROCESSING_SCALES_SHOP2_DIFF_D DOUBLE PRECISION,
PROCESSING_SCALES_SHOP2_BM DOUBLE PRECISION,
PROCESSING_SCALES_SHOP2_DIFF_BM DOUBLE PRECISION,
PROCESSING_ON_BUNKER_DAY DOUBLE PRECISION,
PROCESSING_ON_BUNKER_DAY_DIFF DOUBLE PRECISION,
PROCESSING_ON_BUNKER_BM DOUBLE PRECISION,
PROCESSING_ON_BUNKER_BM_DIFF DOUBLE PRECISION,
HOURLY_AVERAGE_PROCESSING_DAY DOUBLE PRECISION,
HOURLY_AVERAGE_PROCESSING_BM DOUBLE PRECISION,
SAND_DAY DOUBLE PRECISION,
SAND_BM DOUBLE PRECISION,
PRODUCT1_DAY DOUBLE PRECISION,
OVERFALL_NACN_HEAD DOUBLE PRECISION,
OVERFALL_NACN_TAIL DOUBLE PRECISION,
PH_PULP DOUBLE PRECISION,
RECEIVED_PHOSPHORUS_FLOUR_DAY DOUBLE PRECISION,
RECEIVED_PHOSPHOR_CONCENTR_DAY DOUBLE PRECISION,
RECEIVED_PHOSPHOR_FLOUR_BM DOUBLE PRECISION,
RECEIVED_PHOSPHOR_CONCENTR_BM DOUBLE PRECISION,
SENT_PHOSPHOR_FLOUR_DAY DOUBLE PRECISION,
SENT_PHOSPHOR_FLOUR_DAY_BM DOUBLE PRECISION,
SENT_PHOSPHOR_CONCENTR_DAY DOUBLE PRECISION,
SENT_PHOSPHOR_CONCENTR_DAY_BM DOUBLE PRECISION,
TJ_THICKENED_UNDERFLOW DOUBLE PRECISION,
TJ_TAIL_UNDERFLOW DOUBLE PRECISION,
SPECIFIC_THICKENED DOUBLE PRECISION,
P137_6 DOUBLE PRECISION,
P138_12 DOUBLE PRECISION,
AU_IN_SOLID_PHASE DOUBLE PRECISION,
CLASS_074 DOUBLE PRECISION,
E1 DOUBLE PRECISION,
E12 DOUBLE PRECISION,
E25 DOUBLE PRECISION,
AU_FEEDING_SORBTION DOUBLE PRECISION,
PITCH_SORBTION DOUBLE PRECISION,
PITCH_REGENERATION DOUBLE PRECISION,
EDUCTION_REGEN DOUBLE PRECISION,
COMMODITY_REGEN DOUBLE PRECISION,
WEIGHT_WET DOUBLE PRECISION,
AMOUN_THICKENER DOUBLE PRECISION,
TJ_THICKENED_UNDERFLOW_BM DOUBLE PRECISION,
TJ_TAIL_UNDERFLOW_BM DOUBLE PRECISION,
P138_12_BM DOUBLE PRECISION,
AU_IN_SOLID_PHASE_BM DOUBLE PRECISION,
E1_BM DOUBLE PRECISION,
E12_BM DOUBLE PRECISION,
E25_BM DOUBLE PRECISION,
PULP_EXHAUST_DAY DOUBLE PRECISION,
PULP_EXHAUST_BM DOUBLE PRECISION)
AS
DECLARE VARIABLE CORRECTION_OTK_PROCESSING_SHOP1 DOUBLE PRECISION;
DECLARE VARIABLE CORRECTION_OTK_PROCESSING_SHOP2 DOUBLE PRECISION;
DECLARE VARIABLE VAR_DAY SMALLINT;
DECLARE VARIABLE VAR_MONTH SMALLINT;
DECLARE VARIABLE VAR_YEAR SMALLINT;
DECLARE VARIABLE VAR_PLAN_DAY DOUBLE PRECISION;
DECLARE VARIABLE VAR_CORRECTION_SHOP1_BM DOUBLE PRECISION;
DECLARE VARIABLE VAR_CORRECTION_SHOP2_BM DOUBLE PRECISION;
DECLARE VARIABLE NEW_TEMP1 DOUBLE PRECISION;
DECLARE VARIABLE NEW_TEMP2 INTEGER;
DECLARE VARIABLE PLAN_PROCESSING_ORE_BEGIN_MONTH DOUBLE PRECISION;
DECLARE VARIABLE VAR_I DATE;
DECLARE VARIABLE VAR_BUNKER_BEGIN DOUBLE PRECISION;
DECLARE VARIABLE VAR_BUNKER_END DOUBLE PRECISION;
DECLARE VARIABLE VAR_DRY_SHOP1 DOUBLE PRECISION;
DECLARE VARIABLE VAR_BEGIN_DATE DATE;
begin
var_day = EXTRACT (DAY FROM PARAM_DATE);
var_month = EXTRACT (MONTH FROM PARAM_DATE);
var_year = EXTRACT (YEAR FROM PARAM_DATE);
/* Определение начала месяца */
EXECUTE PROCEDURE begin_month (:var_month, :var_year) RETURNING_VALUES :var_begin_date;
SELECT PLAN_DAY
FROM PLAN_PROCESSING Plan_processing
WHERE (YEAR_REG = :var_year)
AND (MONTH_REG = :var_month)
INTO :var_plan_day;
plan_processing_ore_begin_month = var_plan_day * var_day;
SELECT PRODUCT_DAY, KORRECTIV_SHOP1, KORRECTIV_SHOP2, NACN_GOLOVA, NACN_TAIL,
REV_FOSFOR_MYKA, REV_FOSFOR_CONCNTRAT, SEND_FOSFOR_MYKA, SEND_FOSFOR_CONCENTRAT
from DAY_CONFIG
WHERE DATE_CONFIG=:PARAM_DATE
INTO :product1_day, :correction_otk_processing_shop1,
:correction_otk_processing_shop2, :overfall_nacn_head,
:overfall_nacn_tail, :received_phosphorus_flour_day, :received_phosphor_concentr_day,
:sent_phosphor_flour_day, :sent_phosphor_concentr_day;
SELECT Sum(KORRECTIV_SHOP1), Sum(KORRECTIV_SHOP2), Sum(REV_FOSFOR_MYKA),
Sum(REV_FOSFOR_CONCNTRAT), Sum(SEND_FOSFOR_MYKA), Sum(SEND_FOSFOR_CONCENTRAT)
FROM DAY_CONFIG
WHERE DATE_CONFIG BETWEEN :var_begin_date and :PARAM_DATE
INTO :var_correction_shop1_bm, :var_correction_shop2_bm, :received_phosphor_flour_bm,
:received_phosphor_concentr_bm, :SENT_PHOSPHOR_FLOUR_DAY_BM, :SENT_PHOSPHOR_CONCENTR_DAY_BM;
if (var_correction_shop1_bm is null) then
var_correction_shop1_bm = 0;
if (var_correction_shop2_bm is null) then
var_correction_shop2_bm = 0;
EXECUTE PROCEDURE shop1_day_dry_bunker(:PARAM_DATE)
RETURNING_VALUES
:accepted_ores_day,
:percent_filling_bunker_begin, :percent_filling_bunker_end;
accepted_ores_day_difference = accepted_ores_day - :var_plan_day;
processing_on_bunker_day = accepted_ores_day + (percent_filling_bunker_begin
- percent_filling_bunker_end) * 600;
processing_on_bunker_day_diff = processing_on_bunker_day - var_plan_day;
var_i = var_begin_date;
accepted_ores_beginning_month = accepted_ores_day;
processing_on_bunker_bm = processing_on_bunker_day;
WHILE (var_i < PARAM_DATE) do
begin
EXECUTE PROCEDURE shop1_day_dry_bunker(:var_i)
RETURNING_VALUES :var_dry_shop1, :var_bunker_begin, :var_bunker_end;
accepted_ores_beginning_month = accepted_ores_beginning_month + var_dry_shop1;
processing_on_bunker_bm = processing_on_bunker_bm + (var_dry_shop1
+ (var_bunker_begin - var_bunker_end) * 600);
var_i = var_i + 1;
end
accepted_ores_beginning_month = accepted_ores_beginning_month + var_correction_shop1_bm;
processing_on_bunker_bm = processing_on_bunker_bm + var_correction_shop1_bm;
accepted_ores_begin_month_diff = accepted_ores_beginning_month - plan_processing_ore_begin_month;
processing_on_bunker_bm_diff = processing_on_bunker_bm - plan_processing_ore_begin_month;
SELECT sum(dry_day), SUM(time_work_day), COUNT(class_mill) FROM mill_day_dryore_work
WHERE date_reg = :Param_date and class_mill = 1
INTO :processing_scales_shop2_day, :new_temp1, :new_temp2;
processing_scales_shop2_diff_d = processing_scales_shop2_day - var_plan_day;
IF (:new_temp1 <> 0) THEN
BEGIN
hourly_average_processing_day = processing_scales_shop2_day / new_temp1;
END
ELSE
begin
hourly_average_processing_day = 0;
END
SELECT SUM(dry_day), SUM(time_work_day), COUNT(class_mill) FROM mill_day_dryore_work
WHERE (date_reg BETWEEN :var_begin_date AND :Param_date) and (class_mill = 1)
INTO :processing_scales_shop2_bm, :new_temp1, :new_temp2;
processing_scales_shop2_bm = processing_scales_shop2_bm + var_correction_shop2_bm;
processing_scales_shop2_diff_bm = processing_scales_shop2_bm - plan_processing_ore_begin_month;
IF ((:new_temp1 IS NOT NULL) and (:new_temp1 <> 0)) THEN
BEGIN
hourly_average_processing_bm = processing_scales_shop2_bm / new_temp1;
END
ELSE
begin
hourly_average_processing_bm = 0;
END
SELECT avg(CEH2_SMENA.SAND)
FROM CEH2_SMENA
WHERE DAY_REG = :Param_date
INTO :sand_day;
SELECT avg(CEH2_SMENA.SAND)
FROM CEH2_SMENA
WHERE DAY_REG BETWEEN :var_begin_date AND :Param_date
INTO :sand_bm;
[b] SELECT avg(REPORT.PH)
FROM REPORT
WHERE
(REPORT.DAY_OF = :PARAM_DATE)
INTO :ph_pulp;[/b]
SELECT TJ_THICKENED_UNDERFLOW, TJ_TAIL_UNDERFLOW, SPECIFIC_THICKENED, P137_6,
P138_12, AU_IN_SOLID_PHASE, CLASS_074, E1, E12, E25, AU_FEEDING_SORBTION,
PITCH_SORBTION, PITCH_REGENERATION, EDUCTION_REGEN, COMMODITY_REGEN,
WEIGHT_WET, AMOUN_THICKENER
FROM PDO_DAY
WHERE
(PDO_DAY.DATE_REG = :param_date)
INTO :TJ_THICKENED_UNDERFLOW, :TJ_TAIL_UNDERFLOW, :SPECIFIC_THICKENED, :P137_6,
:P138_12, :AU_IN_SOLID_PHASE, :CLASS_074, :E1, :E12, :E25, :AU_FEEDING_SORBTION,
:PITCH_SORBTION, :PITCH_REGENERATION, :EDUCTION_REGEN, :COMMODITY_REGEN,
:WEIGHT_WET, :AMOUN_THICKENER;
SELECT avg(TJ_THICKENED_UNDERFLOW), avg(TJ_TAIL_UNDERFLOW), Sum(P138_12),
avg(AU_IN_SOLID_PHASE), avg(E1), avg(E12), avg(E25)
FROM PDO_DAY
WHERE
(PDO_DAY.DATE_REG BETWEEN :var_begin_date and :param_date)
INTO :tj_thickened_underflow_bm, :tj_tail_underflow_bm, :p138_12_bm,
:au_in_solid_phase_bm, :e1_bm, :e12_bm, :e25_bm;
EXECUTE PROCEDURE pulp_exhaust_day(:param_date)
RETURNING_VALUES :pulp_exhaust_day;
EXECUTE PROCEDURE pulp_exhaust_period(:var_begin_date, :param_date)
RETURNING_VALUES :pulp_exhaust_BM;
SUSPEND;
end
^
SET TERM ; ^
GRANT EXECUTE ON PROCEDURE BEGIN_MONTH TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT SELECT ON PLAN_PROCESSING TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT SELECT ON DAY_CONFIG TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT EXECUTE ON PROCEDURE SHOP1_DAY_DRY_BUNKER TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT SELECT ON MILL_DAY_DRYORE_WORK TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT SELECT ON CEH2_SMENA TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT SELECT ON REPORT TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT SELECT ON PDO_DAY TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT EXECUTE ON PROCEDURE PULP_EXHAUST_DAY TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT EXECUTE ON PROCEDURE PULP_EXHAUST_PERIOD TO PROCEDURE TABLE_WORK_FACTORY_2;
GRANT EXECUTE ON PROCEDURE TABLE_WORK_FACTORY_2 TO DEVELOPER;
GRANT EXECUTE ON PROCEDURE TABLE_WORK_FACTORY_2 TO SYSDBA;
[b]GRANT EXECUTE ON PROCEDURE TABLE_WORK_FACTORY_2 TO PDO_GROUP;[/b]
