SQL2005サーバーのディスク領域をリモートで監視できる必要があります。これを行うには、SQLサーバーユーザーに次のストアドプロシージャを実行する機能を与える必要があります。
EXEC 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
できるはずです:
xp_fixeddrivesでの実行をユーザー名に付与する
行く
SQL 2005ではこれに EXECUTE AS を使用する必要があり、(私は)物理サーバーの管理者でもあるシステム管理者になりすます。通常のユーザーにはファイルシステムに対する権限がないため、結果は得られません。 SQL 2000では、SPへの権限を付与するだけで機能します。