Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
столкнулся с проблемой, что в sql2008 sysobjects содержит только те объекты, к которым у пользователей есть доступ.
например, если выполнить такой скрипт, то в sql2000 выдаст результат, а в sql2008 нет. если у пользователя будет доступ только на процедуру test3.

create procedure test1
  @obj_id int
as
select *
  from sysobjects
  where id=@obj_id
go
create procedure test2
as
exec test1 @@procid
go
create procedure test3
as
exec test2
go
grant execute on test3 to public
go


Есть ли в sql2008 возможность определить объект по его идентификатору при отсутствии доступа к этому объекту?
Не хотелось бы создавать свою таблицу со списком объектов.
13 янв 12, 12:30    [11898372]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
execute as?
13 янв 12, 12:34    [11898400]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
попробовал.не получается.
выдает сообщение, что у пользователя нет доступа менять контекст.
а если я пользователю открою доступ на установку этого контекста, то это равносильно открытию доступа на сам исходный объект.

Msg 15517, Level 16, State 1, Procedure test1, Line 7
Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.
13 янв 12, 12:43    [11898474]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
не понимаю, почему не работает правило, что процедура выполняется под правами создателя.
13 янв 12, 12:44    [11898484]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
spenov
не понимаю, почему не работает правило, что процедура выполняется под правами создателя.

А у вашей процедуры владелец тоже sys что ли ?
И процедуры никогда не выполнялись с правами создателя
Вы путаете цепочки владения с правами запуска

Сообщение было отредактировано: 13 янв 12, 12:49
13 янв 12, 12:48    [11898516]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
Glory
И процедуры никогда не выполнялись с правами создателя


это как? если у пользователя нет прав на select но есть право на exec, то он без проблем получает данные, если процедура создана пользователем с правом на select

Glory
Вы путаете цепочки владения с правами запуска


владение здесь причем?


проблема в том, что теперь sysobjects выдает только те объекты, к которым у пользователя есть доступ. раньше выдавала список всех объектов базы.
13 янв 12, 12:53    [11898552]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
GRANT VIEW DEFINITION TO public
13 янв 12, 12:53    [11898555]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
spenov
то как? если у пользователя нет прав на select но есть право на exec, то он без проблем получает данные, если процедура создана пользователем с правом на select

Получает не потому, что процедура выполняется с правами владельца
А потому что у процедуры и таблицы одинаковый владелец
Это и называется цепочкой владения - ownership chain
13 янв 12, 12:56    [11898567]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
SanyL
GRANT VIEW DEFINITION TO public


спасибо! результат получается аналогичный sql2000.
13 янв 12, 12:58    [11898587]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
aleks2
Guest
spenov
это как? если у пользователя нет прав на select но есть право на exec, то он без проблем получает данные, если процедура создана пользователем с правом на select

Это вы недоучились, аднака.
Если процедура обращается к объекту ДРУГОЙ схемы (не той, к которой принадлежит процедура) - права доступа к этому объекту будут проверены для ЗАПУСТИВШЕГО процедуру, а не для СОЗДАВШЕГО.
13 янв 12, 12:59    [11898591]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
invm
Member

Откуда: Москва
Сообщений: 9824
spenov, создайте табличную функцию с опцией execute as 'dbo', которая будет возвращать необходимый вам набор.
13 янв 12, 12:59    [11898592]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
aleks2
Это вы недоучились, аднака.
Если процедура обращается к объекту ДРУГОЙ схемы (не той, к которой принадлежит процедура) - права доступа к этому объекту будут проверены для ЗАПУСТИВШЕГО процедуру, а не для СОЗДАВШЕГО.


явно конечно не было указано, но предполагается что все в рамках 1 схемы.
думаю в приведенном примере это однозначно видно.
13 янв 12, 13:04    [11898616]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
spenov
SanyL
GRANT VIEW DEFINITION TO public


спасибо! результат получается аналогичный sql2000.


ТехНет
13 янв 12, 13:05    [11898625]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
Glory
Member

Откуда:
Сообщений: 104751
spenov
явно конечно не было указано, но предполагается что все в рамках 1 схемы.
думаю в приведенном примере это однозначно видно.

Да что вы говорите ! Вот представление sysobjects находится в схеме sys
13 янв 12, 13:09    [11898658]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
invm
spenov, создайте табличную функцию с опцией execute as 'dbo', которая будет возвращать необходимый вам набор.


то что надо! спасибо!
у процедуры добавил execute as 'dbo'
13 янв 12, 13:21    [11898807]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по sysobjects в sql2008  [new]
spenov
Member

Откуда: Москва
Сообщений: 168
всем спасибо, проблема решена :)
13 янв 12, 13:24    [11898839]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить