Назад | Перейти на главную страницу

Как я могу дать пользователю SQL Server разрешение на запуск одной хранимой процедуры и ничего больше?

Мне нужно иметь возможность удаленно контролировать дисковое пространство на сервере 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.