Как я могу дать пользователю SQL Server разрешение на запуск одной хранимой процедуры и ничего больше?
Мне нужно иметь возможность удаленно контролировать дисковое пространство на сервере SQL 2005. Для этого мне нужно дать пользователю сервера sql возможность запускать следующую хранимую процедуру:
EXEC xp_fixeddrives;
В идеале этот пользователь не должен иметь права запускать другие хранимые процедуры или делать что-либо еще.
Новый пользователь, которого я только что создал, в настоящее время вообще не имеет права запускать хранимую процедуру. Каков наилучший способ дать пользователю разрешение на это и ничего больше?
3 ответа
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
Должно быть в состоянии сделать:
Предоставить выполнение на xp_fixeddrives имени пользователя
идти
Вам нужно будет использовать EXECUTE AS для этого в SQL 2005, и (я думаю) выдать себя за системного администратора, который также является администратором физического сервера. Обычный пользователь не имеет прав на файловую систему, следовательно, нет результатов. В SQL 2000 просто предоставление им прав на SP сработало бы.