Biz Windows yeniden her zaman, hatta kullanıcı adı gibidir kullanıcı için yeni bir SID yaratacak aynı eskisi gibi.
// example (not real SID format, just show the problem)
user SID
--------------------
liuyan S-old-501 // old SID before reinstall
liuyan S-new-501 // new SID after reinstall
Yeniden yüklemeden sonra can sıkıcı sorun NTFS dosya sahipliği ve sabit diskteki izinler hala eski kullanıcının SID'si ile ilişkilidir.
NTFS dosyalarının sahiplik ve izin ayarını korumak, daha sonra yeni kullanıcının eski kullanıcının SID'sini almasına izin vermek istiyorum, böylece izin sorunu olmadan dosyalara daha önce olduğu gibi erişebiliyorum.
cacls
Yeni kullanıcıya ait dosya yapar çünkü başarısız oldu böylece komut satırı aracı, böyle bir durumda kullanılamaz reddedildi Erişim hatası. ve mülkiyeti değiştiremez.
Ben aracılığıyla owership değiştirebilir bile SubInACL
aracı, cacls
eski kullanıcı yeni yüklemesinde var olmadığından eski kullanıcının iznini kaldıramaz ve olamaz kopyalamak yeni kullanıcıya eski kullanıcıdan izin.
Peki, eski kullanıcının SID'sini yeni yüklenen Windows'ta yeni kullanıcıya bağlayabilir miyiz?
Örnek test partisi
@echo off
REM Additional tools used in this script
REM PsGetSid http://technet.microsoft.com/en-us/sysinternals/bb897417
REM SubInACL http://www.microsoft.com/en-us/download/details.aspx?id=23510
REM
REM make sure these tools are added into PATH
set account=MyUserAccount
set password=long-password
set dir=test
set file=test.txt
echo Creating user [%account%] with password [%password%]...
pause
net user %account% %password% /add
psgetsid %account%
echo Done !
echo Making directory [%dir%] ...
pause
mkdir %dir%
dir %dir%* /q
echo Done !
echo Changing permissions of directory [%dir%]: only [%account%] and [%UserDomain%\%UserName%] has full access permission...
pause
cacls %dir% /G %account%:F
cacls %dir% /E /G %UserDomain%\%UserName%:F
dir %dir%* /q
cacls %dir%
echo Done !
echo Changing ownership of directory [%dir%] to [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
echo Done !
echo RunAs [%account%] user to write a file [%file%] in directory [%dir%]...
pause
runas /noprofile /env /user:%account% "cmd /k echo some text %DATE% %TIME% > %dir%\%file%"
dir %dir% /q
echo Done !
echo Deleting and Recreating user [%account%] (reinstall simulation) ...
pause
net user %account% /delete
net user %account% %password% /add
psgetsid %account%
echo Done ! %account% is recreated, it has a new SID now
echo Now, use this "same" account [%account%] to access [%dir%], it will failed with "Access is denied"
pause
runas /noprofile /env /user:%account% "cmd /k cacls %dir%"
REM runas /noprofile /env /user:%account% "cmd /k type %dir%\%file%"
echo Done !
echo Changing ownership of directory [%dir%] to NEW [%account%]...
pause
subinacl /file %dir% /setowner=%account%
dir %dir%* /q
cacls %dir%
echo Done ! As you can see, "Account Domain not found" is actually the OLD [%account%] user
echo Deleting user [%account%] ...
pause
net user %account% /delete
echo Done !
echo Deleting directory [%dir%]...
pause
rmdir %dir% /s /q
echo Done !