我在 SQL Server (2017) 上运行了两个实例 - SQLEXPRESS 和 MYINSTANCE
我在 MYINSTANCE 中添加了一些用户
但是,当我在设备上运行 Sysprep 时,它会删除除sa
和之外的所有内容Builtin\Users
。
然而,它似乎让用户单独使用 SQLEXPRESS。
我怎样才能防止这种删除?
这是我的无人值守文件:(为安全起见,一些已编辑)
<?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>
(每个部分的用户名和密码都相同)
这是用于运行 sysprep 的命令...
c:\windows\system32\sysprep\sysprep.exe /generalize /oobe /shutdown /unattend:c:\windows\system32\sysprep\myAnswerFile.xml
但它甚至在没有应答文件的情况下在审计模式下执行此操作。
谢谢你的帮助...
编辑
我刚刚注意到一些奇怪的事情 - 如果我启动服务单用户模式,用户都会回来!
这是设计使然:Sysprep 将安装状态恢复到首次安装时的状态:没有用户帐户、没有配置、没有 IP 地址、没有名称、没有域成员资格。Sysprep 的最后一步是泛化,确保从映像安装的版本为用户 ID 等获取自己的 SID,并且在安装期间运行 OOBE(开箱即用体验)。
尽管官方文档不是很详细,但您会在 Amazon AWS 的 Create a custom Windows AMI说明中找到明确的警告:
Microsoft 已调整 Sysprep 以识别 SQL Server 安装,就您发现的情况而言,但由于上述引用中提到的原因,它不能保留用户登录,除了使用已知 SID 的管理员。
SQLEXPRESS 作为一个老产品,可能不受此影响。
这里的问题是 Sysprep 更改了 Windows 用户的 SID,但不影响 SQL Server 中的登录
这意味着 SQL Server 存储的与 Windows 用户的每个 SQL 登录匹配的 SID 不再有效 - 它仍然是旧的 SID。
这里的解决方案是创建一个脚本来运行
<FirstLogonCommands>
...SQLCMD
.我把它作为一个 .BAT 文件,尽管可能有一种更优雅的方法。将服务器置于单用户模式是必要的,因为此时没有具有添加/删除登录权限的帐户。
我不确定为什么 SQLEXPRESS 没有受到影响。但是我猜 SQL 有点混乱,不同的版本只是以不同的方式处理混乱。例如,当我在 MYINSTANCE 中以这种方式重新创建一次登录时,它没有出现。当我重新创建另一个时,它们都出现在“安全”列表中,但只有我重新创建的那个真正起作用。我怀疑当 SQLEXPRESS 显示所有登录时,它们可能不起作用。