Мне нужно иметь возможность удаленно контролировать дисковое пространство на сервере SQL 2005. Для этого мне нужно дать пользователю sql server возможность запускать следующую хранимую процедуру:
EXEC xp_fixeddrives;
В идеале у этого пользователя не было бы разрешения на запуск других хранимых процедур или много чего еще.
Новый пользователь, которого я только что создал, в настоящее время вообще не имеет разрешения на запуск хранимой процедуры. Как лучше всего дать пользователю разрешение делать это и ничего больше?
Должен уметь:
предоставить выполнение на xp_fixeddrives имени пользователя
идти
xp_fixeddrives - это недокументированная процедура. В общем, его не существует. это не документированный способ предоставить, отклонить или отозвать какое-либо разрешение на него, и результатом его выполнения может быть что угодно.
При этом вы можете попробовать обернуть XP в обычную процедуру, затем использовать подпись кода для предоставления необходимых разрешений для процедуры, а затем предоставить EXEC вашему пользователю в оболочке, как в примере в моем блоге: Подписание активированной процедуры. Это работает на моей машине. Ваш пробег может отличаться, как и в случае использования недокументированных функций:
use master;
go
create procedure usp_fixeddrives
with execute as caller
as
begin
exec xp_fixeddrives;
end
go
grant execute on usp_fixeddrives to [low_priviledged_user];
go
create certificate [usp_fixeddrives]
encryption by password = 'AnyPassword@1234!'
with subject = N'usp_fixeddrives'
, start_date = '11/05/2009';
go
add signature to [usp_fixeddrives]
by certificate [usp_fixeddrives]
with password ='AnyPassword@1234!';
go
create login [usp_fixeddrives] from certificate [usp_fixeddrives];
go
grant authenticate server to [usp_fixeddrives];
grant control server to [usp_fixeddrives];
go
alter certificate [usp_fixeddrives] remove private key;
go
Вам нужно будет использовать ВЫПОЛНИТЬ КАК для этого в SQL 2005, и (я думаю) выдать себя за системного администратора, который также является администратором физического сервера. Обычный пользователь не имеет прав на файловую систему, поэтому результатов нет. В SQL 2000 сработало бы просто предоставить им права на SP.