Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 372
Есть весьма простая процедура, которая выводит 1 или 2 в зависимости от того, прошёл "дедлайн" или нет.
ALTER PROCEDURE [dbo].[GetDateInfo]
(
	@DateOfAct DateTime
)
as
BEGIN
	
	DECLARE @AfterDeadline int
	select @AfterDeadline = 1
	if DATEADD(DAY, 1,
            (select Term 
            from term_Deadlines
            where [Year] =year(@DateOfAct) and [Month] = MONTH(@DateOfAct) 
            )
	    ) < GETDATE()
	        select @AfterDeadline = 2 -- дедлайн наступил
    
	SELECT @AfterDeadline Afterdeadline
END

У всех пользователей работает, а у одного - нет
The EXECUTE permission was denied on the object 'GetDateInfo', database 'DatawareHouse', schema 'dbo'.

Почему возникает у одного пользователя такая ошибка? Какие права ему надо дать, чтобы ошибки не было?

(не углубляйтесь в рефакторинг функции, интересен вопрос именно в том, что за ошибка)
Я пытаюсь найти решение в и-нете, но там везде такие ошибки возникают, когда пользователи использовали какие-то функции, для которых нужны права.
21 ноя 17, 10:43    [20971263]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 372
блин, тему не дописал.
21 ноя 17, 10:43    [20971266]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
в ошибке же все написано.
выдайте EXECUTE on dbo.GetDateInfo
21 ноя 17, 10:45    [20971273]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
если выдаете, а не помогает, ищите DENY.
этому ли юзеру, группе ли/ роли, куда юзер входит
21 ноя 17, 10:47    [20971281]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
mr.dfox
Member

Откуда: Где где .. в караганде
Сообщений: 531
Yasha123,

А дату одну и туже пользователи передают?
21 ноя 17, 11:33    [20971529]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
mr.dfox
Yasha123,

А дату одну и туже пользователи передают?

а как дата связана с "EXECUTE permission was denied"
21 ноя 17, 11:37    [20971552]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
04cf9f9576a6f15
Member [заблокирован]

Откуда:
Сообщений: 2927
хорошо я согласен
Я пытаюсь найти решение в и-нете, но там везде такие ошибки возникают, когда пользователи использовали какие-то функции, для которых нужны права.
Невероятно, но это правда.

#Хэш=
21 ноя 17, 12:42    [20971827]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
04cf9f9576a6f15
хорошо я согласен
Я пытаюсь найти решение в и-нете, но там везде такие ошибки возникают, когда пользователи использовали какие-то функции, для которых нужны права.
Невероятно, но это правда.

#Хэш=

какие еще функции,
у него не запускается сама приведенная процедура,
именно на запуск ее самой и нет прав:
ALTER PROCEDURE [dbo].[GetDateInfo]
...
The EXECUTE permission was denied on the object 'GetDateInfo', database 'DatawareHouse', schema 'dbo'.
21 ноя 17, 12:52    [20971854]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 372
я, блин, всё облазил!
Я даже дал права админа пользователю.
Всё нормально запускается, нормально работают другие процедуры и функции.
Но вот конкретно эта конкретно у этого пользователя не отрабатывает, понять не могу, почему.
Есть десяток других процедур, которые работают отлично.

Попробую пока её на функцию переделать. Но это решение из разряда имитации деятельности по устранению...
21 ноя 17, 13:33    [20972020]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
хорошо я согласен,

как вариант, вам уже написали "не помогает, ищите DENY."
21 ноя 17, 13:39    [20972035]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
хорошо я согласен
Почему возникает у одного пользователя такая ошибка? Какие права ему надо дать, чтобы ошибки не было?

Да потому что этот один пользователь в другой роли, чем все остальные. И Вы этой роли явно запретили select, который коснулся таблицы term_Deadlines тоже.
21 ноя 17, 13:45    [20972053]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
хорошо я согласен
я, блин, всё облазил!
Я даже дал права админа пользователю.
Всё нормально запускается, нормально работают другие процедуры и функции.
Но вот конкретно эта конкретно у этого пользователя не отрабатывает, понять не могу, почему.

Ну или для роли запретили конкретно запуск процедуры в явном виде.
21 ноя 17, 13:46    [20972059]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
хорошо я согласен
я, блин, всё облазил!

картинкой покажите
select user_name(grantee_principal_id) 
from sys.database_permissions
where state_desc = 'DENY'
      and object_name(major_id) = 'GetDateInfo' 
21 ноя 17, 13:48    [20972064]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Andy_OLAP
хорошо я согласен
Почему возникает у одного пользователя такая ошибка? Какие права ему надо дать, чтобы ошибки не было?

Да потому что этот один пользователь в другой роли, чем все остальные. И Вы этой роли явно запретили select, который коснулся таблицы term_Deadlines тоже.

мало того что текст не соотносится со ссылкой, так ещё и сам текст бред...
21 ноя 17, 13:50    [20972075]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Andy_OLAP
хорошо я согласен
Почему возникает у одного пользователя такая ошибка? Какие права ему надо дать, чтобы ошибки не было?

Да потому что этот один пользователь в другой роли, чем все остальные. И Вы этой роли явно запретили select, который коснулся таблицы term_Deadlines тоже.

репро в студию.
когда запрет на таблицу(SELECT) вывалит ошибку на процедуру: EXECUTE permission was denied

Сообщение было отредактировано: 21 ноя 17, 14:38
21 ноя 17, 13:53    [20972096]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 372
Yasha123
хорошо я согласен
я, блин, всё облазил!

картинкой покажите
select user_name(grantee_principal_id) 
from sys.database_permissions
where state_desc = 'DENY'
      and object_name(major_id) = 'GetDateInfo' 


результат - пустая таблица.
Как и
select *
from sys.database_permissions
where state_desc = 'DENY'

тоже пустая таблица
21 ноя 17, 13:58    [20972121]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 372
я никому ничего не запрещал)
21 ноя 17, 13:58    [20972123]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
покажите, плиз:

execute as user = 'MyUser';

select *
from sys.user_token;

select *
from sys.fn_my_permissions('GetDateInfo', 'object')
21 ноя 17, 14:05    [20972146]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
Andy_OLAP
Да потому что этот один пользователь в другой роли, чем все остальные. И Вы этой роли явно запретили select, который коснулся таблицы term_Deadlines тоже.
Интересно, а почему тогда ругань на отсутствие разрешений на процедуру?

А уважаемый эксперт в курсе что такое цепочки владения и как они работают?
21 ноя 17, 14:08    [20972159]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
Yasha123,
Как считаете коллега, пользователь, от имени которого не получается выполнить процедуру - он в той же роли, как и прочие логины, или нет?

Сообщение было отредактировано: 21 ноя 17, 14:38
21 ноя 17, 14:10    [20972165]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Andy_OLAP
Member

Откуда: я знаю, что Хапоэль Беэр-Шева - чемпион
Сообщений: 3151
invm
Andy_OLAP
Да потому что этот один пользователь в другой роли, чем все остальные. И Вы этой роли явно запретили select, который коснулся таблицы term_Deadlines тоже.
Интересно, а почему тогда ругань на отсутствие разрешений на процедуру?

А уважаемый эксперт в курсе что такое цепочки владения и как они работают?

Помню, что такое цепочки владения, но уже с трудом - с годами память слабеет.
А про ругань на процедуру сейчас раскрутим, поможем автору темы не только конкретный вопрос решить, но и разобраться, что у него с правами происходит вообще.
21 ноя 17, 14:12    [20972173]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
хорошо я согласен,
ну так а вообще кому что дано на объект

select user_name(grantee_principal_id),*
from sys.database_permissions
where object_name(major_id) = 'GetDateInfo' 
21 ноя 17, 14:15    [20972190]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 372
TaPaK
хорошо я согласен,
ну так а вообще кому что дано на объект

select user_name(grantee_principal_id),*
from sys.database_permissions
where object_name(major_id) = 'GetDateInfo' 

пусто.
select user_name(grantee_principal_id),*
from sys.database_permissions

выводит список пользователей и кучу строк с пользователем public.
Все пользователи упоминаются ровно по одному разу, в колонках class, major_id и minor_id у всех стоят нули.
21 ноя 17, 14:26    [20972255]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
хорошо я согласен,

вы хоть точно это всё делаете на DatawareHouse
21 ноя 17, 14:28    [20972266]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 372
столбец grantor_principal_id = 1 для всех строк
state_desc = GRANT для всех строк.
state = G для всех строк
21 ноя 17, 14:28    [20972268]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить