Временные ХП и права доступа к объектам

Sergey
Дата: 07.02.2001 12:50:41
MS SQL Server 7.0+SP2
Заметил, что из временных ХП пользователю разрешается выполнять серверные ХП в независимости от его прав доступа на эти ХП.Например

Create proc proc1 as select * from table a
DENY EXECUTE ON poc1 TO [user0]

если пользователь user0 в сеансе попытается выполнить:
exec proc1
получит permission denied,

А если так,
create #Mypoc as exec proc1
exec #Mypoc
То все прокатывает на "Ура".

Вопрос:
А как собственно с этим бороться?
Ведь дырка получается.
Сергей Дементьев.
AnKa
Дата: 07.02.2001 13:44:09
А если попробовать так:

code:



Я не пробовал, но по идее, должно сработать.
AnKa
Дата: 07.02.2001 13:46:44
Пардон, чего-то глюконуло...
А если попробовать так:
_________________
create Mypoc1
as
SETUSER USER()
exec proc1
__________________

Я не пробовал, но по идее, должно сработать.
Sergey
Дата: 07.02.2001 14:10:19
Да ведь вопрос то в том, что пользователь благодаря такой дырке получает возможность выполнять процедуры, на выполнение которых у него нет разрешения. Временные процедуры ему ведь не запретьнь делать. А как быть тогда, может SP какой-нибудь поможет?
Сергей Дементьев
SergSuper
Дата: 07.02.2001 14:26:23
Такого быть не может - слишком большая дырка. Во всяком случае у меня доступ не появляется.

По-моему дело в том, что сначала создается временная процедура, а потом ты меняешь юзера через SETUSER. Поскольку временная процедура в момент компиляции имела права на выполнение proc1, то никакой ошибки и не происходит. Если создавать временную процедуру после SETUSER или вообще только под коннектом того юзера - такого не произойдет. Попробуй еще раз и повнимательней.
Sergey
Дата: 07.02.2001 15:14:46
Дак вот в том и дело, что происходит.На двух серверах проверял
Пользователю запрещено выполнять процедуру select_rep_date_nomer
вот код:
exec select_rep_date_nomer 21,'2001-02-01','2001-02-02',12345
go
Ответ:
Server: Msg 229, Level 14, State 5, Procedure select_rep_date_nomer, Line 1
EXECUTE permission denied on object 'select_rep_date_nomer', database 'Uchet', owner 'dbo'.

А такой код проходит
create procedure #temp as exec select_rep_date_nomer 21,'2000-02-01','2001-02-02',12345
go
exec #temp
drop procedure #temp
go

Невероятно,но правда.
А еще если работать через ODBC и использовать драйвер 2.и.т.д, то поставив галочку Generate Stored Procedures for Prepare Statement (так по-моему называется), то открываешь доступ ко всем процедурам, любому пользователю, который выполняет запрсы, приготовленные через SQLPrepare, потому что ODBC драйвер делает то же самое в этом случае.
Я понимаю, что дыра большая, но наверно как-то в настройках сервера она убирается?
Сергей Дементьев.
Павел
Дата: 07.02.2001 17:13:12
Вот цитата из рассылки 'MSSQL - дело тонкое' с сервера http://subscribe.ru от 20/07/00:

"Microsoft выпустил заплату для обнаруженной недавно уязвимости
хранимых процедур SQL 7.0.
Согласно бюллетеню Microsoft (Q266766), в SQL 7.0 заданные
ограничения на права доступа к хранимым процедурам могут быть
обойдены при вызове хранимой процедуры из временной хранимой
процедуры.
Отсутствие проверки прав доступа могло позволить
несанкционированно выполнять хранимые процедуры, которые
обычному пользователю не доступны. Уязвимость существует,
когда база данных и хранимая процедура принадлежат системному
администратору (sa), а пользователь, осуществляющий вторжение,
способен пройти аутентификацию и получить доступ к базе данных.
Intel: http://www.microsoft.com/Downloads/Release.asp?ReleaseID=22470
Alpha: http://www.microsoft.com/Downloads/Release.asp?ReleaseID=22469"

Очень рекомендую всем подписаться.