簡體   English   中英

如何在工作組環境中為MS SQL Server創建Windows服務帳戶?

[英]How to create a Windows service account for MS SQL Server in a workgroup environment?

我在工作組中有兩台Windows Server 2012 R2服務器,第一個是MS SQL Server,另一個是(除其他外)用作備份存儲。 在數據庫服務器上,SQL Server數據庫引擎和SQL Server代理均使用默認虛擬帳戶-NT Service \\ MSSQLSERVER和NT Service \\ SQLSERVERAGENT運行。

現在,我想使用Ola Hallengren維護作業來備份我的MS SQL Server數據庫。 這些腳本被包裝到SQL Server代理作業中,但是備份是一個t-sql過程,因此由帶有NT Service \\ MSSQLSERVER的SQL Server數據庫引擎執行。

我已經在存儲服務器上創建了一個帳戶,並創建了一個共享文件夾,並對該帳戶具有訪問權限。 我可以使用net use命令連接數據庫服務器上的共享,該命令為創建的帳戶提供憑據。 有一個陷阱:共享已連接到運行net use命令的帳戶。

如果我將共享與本地系統帳戶(應該適用於所有用戶)連接,則NT Service \\ MSSQLSERVER仍然無法訪問它,其他任何帳戶都無法訪問它。 似乎先前在stackoverflow上提出hack已在Windows Server 2012 R2中修復。

而且,如果我在SQL Server代理作業中作為步驟運行net use命令,則使用另一個虛擬帳戶-NT Service \\ SQLSERVERAGENT-完成該操作,並且備份步驟失敗,並顯示“找不到文件夾”錯誤。

因此,我想知道一種創建Windows服務帳戶的方法,該帳戶具有在工作組環境中使用的SQL Server數據庫引擎服務的所有必需權限 或解釋為何無法完成。 理想情況下,它應該是腳本-Powershell或VBScript。

我嘗試將SQL Server Dabase Engine和SQL Server Agent都作為本地系統運行,並且備份的工作原理很不錯。 但是我不認為這是一種解決方案,因為從安全角度來看不建議這樣做。

另外,出於相同的安全原因,我也不會考慮使用xp_cmdshell運行net use命令的解決方案。

好的,正確的方法是執行以下操作:

  • 在兩個服務器上以完全相同的名稱創建一個用戶帳戶。 如果用戶名為.\\UserName而不是ServerName\\UserName則可以完成此操作。
  • 完成后,您需要嗅探虛擬服務帳戶NT Service\\MSSQLSERVER權限。 這可以通過使用SubInACL實用程序來完成。 該工具是由Microsoft專門為此目的而創建的,可以從官方的Microsoft下載中心下載。 或者,您可以跳過嗅探實際權限,然后繼續進行下一步。
  • 可以使用相同的SubInACL工具為新創建的帳戶設置知識庫文章https://msdn.microsoft.com/zh-cn/library/ms143504.aspx中描述的所有權限。 互聯網上有幾篇有關如何使用該工具的文章,我使用了這一篇-https://redmondmag.com/articles/2008/03/01/dive-deep-with-subinacl.aspx
  • 最后的步驟將是:在新創建的用戶帳戶下啟動SQL Server服務,並提供對另一台服務器上共享文件夾的訪問。

可能這應該去superuser.com

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

  1. 通過tsql使用登錄詳細信息創建和編寫腳本,等等。 並將其導出到磁盤上的腳本文件。
  2. 運行運行腳本。
  3. 再次刪除腳本文件。

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

要使用T-sql創建批處理文件,請執行以下操作:

--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計划任務,以在創建后的指定時間獨立於SQL運行。 當時與SSIS一起運行是不可預測的。 只有一列很長的目標列(長度為200,取決於您的長度)。

恕我直言,您最好的選擇還是在xp_cmdshell中運行net use \\\\remotehost\\folder password /user:remotehost\\username

您只需要運行一次即可,如果您不喜歡它,則可以再次關閉xp_cmdshell。 這不像更改該選項需要重新啟動=)

為此,我建議將其放入“啟動”過程。 如果您擔心有人會sp_helptext它來查找該登錄名的密碼,甚至可以添加WITH RECOMPILE 再說一遍,人們可能會在發現已加密的啟動過程時驚慌失措=)

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...到該共享。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM