Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在没有管理员权限的情况下运行xp_create_subdir_Sql_Sql Server_Database_Sql Server 2008 R2 - Fatal编程技术网

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

Sql 在没有管理员权限的情况下运行xp_create_subdir,sql,sql-server,database,sql-server-2008-r2,Sql,Sql Server,Database,Sql Server 2008 R2,要点:我希望能够通过非sysadmin SQL用户在文件系统上创建目录 我正在为部署脚本创建一个web前端,该脚本从指定的模板数据库创建新数据库 从本质上说,我备份了上述模板数据库,然后将其恢复为一个具有不同名称的全新数据库 我们的DB服务器将客户机数据库存储在数据库存储区内的子文件夹中。如果我使用默认设置,它看起来像: GRANT EXECUTE ON OBJECT::master.dbo.xp_create_subdir TO <SQL USER>; D:\Microsoft

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

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

从本质上说,我备份了上述模板数据库,然后将其恢复为一个具有不同名称的全新数据库

我们的DB服务器将客户机数据库存储在数据库存储区内的子文件夹中。如果我使用默认设置,它看起来像:

GRANT EXECUTE ON OBJECT::master.dbo.xp_create_subdir 
TO <SQL USER>;
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\u create\u subdir。这可能吗

我不愿意给我们的本地DB用户sys admin权限,它有一个有限的用户是有原因的

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


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

您可以授予用户显式使用该存储过程的权限。会是这样的:

GRANT EXECUTE ON OBJECT::master.dbo.xp_create_subdir 
TO <SQL USER>;
GRANT对对象执行::master.dbo.xp\u create\u subdir
到

不过,听起来用户受到限制是有原因的,获得额外的权限来运行类似的东西可以从管理数据库的人那里得到一点帮助。因此,在处理提升权限时要小心。

一个可能的解决方案是编写自己的存储过程,在内部使用
master.dbo.xp\u create\u subdir
。以管理员身份登录时创建存储过程,并使用“以自身身份执行”。然后允许您的其他帐户执行此存储过程

例如


创建过程[dbo].[SproCassRedirectory]@directoryFullPath varchar(4000)
以自我执行
作为
开始
EXEC master.dbo.xp_create_subdir@directoryFullPath;
结束

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

Afaik可以通过证书签名的存储过程授予此类权限。这看起来可能有点复杂,但这是在MSSQL中实现权限提升的最佳方法。“不过,我自己从来没有试过。@Ennor好主意,我会试一试。这个答案行不通。”。报告的错误是用户不是系统管理员。因此,不要否决答案,因为答案是100%有效的,而您只是没有正确的权限。由于您没有SA权限,您必须与DBA对话,并让他们授予您运行存储过程的权限。听起来你现在的权利已经被限制在盒子上了。你知道你有什么权利吗?让我再说一句,即使在成功授予推荐的权限后,答案也不起作用。错误消息表示该用户不是系统管理员。2012年测试。我刚测试过,效果不错。您要授予访问权限的用户需要至少具有数据库的公共访问权限。这对我不起作用。我必须使用
executeasowner
,并确保数据库由具有
sysadmin
权限的登录名所拥有(例如
sa
ALTER DATABASE[DBNAME]将可信设置为ON也是必需的。听起来好像你没有以“sa”的形式执行它,虽然“值得信赖”的部分是有道理的。我没有。我还使用了另一个登录名
sysadmin