Backup SQLServer cz1.

Backup jak wiadomo jest dość istotną sprawa, szczególnie gdy dane zmieniają się często jak np. odbywa się to w przypadku baz danych. Jak również wiadomo ważna jest lokalizacja składowania kopii zapasowych. Trzymanie backupów na nośniku razem z bazą danych nie jest zbyt rozważną sprawą, dlatego najbezpieczniejszym wyjście w przypadku polityki wykonywania kopii zapasowych baz danych, jest backup poprzez sieć.

Sprawa w teorii wydaje się prosta:

BACKUP DATABASE [NORTHWND] TO  DISK = N'\\BKPServer.contoso.com\E$\Backups\Northwind.bak' WITH NOFORMAT, NOINIT,  NAME = N'NORTHWND-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO

Jednakże w praktyce najczęściej natrafimy na jeden zasadniczy problem związany z uprawnieniami:
Cannot open backup device ‚\\BKPServer.contoso.com\E$\Backups\Northwind.bak’. Operating system error 5(Access is denied.).

Główną przyczyną jest fakt, iż domyślnie usługa SQL Server pracuje z wykorzystaniem konta serwisowego jakim jest NT Service\MSSQLSERVER, które to po prostu nie posiada wystarczających uprawnień poza obrębem lokalnej maszyny.

Rozwiązań niniejszego problemu zapewne jest wiele, mi akurat przychodzą do głowy trzy.

Dziś zaprezentuję pierwsze i najprostsze rozwiązanie. Skoro konto NT Service\MSSQLSERVER jest lokalnym kontem danej maszyny, to po prostu wystarczy nadać uprawnienia do zasobu dla konta tej maszyny, np. Contoso\SQLServer$. Niestety udostępnienie poprzez zasób \\BKPServer.contoso.com\E$ zadziała tylko w momencie, gdy konto Contoso\SQLServer$ trafi do grupy administratorów danej maszyny. Głównie z racji iż jest to automatycznie udostępniany zasób administracyjny i tylko członkowie tej grupy mają do niego dostęp.

$LocalGroup = [ADSI]"WinNT://./Administratorzy" 
$LocalGroup.psbase.Invoke("Add",([ADSI]"WinNT://Contoso/BKPServer$").path)

Alternatywnie:

NET LOCALGROUP Administratorzy /ADD Contoso\SQLServer$ 

Nie jest to zbyt bezpieczne rozwiązanie, ale jak ktoś woli to działa. Jeżeli musimy bardziej popracować nad bezpieczeństwem, możemy obejść tą sytuację poprzez udostępnienie danego katalogu bezpośrednio dla w/w maszyny.

Udostępniamy katalog:

$Trustee = ([WMIClass] "Win32_Trustee").CreateInstance()
$Trustee.Name = "SQLServer$"
$Trustee.Domain = "Contoso"

$ACE = ([WMIClass] "Win32_ACE").CreateInstance()
$ACE.AccessMask = 2032127
$ACE.AceFlags = 3
$ACE.AceType = 0
$ACE.Trustee = $Trustee 

$SD = ([WMIClass] "Win32_SecurityDescriptor").CreateInstance()
$SD.DACL += $ACE.psObject.baseobject        

$Share = [WmiClass]"Win32_Share"
$Parameters = $Share.psbase.GetMethodParameters("Create")
$Parameters.Access = $SD
$Parameters.Description = "SQL Backups"
$Parameters.MaximumAllowed = $Null
$Parameters.Name = "Backups"
$Parameters.Password = $Null
$Parameters.Path = "E:\Backups"
$Parameters.Type = [uint32]0

$Result = $Share.PSBase.InvokeMethod("Create", $Parameters, $Null) 

Następnie nadajemy uprawnienia zabezpieczeń:

$AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule `
("Contoso\SQLServer$","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")

$Acl = Get-Acl "E:\Backups"
$acl.SetAccessRule($AccessRule)
$Acl | Set-Acl

Ostatecznie wystarczy tylko przetestować wykonywanie kopii zapasowej:

BACKUP DATABASE [NORTHWND] TO  DISK = N'\\BKPServer.contoso.com\Backups\Northwind.bak' WITH NOFORMAT, NOINIT,  NAME = N'NORTHWND-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO	

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
Processed 552 pages for database 'NORTHWND', file 'Northwind' on file 2.
100 percent processed.
Processed 2 pages for database 'NORTHWND', file 'Northwind_log' on file 2.
BACKUP DATABASE successfully processed 554 pages in 1.201 seconds (3.603 MB/sec).

I jak widzimy backup wykonał się już bez żadnych zastrzeżeń, czy błędów odnośnie braku dostępu.

Źródła:
http://msdn.microsoft.com/en-us/library/ms186865.aspx
http://msdn.microsoft.com/en-us/library/ms143504.aspx
http://technet.microsoft.com/en-us/library/bb490706.aspx
http://msdn.microsoft.com/en-us/library/aa394435(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa394501(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa394063(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/aa394402(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesystemaccessrule(v=vs.110).aspx

 

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s