如何授予 SQL Server 用户运行一个存储过程的权限而不授予其他任何权限?

如何授予 SQL Server 用户运行一个存储过程的权限而不授予其他任何权限?

我需要能够远程监控 SQL 2005 服务器上的磁盘空间。为此,我需要授予 SQL Server 用户运行以下存储过程的能力:

EXEC xp_fixeddrives;

理想情况下,该用户无权运行其他存储过程或执行任何其他操作。

我刚刚创建的新用户目前根本没有权限运行存储过程。有什么最好的方法可以让用户只执行此操作而不执行其他操作吗?

答案1

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

答案2

应该能够做到:

授予用户名在 xp_fixeddrives 上的执行权限

答案3

你需要使用执行方式在 SQL 2005 中,并(我认为)冒充系统管理员,该管理员也是物理服务器的管理员。普通用户没有文件系统的权限,因此没有结果。在 SQL 2000 中,只需授予他们 SP 的权限即可。

相关内容