Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];

Вниз

Право на 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;
Скачать: [xml.tar.bz2];

Наверх





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


2-1185365577
AZIZE
2007-07-25 16:12
2007.08.19
Поиск в графе


15-1184882265
Kostafey
2007-07-20 01:57
2007.08.19
Поиск в Access - базе


15-1185185872
vr-online
2007-07-23 14:17
2007.08.19
Алгоритм


2-1184848479
Новичеек
2007-07-19 16:34
2007.08.19
из Vb в Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский