【发布时间】:2017-08-08 19:32:27
【问题描述】:
我正在开发一个相当大的应用程序,其中通过运行 SQL 脚本来创建数据库模式(表、存储过程等)。该脚本是通过 xp_cmdshell 从存储过程中调用的,如下所示。
CREATE PROC CreateNewScheme AS
BEGIN
...
EXEC xp_cmdshell 'osql createschema.sql -U username ...'
...
END
此存储过程在程序初始化期间运行一次,并在计划作业期间由 SQL Server 代理再次运行。
出于安全考虑,我们需要禁用 xp_cmdshell。我的第一个倾向是将所有模式创建命令插入现有的存储过程,以便可以根据需要执行。但是,这种方法不起作用,因为 SQL Server 不支持从其他存储过程创建存储过程。
一种替代方法可能是从外部应用程序而不是 SQL 脚本调用架构创建脚本,但这需要相当大的重写,我们会尽可能避免这种情况。
有没有一种方法可以通过最少的更改来实现这一点?
【问题讨论】:
标签: sql-server stored-procedures sql-server-2016 xp-cmdshell