我需要能够远程监视SQL 2005服务器上的磁盘空间。 要做到这一点,我需要给一个SQL服务器用户运行以下存储过程的能力:
EXEC xp_fixeddrives;
理想情况下,这个用户将没有权限运行其他存储过程或做其他事情。
我刚刚创build的新用户根本没有运行存储过程的权限。 什么是最好的方式给予用户权限做到这一点,而不是别的?
xp_fixeddrives是一个无证的过程。 所以基本上,它不存在。 没有书面的方式来授予,拒绝或撤销对它的任何许可,并且执行它的结果基本上可以是任何东西。
话虽如此,你可以尝试在一个普通的程序中包装XP,然后使用代码签名来授予程序所需的权限,然后在包装器上向用户授予EXEC,类似于我的博客中的示例: 签名激活程序 。 这在我的机器上工作。 您的里程可能会有所不同,您可以随时使用无证function:
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 ,并且(我想)模拟一个也是物理服务器pipe理员的系统pipe理员。 普通用户对文件系统没有权限,因此没有任何结果。 在SQL 2000中,仅仅授予他们对SP的权利就行得通了。