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

Откуда:
Сообщений: 384
Yasha123
прецедуру теперь запустите от имени петровой и убедитесь, что хотя бы ушло
The EXECUTE permission was denied...

grant execute to [MSK\d.petrova]
EXECUTE [GetDateInfo] '20171101'


выполнена успешно...

тогда я нифига не понимаю, почему при выполнении этой же процедуры из C# кода приводит к ошибке
под чужим логином она бы даже к БД не подключилась.

спасибо за наводку! буду разбираться в причинах
22 ноя 17, 17:55    [20975938]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
TaPaK
Member

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

как вариант, уже писали, висит какой-нить LOGON триггер который не знает про петрову и валит её кого-нить
22 ноя 17, 17:59    [20975945]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
хорошо я согласен
тогда я нифига не понимаю, почему при выполнении этой же процедуры из C# кода приводит к ошибке

ну вы ж не выдали до этого EXECUTE.
вы же писали, что в sys.database_permissions у каждого ровно по одной строке,
т.е. только CONNECT.
вы выдавали этот EXECUTE неправильно,
не могу сказать как,
надо было смотреть картинки "выдачи".
когда вы прицепили 2 картинки, где EXECUTE выдается успешно и только что выданное отражается в sys.database_permissions,
стало видно, что теперь действительно выдано.
---
а приложение до сих пор с этой же ошибкой валится?
22 ноя 17, 18:28    [20976015]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
Yasha123
а приложение до сих пор с этой же ошибкой валится?

надо просить пользователя запустить. Написал ей, жду вот.
22 ноя 17, 18:54    [20976075]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
Вот интересная вырисовывается ситуация.
У всех пользователей
Yasha123
в sys.database_permissions у каждого ровно по одной строке,

, да, у всех connect,
кроме "проблемного пользователя". У неё теперь две - connect и execute.
Любопытно узнать у него, работает или нет.

(в целом, хочу выразить благодарность за информативную поддержку!!)
22 ноя 17, 19:02    [20976083]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
хорошо я согласен
кроме "проблемного пользователя". У неё теперь две - connect и execute.

блин, не договорил.
У всех по одной строке, но при этом у них у всех работает. Вот, что странно.
22 ноя 17, 19:02    [20976086]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
хорошо я согласен
хорошо я согласен
кроме "проблемного пользователя". У неё теперь две - connect и execute.

блин, не договорил.
У всех по одной строке, но при этом у них у всех работает. Вот, что странно.

я уже не знаю, как еще объяснять.
тех, кого вы видите в пользователях, их НЕТ!
можете их всех вообще дропнуть.
в вашей базе ВСЕ, кроме петровой, dbo.
им НЕ НАДО никаких прав, у них и так все есть.
потому что они админы с вашей божьей помощью
22 ноя 17, 19:25    [20976128]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384


покупаю книжку))
22 ноя 17, 19:31    [20976132]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
Yasha123
в вашей базе ВСЕ, кроме петровой, dbo.


К сообщению приложен файл. Размер - 3Kb
22 ноя 17, 19:36    [20976141]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
хорошо я согласен,
ну так значит, петрова тоже сисадмин
22 ноя 17, 20:28    [20976240]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
а проверьте-ка еще вот такое для петровой
и для кого-то еще.
одинаковый ли у них состав групп и есть ли там BUILTIN\Administrators:
execute as login = '...';

select name, type, usage
from sys.login_token
where principal_id > 0;
22 ноя 17, 21:30    [20976324]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
Yasha123
а проверьте-ка еще вот такое для петровой
и для кого-то еще.
одинаковый ли у них состав групп и есть ли там BUILTIN\Administrators:
execute as login = '...';

select name, type, usage
from sys.login_token
where principal_id > 0;


nametypeusage
MSK\d.petrovaWINDOWS LOGINDENY ONLY
publicSERVER ROLEDENY ONLY
sysadminSERVER ROLEDENY ONLY


в начало запроса добавил revert ещё на всякий.
в общем-то, получил, что она и public, и sysadmin. Попробовал других, результаты те же. Попробовал себя - у меня здоровая таблица была (что и логично). Опять d.petrova - на экране вижу вот этот результат.

Я вот, что подумал. Надо эту процедуру логами обложить. Пусть пишет, кто её запускал. Благо, благодаря советам в этой теме я теперь хорошо понимаю, как контролировать у кого какие роли и как это посмотреть. Вдруг, процедура нормально начинает выполняться, а там внутри какая-то ошибка возникает. И перед её запуском, чтобы понять, какая дата на вход подаётся.
23 ноя 17, 10:17    [20977060]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
пользователь сейчас сообщил, что всё работает. Видимо, после того, как вчера выдал права на execute.
Спасибище тебе огромное!! Прям вот спасибищще!!
23 ноя 17, 10:28    [20977107]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
вам*
23 ноя 17, 10:28    [20977108]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
хорошо я согласен
Видимо, после того, как вчера выдал права на execute.
Видимо, после того, как вчера выдали права сисадмина :-)
23 ноя 17, 10:31    [20977118]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

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

не надо ничего добавлять.
реверт возвращает первоначального юзера/логина
после того, как вы кого-то имперсонэйтили.
если вы не делаете никакое IMPERSONATE, то и не надо.

если же вы всех имперсонэйтили по 100 раз и уже не знаете, кто вы,
проще сделать CHANGE CONNECTION и снова стать самим собой.
у вас же они все админы, вы можете получить любую вложенность IMPERSONATE,
выполнив без реверта EXEC AS, EXEC AS, EXEC AS....
проще переконнектиться

хорошо я согласен
в общем-то, получил, что она и public, и sysadmin.


это и без того было понятно, вам же выдалось, что в базе петрова dbo.
значит, она сисадмин.

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

хорошо я согласен
Я вот, что подумал. Надо эту процедуру логами обложить. Пусть пишет, кто её запускал. Благо, благодаря советам в этой теме я теперь хорошо понимаю, как контролировать у кого какие роли и как это посмотреть. Вдруг, процедура нормально начинает выполняться, а там внутри какая-то ошибка возникает. И перед её запуском, чтобы понять, какая дата на вход подаётся.

так не логами, а запускать ее в TRY..CATCH,
и внутри тоже все засунуть в TRY..CATCH.
внешний будет ловить ошибки компиляции,
ну а внутренний все остальное
23 ноя 17, 10:53    [20977252]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
*если на ее компе = если на ее компе UAC
23 ноя 17, 10:57    [20977264]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
что-то все же здесь не сходится.
вы видите sysadmin SERVER ROLE DENY ONLY
???
sysadmin -- DENY ONLY!
очень похоже на случай, когда сисадмин выдан не учетке,
а группе сисадминов + UAC.

сделайте-ка снова

execute as login = 'MSK\d.petrova';
select IS_SRVROLEMEMBER('sysadmin');
revert;
23 ноя 17, 11:04    [20977291]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
единицу выдаёт для любого пользователя, в т.ч. для Петровой.

Yasha123
так не логами, а запускать ее в TRY..CATCH,
и внутри тоже все засунуть в TRY..CATCH.

о, в SQL тоже есть try-catch! открытие.

Yasha123
внешний будет ловить ошибки компиляции,

ну... не совсем компиляции, больше всё-таки run-time ошибки. Я в c# коде все вызовы обложил try{}catch(){}.
В хранимках теперь тоже этой конструкцией пользоваться буду по необходимости
23 ноя 17, 11:13    [20977319]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
хорошо я согласен
ну... не совсем компиляции, больше всё-таки run-time ошибки

еще раз. внешний TRY..CATCH будет ловить ошибки компиляции.
пример.
наши местные Козловы вчера на OLTP добавили колонку в 1 таблицу (CORESQL7.dbo.legconcors_agg).
ночью базу отресторили нам, ночная же процедура перелива начала свою работу.
и вот в ней есть селект из некоторого представления, где как всегда "*":
CREATE VIEW [dbo].[legconcors_agg] 
as 
select * from CORESQL7.dbo.legconcors_agg 
UNION ALL 
select * from CORESQL7ARK.dbo.legconcors_agg;

в CORESQL7ARK ничего не трогали, это архивная база
получаем
Line 1. Errno 205: All queries combined using a UNION, INTERSECT or EXCEPT operator must have an equal number of expressions in their target lists.

так вот ЭТО внутри самой прецедуры отловить нельзя.
процедура даже не начнет выполняться.

такие ошибки (компиляции!) ловит внешний TRY..CATCH
23 ноя 17, 11:23    [20977359]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
Yasha123
прецедуру теперь запустите от имени петровой и убедитесь, что хотя бы ушло
The EXECUTE permission was denied...

да, я ж говорю, у неё заработало. Она запускает процедуру и у неё она работает.

Но вообще, когда я запускаю процедуру вот так:
REVERT /*я понял ваше объяснение по поводу этой команды, но лишним не будет*/
EXECUTE AS USER='MSK\и.фамилия'
EXECUTE [GetDateInfo] '20171101'

то возникает ошибка
The server principal "MSK\и.фамилия" is not able to access the database "DatawareHouse" under the current security context.

для всех пользователей, кроме неё (у неё нормально отрабатывает), меня и ещё пары пользователей.
23 ноя 17, 12:05    [20977522]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
тфу ты блин. Не с той страницы прочитал сообщение.
23 ноя 17, 12:05    [20977523]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
хорошо я согласен
Member

Откуда:
Сообщений: 384
Yasha123
наши местные Козловы вчера на OLTP добавили колонку в 1 таблицу (CORESQL7.dbo.legconcors_agg).
ночью базу отресторили нам, ночная же процедура перелива начала свою работу.
и вот в ней есть селект из некоторого представления, где как всегда "*":

офигеть.
круто.
Теперь понял, о чём вы.
23 ноя 17, 12:07    [20977531]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
kinzak
Member

Откуда:
Сообщений: 7
петрова еще не уволилась?
23 ноя 17, 12:12    [20977541]     Ответить | Цитировать Сообщить модератору
 Re: Execute  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
хорошо я согласен
Но вообще, когда я запускаю процедуру вот так:
REVERT /*я понял ваше объяснение по поводу этой команды, но лишним не будет*/
EXECUTE AS USER='MSK\и.фамилия'
EXECUTE [GetDateInfo] '20171101'

то возникает ошибка
The server principal "MSK\и.фамилия" is not able to access the database "DatawareHouse" under the current security context.

для всех пользователей, кроме неё (у неё нормально отрабатывает), меня и ещё пары пользователей.

вы это запускаете в базе DatawareHouse или в мастере?
23 ноя 17, 12:56    [20977642]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить