Как я могу дать пользователю 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 сработало бы.

Другие вопросы по тегам