Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
bad grant
Guest
Под пользователем с соответствующими правами создаю вот такую процедуру (для примера сокращена до минимума):
create procedure up_test
as
begin
  exec('');
end;

и выдаю на нее права другому пользователю:
grant execute on dbo.up_test to [OtherUser]

Всё отрабатывает вполне нормально, никаких сообщений об ошибках нет.
Логинюсь под этим OtherUser (роль public), пытаюсь запустить процедуру - выдает, что

Msg 229, Level 14, State 5, Procedure up_test, Line 1
The EXECUTE permission was denied on the object 'up_test', database 'skipped', schema 'dbo'.

Пытаюсь проверить (под тем же OtherUser):
select * from sys.all_objects where type='P' and name like 'up%'

- процедуры up_test не видно (хотя видно несколько прочих процедур в текущей базе). Базой и сервером не ошибся, это уже проверено раз двадцать. Я бы всё понял, если бы при выдаче гранта было сообщение об ошибке, но грант вроде как был успешно выдан - а его, как того суслика, нет.
select @@version

Microsoft SQL Server 2005 - 9.00.4035.00 (X64) 
Nov 24 2008 16:17:31
Copyright (c) 1988-2005 Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.0 (Build 6002: Service Pack 2)
23 июл 13, 14:17    [14604300]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
bad grant,

Ну потому что доку читать надо. В динамическом SQL все права проверяются для запускающего пользователя, а не для владельца процедуры.

Хотите иначе - пишите хранимку как execute as owner и убедитесь, что ее владелец имеет-таки нужный доступ.
23 июл 13, 14:22    [14604331]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Внутри строки динамического SQL внешние права не работают.
Так что не просто EXEC(''), а EXEC('') [ AS { LOGIN | USER } = ' name ' ]
23 июл 13, 14:24    [14604345]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
bad grant
Guest
Хорошо, б-г с динамическим. Вот такой вариант:
alter procedure up_test
as
begin
  declare
    @n int;
  set @n=1;
end;

ведет себя аналогично вышеописанному.
23 июл 13, 14:27    [14604380]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
bad grant
Хорошо, б-г с динамическим. Вот такой вариант:
alter procedure up_test
as
begin
  declare
    @n int;
  set @n=1;
end;

ведет себя аналогично вышеописанному.
Ну харэ троллить уже, не смешно.

Схему у создаваемой процедуры принципиально не прописываете?
23 июл 13, 14:29    [14604398]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
bad grant
Guest
Ennor Tiegael
Ну харэ троллить уже, не смешно.
Схему у создаваемой процедуры принципиально не прописываете?

Даже и в мыслях не было, честное слово. Схема там - dbo, и кроме нее, других схем нет (и указание схемы ситуацию не исправляет). Просто хочется разобраться, в чем дело? Что я упустил? Во втором варианте нет динамического sql с его нюансами - так в чем же дело?
23 июл 13, 14:36    [14604448]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
bad grant
Даже и в мыслях не было, честное слово. Схема там - dbo
А как вы это проверяете?
23 июл 13, 14:40    [14604473]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
bad grant
Guest
alexeyvg
А как вы это проверяете?

Под пользователем, создавшим процедуру
select name,schema_name(schema_id) from sys.all_objects where type='P' and name='up_test'

При попытке вызова под OtherUser схему указываю.
23 июл 13, 14:45    [14604512]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Что даст

SELECT * FROM fn_my_permissions('dbo.up_test', 'OBJECT')


выполненная под пользователем OtherUser?

Сообщение было отредактировано: 23 июл 13, 16:10
23 июл 13, 16:10    [14605189]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
bad grant
Guest
pkarklin,

пустая выборка
23 июл 13, 17:09    [14605596]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
bad grant
пустая выборка


Ну, то есть прав никаких и не роздано.
23 июл 13, 18:28    [14606130]     Ответить | Цитировать Сообщить модератору
 Re: GRANT EXECUTE отрабатывает, но по-прежнему PERMISSION DENIED  [new]
bad grant
Guest
Выяснилось, в чем было дело. Доступ предоставлялся юзеру OtherUser, а одноименный логин, под которым производились попытки выполнения процедуры, не имел маппинга на юзера - вообще не имел ни одного маппинга. Вылечилось всё выполнением sp_change_users_login 'Update_One', 'OtherUser', 'OtherUser'.
31 июл 13, 15:38    [14643633]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить