在没有管理员权限的情况下运行xp_create_subdir

时间:2014-08-18 16:46:46

标签: sql sql-server database sql-server-2008-r2

要点:我希望能够通过非sysadmin SQL用户在文件系统上创建目录。

我正在为部署脚本创建Web前端,该脚本从指定的模板数据库创建新数据库。

基本上我正在备份所说的模板数据库,然后将其恢复为具有不同名称的全新数据库。

我们的数据库服务器将我们的客户端数据库存储在数据库存储中的子文件夹中。如果我使用默认设置,它将类似于:

  

D:\ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ DATA \ [ClientRef] \ [ClientRef] .mdf   D:\ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ MSSQL \ DATA \ [ClientRef] \ [ClientRef] .ldf

我只有SQL访问数据库服务器(通过编程语言,托管在一个单独的盒子上)所以我不能执行除SQL以外的任何东西。

我的数据库用户非常有限,但我想以某种方式授予此用户访问/执行 master.dbo.xp_create_subdir 的权限。这有可能吗?

我不愿意为我们的本地数据库用户提供sys-admin权限,因此有一个有限的用户。

DB Server是Microsoft SQL Server 2008 R2。

干杯,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

一个可能的解决方案是编写自己的内部使用 master.dbo.xp_create_subdir的存储程序。以管理员身份登录时创建存储过程,并使用“ WITH EXECUTE AS SELF”。然后,让您的其他帐户执行此存储过程。

例如


CREATE PROCEDURE [dbo].[sprocAssureDirectory] @directoryFullPath varchar(4000)
WITH EXECUTE AS SELF 
AS
BEGIN
    EXEC master.dbo.xp_create_subdir @directoryFullPath;
END

只需确保添加对应用程序有意义的额外断言/检查(例如,路径只能是您期望的模式)。

答案 1 :(得分:-2)

您可以为用户提供显式使用该存储过程的访问权限。它会是这样的:

GRANT EXECUTE ON OBJECT::master.dbo.xp_create_subdir 
TO <SQL USER>;

听起来这个用户因某种原因受到限制,并且获得运行类似内容的额外权限可以从管理数据库的人那里得到一点回击。因此,在处理获得提升的权利时要小心。