Страница 1 из 1

Раздача прав процедуре

Добавлено: 20 апр 2005, 17:59
Rakhim
Есть процедура в котророй вызывается несколько процедур и открываются несколько таблиц.
Раздаю права для процедуры на доступ к этим объектам.
Но при вызове процедуры, выходит сообщение , что нет доступа к этим объектам. Приходится давать права на эти объекты пользователю.
Может я чтото не правильно делаю?
Для чего раздаются права процедуре.
Если убрать права процедуры на доступ к таблицам, а оставить права у пользователя то все работает

FireBird 1.5

Добавлено: 20 апр 2005, 22:02
kdv
какое именно сообщение об ошибке выдается?

p.s. Firebird 1.5 бывает 1.5.0, 1.5.1 и 1.5.2.

Добавлено: 21 апр 2005, 17:48
Rakhim
Выходит следующая ошибка
" no permission for read/select access to TABLE REPORT"

Server's version
FireBird 1.5.0.4306 :roll:

Добавлено: 21 апр 2005, 19:05
Олег
Для IB/FIB так и должно быть (диалект 1 так точно). ХП и триггера работают с "правами" пользователя их вызвавших.

Добавлено: 21 апр 2005, 19:49
Merlin
Олег писал(а):Для 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.2.4731 Firebird 1.5,
LI-V1.5.1.4481 Firebird 1.5
а также всегда так было начиная с IB4 (это только на моей памяти).

Ы? Що я делаю неправильно? Имхо вам, робяты, надобно не жужжать, а либо не забывать синтаксис grant, то бишь помнить про слова procedure и trigger, дабы права не складывались на одноимённого юзера, пусть даже не существующего на данном сервере, либо опять же не забывать почитывать Release Notes, ежели пользуете Execute Statement.

Добавлено: 22 апр 2005, 09:38
Rakhim
Merlin писал(а):
grant select on classes to procedure test;

grant execute on procedure test to GUEST;
Выходит сообщение что нет доступа
Приходится добавлять права GUEST на таблицу

Добавлено: 22 апр 2005, 10:27
kdv
эта. напиши-ка, к каким объектам процедура обращается. и какие гранты ты даешь процедуре.

Добавлено: 22 апр 2005, 19:13
dimitr
Люди, вы все чего? Человек небось просто не дал права своему юзверю на EXECUTE этой процедуры. :wink:

Добавлено: 22 апр 2005, 19:28
Merlin
dimitr писал(а):Люди, вы все чего? Человек небось просто не дал права своему юзверю на EXECUTE этой процедуры. :wink:
А король-то голый? :lol: Может и так. А я подумал что не написал слово procedure в гранте ей прав на таблицы :)

Добавлено: 24 апр 2005, 11:51
Rakhim
dimitr писал(а):Люди, вы все чего? Человек небось просто не дал права своему юзверю на EXECUTE этой процедуры. :wink:
Права на запуск этой процедуры есть.
Merlin писал(а): А король-то голый? :lol: Может и так. А я подумал что не написал слово procedure в гранте ей прав на таблицы :)
Я не писал пользовался IBExpert. Права раздаю от пользователя SYSDBA

На тестовой базе все получается.

А на рабочей базе приходится довать пользователю помимо всего прочего права на SELECT таблицы. только после этого она запускается нормально.
А у процедуры можно отменть права на SELECT этой таблицы. Все равно процедура запускается. :?:

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

Добавлено: 29 апр 2005, 16:20
Rakhim
Код таблицы:

Код: Выделить всё

/******************************************************************************/
/***                 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]
:?: