Eu tenho duas instâncias em execução no SQL Server (2017) - SQLEXPRESS e MYINSTANCE
Adicionei alguns usuários a MYINSTANCE
No entanto, quando executo o Sysprep no dispositivo, ele exclui todos, exceto sa
e Builtin\Users
.
No entanto, parece deixar os usuários no SQLEXPRESS sozinhos.
Como posso evitar essa remoção?
Aqui está meu arquivo autônomo: (alguns editados por segurança)
<?xml version="1.0" encoding="utf-8"?>
<unattend xmlns="urn:schemas-microsoft-com:unattend">
<servicing>
<package action="configure">
<assemblyIdentity name="Microsoft-Windows-EnterpriseSEdition" version="10.0.14393.0" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="" />
<selection name="Microsoft-Hyper-V-ClientEdition-Package" state="false" />
</package>
</servicing>
<settings pass="specialize">
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AutoLogon>
<Password>
<Value>#####################################</Value>
<PlainText>false</PlainText>
</Password>
<Username>#########</Username>
<LogonCount>4294967290</LogonCount>
<Enabled>true</Enabled>
</AutoLogon>
<ComputerName>COMPACT-PC</ComputerName>
<ProductKey>###########################</ProductKey>
<TimeZone>GMT Standard Time</TimeZone>
</component>
<component name="Microsoft-Windows-SystemRestore-Main" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DisableSR>1</DisableSR>
</component>
</settings>
<settings pass="oobeSystem">
<component name="Microsoft-Windows-International-Core" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<InputLocale>en-GB;</InputLocale>
<SystemLocale>en-GB</SystemLocale>
<UILanguage>en-GB</UILanguage>
<UILanguageFallback>en-GB</UILanguageFallback>
<UserLocale>en-GB</UserLocale>
</component>
<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<AutoLogon>
<Password>
<Value>##################################</Value>
<PlainText>false</PlainText>
</Password>
<LogonCount>4294967290</LogonCount>
<Username>#########</Username>
<Enabled>true</Enabled>
</AutoLogon>
<FirstLogonCommands>
<SynchronousCommand wcm:action="add">
<Order>9</Order>
<CommandLine>powercfg.exe -setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c</CommandLine>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>powercfg.exe -SETACVALUEINDEX ########################## #################### #####################</CommandLine>
<Order>10</Order>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<Order>1</Order>
<Description>bcdedit.exe /set {current} bootstatuspolicy ignoreallfailures</Description>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
<CommandLine>"C:\Windows\System32\sysprep\sidFoldRename.vbs"</CommandLine>
<Order>12</Order>
</SynchronousCommand>
</FirstLogonCommands>
<OEMInformation>
<Manufacturer>###########</Manufacturer>
<SupportURL>####################</SupportURL>
<Model>#################</Model>
</OEMInformation>
<OOBE>
<NetworkLocation>Home</NetworkLocation>
<ProtectYourPC>3</ProtectYourPC>
<HideEULAPage>true</HideEULAPage>
<HideWirelessSetupInOOBE>true</HideWirelessSetupInOOBE>
<SkipUserOOBE>true</SkipUserOOBE>
<SkipMachineOOBE>true</SkipMachineOOBE>
</OOBE>
<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>
<Value>#############################</Value>
<PlainText>false</PlainText>
</Password>
<Group>Administrators</Group>
<Description>######</Description>
<DisplayName>######</DisplayName>
<Name>#####</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>
<WindowsFeatures>
<ShowMediaCenter>false</ShowMediaCenter>
<ShowWindowsMail>false</ShowWindowsMail>
<ShowWindowsMediaPlayer>false</ShowWindowsMediaPlayer>
<ShowInternetExplorer>true</ShowInternetExplorer>
</WindowsFeatures>
<BluetoothTaskbarIconEnabled>true</BluetoothTaskbarIconEnabled>
</component>
</settings>
<settings pass="generalize">
<component name="Microsoft-Windows-PnpSysprep" processorArchitecture="amd64" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<PersistAllDeviceInstalls>true</PersistAllDeviceInstalls>
<DoNotCleanUpNonPresentDevices>true</DoNotCleanUpNonPresentDevices>
</component>
</settings>
<cpi:offlineImage cpi:source="wim:e:/sources/install.wim#Windows 10 Enterprise 2016 LTSB" xmlns:cpi="urn:schemas-microsoft-com:cpi" />
</unattend>
(O nome de usuário e a senha são os mesmos em cada seção)
Aqui está o comando usado para executar o sysprep...
c:\windows\system32\sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:c:\windows\system32\sysprep\myAnswerFile.xml
Mas até faz isso no modo de auditoria sem um arquivo de resposta.
Obrigado por qualquer ajuda...
Editar
Acabei de notar algo estranho - se eu iniciar o serviço Single User Mode, todos os usuários voltam!
Isso ocorre por design: o Sysprep leva o estado de uma instalação de volta ao que era quando foi instalado pela primeira vez: sem contas de usuário, sem configuração, sem endereço IP, sem nome, sem associação de domínio. A última etapa do Sysprep é a generalização, garantindo que a versão instalada a partir da imagem obtenha seus próprios SIDs para os IDs de usuário etc. e que o OOBE (Out of the Box Experience) seja executado durante a instalação.
Embora a documentação oficial não seja muito detalhada, você encontrará um aviso explícito sobre isso nas notas da Amazon AWS para Create a custom Windows AMI :
A Microsoft ajustou o Sysprep para reconhecer uma instalação do SQL Server, na medida em que você encontrou, mas não pode manter os logins de usuários, exceto para o administrador que usa um SID conhecido, devido aos motivos mencionados na citação acima.
SQLEXPRESS, sendo um produto antigo, não pode ser influenciado por isso.
O problema aqui é que o Sysprep altera os SIDs dos usuários do Windows, mas não afeta os logins no SQL Server
Isso significa que os SIDs que o SQL Server armazenou correspondendo a cada logon do SQL para um usuário do Windows não são mais válidos - ainda é o SID antigo.
A solução aqui foi criar um script para executar
<FirstLogonCommands>
...SQLCMD
.Eu tinha isso como um arquivo .BAT, embora possa haver uma maneira mais elegante de fazer isso. Colocar o servidor no modo de usuário único é necessário porque neste momento não há contas com permissão para adicionar/remover logins.
Não sei por que o SQLEXPRESS não foi afetado. No entanto, acho que o SQL estava um pouco confuso e versões diferentes apenas lidaram com a confusão de maneira diferente. por exemplo, quando recriei um logon dessa maneira em MYINSTANCE, ele não apareceu. Quando recriei outro, todos eles apareceram na lista "Segurança", mas apenas o que eu recriei realmente funcionou. Eu suspeito que enquanto o SQLEXPRESS estava exibindo todos os logins, eles provavelmente não funcionaram.