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