web-dev-qa-db-ja.com

SQL Serverユーザーに1つのストアドプロシージャだけを実行する権限を与えるにはどうすればよいですか?

SQL2005サーバーのディスク領域をリモートで監視できる必要があります。これを行うには、SQLサーバーユーザーに次のストアドプロシージャを実行する機能を与える必要があります。

EXEC xp_fixeddrives;

理想的には、このユーザーには、他のストアドプロシージャを実行したり、他の多くのことを実行したりする権限がありません。

現在作成した新しいユーザーには、ストアドプロシージャを実行する権限がまったくありません。これを実行する許可をユーザーに与えるための最良の方法は何ですか?

2
Dave Forgac

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
1
Remus Rusanu

できるはずです:

xp_fixeddrivesでの実行をユーザー名に付与する

行く

1
user6373

SQL 2005ではこれに EXECUTE AS を使用する必要があり、(私は)物理サーバーの管理者でもあるシステム管理者になりすます。通常のユーザーにはファイルシステムに対する権限がないため、結果は得られません。 SQL 2000では、SPへの権限を付与するだけで機能します。

0
MartW