Setiap kali kami menginstal ulang Windows, itu akan membuat SID baru untuk pengguna, bahkan nama pengguna sama seperti sebelumnya.
// 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
Masalah yang mengganggu setelah menginstal ulang adalah NTFS file owership dan izin pada hard drive disk masih terkait dengan SID pengguna lama.
Saya ingin mempertahankan pengaturan kepemilikan dan izin file NTFS, kemudian ingin membiarkan pengguna baru mengambil SID pengguna lama, sehingga saya dapat mengakses file seperti sebelumnya tanpa masalah izin.
The cacls
tool baris perintah tidak dapat digunakan dalam situasi seperti itu, karena file tidak milik pengguna baru, sehingga akan gagal dengan Akses ditolak kesalahan. dan itu tidak dapat mengubah kepemilikan.
Bahkan jika saya dapat mengubah kepemilikan melalui SubInACL
alat, cacls
tidak dapat menghapus izin pengguna lama karena pengguna lama tidak ada pada instalasi baru, dan tidak dapat menyalin izin pengguna lama ke pengguna baru.
Jadi, bisakah kita hanya mengikat SID pengguna lama ke pengguna baru di Windows yang baru diinstal?
Batch uji sampel
@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 !