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

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

要点:我希望能够通过非系统管理员 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 。这可能吗?

我不愿意给我们的本地数据库用户系统管理员权限,它有一个有限的用户是有原因的。

数据库服务器是 Microsoft SQL Server 2008 R2。

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

最佳答案

一个可能的解决方案是编写您自己的存储过程,在内部使用 master.dbo.xp_create_subdir

创建存储过程,同时以 sysadmin 角色成员的帐户登录并使用“WITH EXECUTE AS SELF”。然后授予该其他帐户执行此存储过程的权限。您创建此包装程序存储过程的数据库目录必须标记为“可信”,否则您仍然会得到:用户必须是“sysadmin”服务器角色的成员。 错误。

例如


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

只要确保您将任何需要的断言/检查添加到对您的应用程序有意义的存储过程(例如,路径只能是您期望的模式)。

迟来的更新:添加了将目录标记为可信任的重要提示。

关于sql - 在没有管理员权限的情况下运行 xp_create_subdir,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25368172/

相关文章:

php - 如何在登录脚本中使用 session

sql - T-SQL View 在一次检索中检索两个查找

c# - 拆箱数据库值的正确方法

javascript - 从函数中获取 react native 获取数据

c# - 难以将数据从 C# 窗体插入数据库

sql - 如何使用查询在不同列中查找相同值的出现

mysql - 更新 mysql select 到 insert 语句中

mysql - Sql 查找一对多关系上的最新 id

sql - 如何在不聚合的情况下使长表变宽?

SQL 用户定义函数,找不到 dbo 或用户定义函数