首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在工作组环境中为MS SQL Server创建Windows服务帐户?

如何在工作组环境中为MS SQL Server创建Windows服务帐户?
EN

Stack Overflow用户
提问于 2016-11-27 22:51:43
回答 3查看 7.3K关注 0票数 3

我在一个工作组中有两个Windows 2012 R2服务器,第一个有,另一个用作备份存储。在数据库服务器上,MSSQLSERVER数据库引擎和MSSQLSERVER代理都以默认虚拟帐户运行- NT Service\MSSQLSERVER和NT Service\SQLSERVERAGENT。

现在,我想使用Ola Hallengren维护作业来备份我的MS数据库。这些脚本被包装到MSSQLSERVER代理作业中,但是备份是由带有NT Service\MSSQLSERVER的MSSQLSERVER数据库引擎执行的the过程。

我在存储服务器上创建了一个帐户,并为该帐户创建了一个具有访问权限的共享文件夹。我能够通过一个net use命令连接数据库服务器上的共享,为创建的帐户提供凭据。有一个问题:共享是为运行net use命令的帐户连接的。

如果我将共享连接到本地系统帐户(应该是针对所有用户的),那么NT Service\MSSQLSERVER仍然无法访问它,任何其他帐户都不能访问它。以前在堆栈溢出上提出的hack似乎是在Windows 2012 R2中修复的。

如果我在Server代理作业中将net命令作为步骤运行,那么它将与其他虚拟帐户-- NT Service\SQLSERVERAGENT --一起完成,而备份步骤由于“文件夹未找到”错误而失败。

因此,我想知道如何使用所有必要的权限创建一个Windows帐户,以便在工作组环境中使用Server数据库引擎服务。或者解释为什么不能这样做。理想情况下,它应该是一个脚本- Powershell或VBScript。

我尝试将SQL Server Dabase引擎和SQL Server代理作为本地系统运行,并且备份工作起来很有魅力。但我不认为这是一种解决方案,因为从安全的角度来看,它是不被推荐的。

此外,出于同样的安全原因,我也不会考虑使用cmdshell运行net命令的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-19 05:42:51

好的,正确的方法是做以下几件事:

  • 在两个服务器上使用完全相同的名称创建一个用户帐户。如果用户名为.\UserName而不是ServerName\UserName,则可以这样做。
  • 一旦完成,您需要嗅探虚拟服务帐户NT Service\MSSQLSERVER的权限。这可以通过使用SubInACL实用程序来完成。此工具正是由Microsoft为此目的创建的,可从官方Microsoft下载中心下载。或者,您可以跳过嗅探实际权限,然后继续到下一个点。
  • 知识库文章https://msdn.microsoft.com/en-us/library/ms143504.aspx中描述的所有权限都可以用相同的SubInACL工具为新创建的帐户设置。在互联网上有几篇关于如何使用这个工具的文章,我使用了这个- https://redmondmag.com/articles/2008/03/01/dive-deep-with-subinacl.aspx
  • 最后的步骤是:在新创建的用户帐户下启动server服务,并提供对另一个服务器上共享文件夹的访问。

也许这个应该转到superuser.com

票数 0
EN

Stack Overflow用户

发布于 2016-12-01 02:53:49

是否可以使用SSISpackage执行以下操作:

  1. 通过tsql创建并编写带有登录信息等内容的脚本,并将其导出到磁盘上的脚本文件中。
  2. 运行脚本。
  3. 再次删除脚本文件。

示例:https://www.simple-talk.com/sql/ssis/adding-the-script-task-to-your-ssis-packages/

若要使用T创建批处理文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--Set first day of Week to Monday
--Value First day of the week is 
--1 Monday 
--2 Tuesday 
--3 Wednesday 
--4 Thursday 
--5 Friday 
--6 Saturday 
--7 (default, U.S. English) Sunday 
SET DATEFIRST 1

Declare @CmdSource varchar(100),
    @CmdDestination varchar(100),
    @Year varchar(4),
    @Week varchar (2),
    @Difference int

Set @Difference = 0
Set @Year = Convert(varchar(4), DatePart(Year, GetDate()-@Difference))
Set @Week = Convert(varchar(2), DatePart(week, GetDate()-@Difference))
If @Year = '2010'
BEGIN
    Set @Week = @Week - 1
END

SELECT @Week = 
        CASE Len(@Week)
            WHEN 1
            THEN '0' + @Week
            else @Week
        END

Set @CmdSource = 'XCopy "<sourcepath>' + @Year + '\extras text' + @Year + @Week + '.bak" '
Set @CmdDestination = '"<Destination path>" /Y'

SELECT @CmdSource + @CmdDestination as Batchfile

我们选择在设定的时间创建文件。然后,我们设置一个单独的windows调度任务,以便在创建之后的一个固定时间独立运行。2010年,使用SSIS运行是不可预测的。只有一个非常长的目标列(长度为200,最长为多久)。

票数 -1
EN

Stack Overflow用户

发布于 2016-12-03 12:45:53

IMHO,您最好的选择仍然是在xp_cmdshell中运行xp_cmdshell。

您只需要运行它一次,然后如果您不喜欢它,可以再次关闭xp_cmdshell;这不像更改该选项需要重新引导=)

为此,我建议将其纳入“启动”程序。您甚至可以添加WITH RECOMPILE,如果您担心有人会sp_helptext它来找到该登录的pwd。再说一遍,当人们发现一个加密的启动过程时,人们可能会抓狂。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
USE master
GO
CREATE PROCEDURE sp_net_use_that_other_server
AS

-- To allow advanced options to be changed.  
EXEC sp_configure 'show advanced options', 1;  

-- To update the currently configured value for advanced options.  
RECONFIGURE;  

-- To enable the feature.  
EXEC sp_configure 'xp_cmdshell', 1;  

-- To update the currently configured value for this feature.  
RECONFIGURE;  

-- you might want to fetch this dynamically from the database somewhere, or simply leave it hardcoded here...

EXEC master..xp_cmdshell 'net use \\remotehost\folder password /user:remotehost\username'

-- To disable the feature.  
EXEC sp_configure 'xp_cmdshell', 0;  

-- To update the currently configured value for this feature.  
RECONFIGURE;  


Return
GO

-- set this up as a startup procedure
EXEC sp_procoption @ProcName = 'sp_net_use_that_other_server'   
                 , @OptionName =  'startup'   
                 , @OptionValue = 'on';  

GO

在此之后,数据库引擎应该能够对该共享进行BACKUP DATABASE...

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40838585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文