我需要能够远程监控 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 的权限即可。