SQL Serverデータベースのディスクファイルの権限を一括で変更する

会社セキュリティポリシーの調整により、機械師 miniは最終的に自宅へ移転し、予備サーバーとして利用。同時にマシンシステムを再インストールし、ubuntuwindows serverに切り替えられました。アクティベーション手段が不正であったため、自宅で使用しても問題ないように見えていましたが、実際にはアクティベーションができていないと様子がおかしくなりました。

Microsoftによる検出がトリガーされ、通常稼働していたサーバーが起動から1時間で自動シャットダウン。システムログを徹底的に調査した結果、盗版であることに至りました。

仕方なく再度システムを再インストールし、SqlServerも再インストールする必要が生じました。毎回トラブルシューティングを行うと非常に面倒であり、ファイル権限管理が厳格であるため、データベースの追加が正常に行えませんでした。

エラーメッセージ

システムを再インストールした後、SqlServerがデータベースに接続しようとすると、オペレーティングシステムのアクセス拒否エラー5120が発生することがあります。

処理スクリプト

前文リンク:ローカルGitリポジトリの一括更新、やはりこの馴染み深いスクリプトだ。改造して、フォルダをトラバースしながらファイルの権限を変更し、現在のユーザーに完全な編集権限を与えるようにする。

ネット上のチュートリアルはほとんどが手動で修正する方法を示しており、毎回数個のファイルだけ修正するのだろうか? 私は毎回多数のファイルを処理する必要があり、すべてを手作業で処理すると、精神的に疲れてしまう。

$currentUserName = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
$rootDirectory = "D:\data\2013_RujiaInfo"

Get-ChildItem -Path $rootDirectory -Recurse | ForEach-Object {
    $itemPath = $_.FullName

    if ($_ -is [System.IO.DirectoryInfo]) {
        $icaclsResult = icacls $itemPath /setowner "$currentUserName" 2>&1
        if ($LASTEXITCODE -eq 0) {
            Write-Host "フォルダ $itemPath の所有者を $currentUserName に変更しました"
            # 現在のユーザーに書き込み権限を付与
            Invoke-Expression "icacls `"$itemPath`" /grant `"$($currentUserName):(OI)(CI)F`""
            Write-Host "$currentUserName がフォルダを編集するための権限が付与されました"
        } else {
            Write-Host "フォルダ $itemPath の所有者を変更できません。エラー情報: $icaclsResult"
        }
    } else {
        $takeownResult = icacls $itemPath /setowner "$currentUserName" 2>&1
        if ($LASTEXITCODE -eq 0) {
            # 現在のユーザーに書き込み権限を付与
            Invoke-Expression "icacls `"$itemPath`" /grant `"$($currentUserName):(F)`""
            Write-Host "$currentUserName がファイルを編集するための権限が付与されました"
        } else {
            Write-Host "ファイル $itemPath の所有者を変更できません。エラー情報: $takeownResult"
        }
    }
}
Licensed under CC BY-NC-SA 4.0
最終更新 2025年06月02日 20:54
金融ITプログラマーのいじくり回しと日常のつぶやき
Hugo で構築されています。
テーマ StackJimmy によって設計されています。