Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.19;
Скачать: CL | DM;

Вниз

Право на IDENT_CURRENT   Найти похожие ветки 

 
Ёжик   (2007-04-27 18:25) [0]

В теле хранимки есть следующая строчка
SET @CID = IDENT_CURRENT ("TABLE_NAME");.
У юзера есть права только на выполнение хранимок. Так вот эта строчка юзеру возвращает null. Как быть?


 
Val ©   (2007-04-27 18:27) [1]

поискать какое бы право добавить?


 
ANB ©   (2007-04-27 18:38) [2]


> Ёжик   (27.04.07 18:25)

Хранимки выполняются с правами пользователя, ее создавшего (DBO).
Значит проблема не в правах.


 
Jan1   (2007-04-27 19:02) [3]


> Хранимки выполняются с правами пользователя, ее создавшего
> (DBO).

не совсем так. BOL:

...
Permissions
EXECUTE permissions for a stored procedure default to the owner of the stored procedure, who can transfer them to other users. Permissions to use the statement(s) within the EXECUTE string are checked at the time EXECUTE is encountered, even if the EXECUTE statement is included within a stored procedure. When a stored procedure is run that executes a string, permissions are checked in the context of the user who executes the procedure, not in the context of the user who created the procedure. However, if a user owns two stored procedures in which the first procedure calls the second, then EXECUTE permission checking is not performed for the second stored procedure.
...


 
Ёжик   (2007-04-27 19:39) [4]


> Хранимки выполняются с правами пользователя, ее создавшего
> (DBO).

Под sa всё нормально отрабатывает.


 
MOA ©   (2007-04-27 22:55) [5]

2Ёжик   (27.04.07 19:39) [4]
Вы её не EXECUTE выполняете ли? Если да - см. Jan1   (27.04.07 19:02) [3] - об этом выделенное и рассказывает.


 
Ёжик   (2007-04-28 19:15) [6]

CREATE PROCEDURE dbo.SETNAMES
@parent_ID int,
@Name varchar (50),
@Table tinyint,
@new bit OUTPUT,
@ID int OUTPUT,
@CID int OUTPUT

AS
BEGIN
DECLARE @N varchar (50)
DECLARE @I int

SELECT @I = C.ID, @N = C.Name FROM dbo.Catalog C WHERE C.Object_type = @Table
AND C.Name = @Name;
SET @new = "true";

BEGIN TRANSACTION;

IF (@N = @Name) AND ((@Table = 1) OR (@Table = 2)) BEGIN
  SET @CID = @I;
  SET @new = "false";
END

     ELSE
BEGIN

  INSERT INTO dbo.Catalog (Name, Object_type) VALUES ( @NAME, @Table);
   
   IF @@ERROR <> 0 BEGIN
    ROLLBACK;
    RETURN (1);
   END

  SET @CID = IDENT_CURRENT ("Catalog");

END

INSERT INTO dbo.Tree (Catalog_ID, parent_ID) VALUES (@CID, @parent_ID);

IF @@ERROR <> 0 BEGIN
 ROLLBACK;
 RETURN (1);
END

SET @ID = IDENT_CURRENT ("Tree");

COMMIT;

END


В таком виде. К dbo.Tree и к dbo.Catalog у юзера прав никаких :(


 
Ёжик   (2007-04-28 19:24) [7]

Примерно так выполняется.

CREATE PROCEDURE dbo.ADDFOLDER
@parent_ID int,
@Name varchar (50),
@ID int OUTPUT,
@CID int OUTPUT
AS
BEGIN
DECLARE @aID int, @new bit, @r_Code tinyint, @bID int

BEGIN TRANSACTION
EXEC @r_Code = SETNAMES @Parent_ID, @Name, 4, @new OUTPUT, @aID OUTPUT, @bID OUTPUT;

IF @r_Code =1 BEGIN
 ROLLBACK;
 RETURN (1);
END;

SET @ID = @aID;
SET @CID = @bID;

COMMIT;
END


 
Ёжик   (2007-04-29 20:44) [8]


> Вы её не EXECUTE выполняете ли? Если да - см. Jan1   (27.
> 04.07 19:02) [3] - об этом выделенное и рассказывает.

А что же делать?


 
Ёжик   (2007-05-03 23:39) [9]

Со SCOPE_IDENTITY() тоже самое. Select надо разрешать? А таблицу юзер увидит?



Страницы: 1 вся ветка

Текущий архив: 2007.08.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
15-1184782404
antonn
2007-07-18 22:13
2007.08.19
посмотрел фильм "Расплата"


15-1185041201
antonn
2007-07-21 22:06
2007.08.19
вопросик по яваскрипту


15-1185103037
oldman
2007-07-22 15:17
2007.08.19
Все были правы, от Инета никуда не деться...


2-1185530869
gray_falcon
2007-07-27 14:07
2007.08.19
помогите написать скрипт-движок


2-1185473507
zep
2007-07-26 22:11
2007.08.19
InvalidPointer