【Windows】SIDからユーザー名・グループ名への変換方法と、ユーザー名からSIDを取得する手順を徹底解説
SID(Security IDentifier)は、WindowsやActive Directoryドメインでユーザー、グループ、コンピューターなどのセキュリティオブジェクトが作成される際に割り当てられる一意の識別子です。Windowsはネットワーク共有フォルダー、レジストリキー、ファイルシステムオブジェクト(NTFSアクセス許可)、プリンターなどへのアクセス制御を行う際、ユーザー名ではなくこのSIDを使用します。本記事では、ユーザーやグループ、コンピューターのSIDを調べる簡単な方法と、その逆の手順である「既知のSIDからオブジェクト名を取得する方法」について詳しく解説します。
SID(Windowsセキュリティ識別子)とは?
SID(セキュリティ識別子)は、特定の範囲(ドメインまたはローカルコンピューター)内でユーザー、グループ、コンピューターを一意に識別するためのものです。SIDは以下のような形式の文字列です。
S-1-5-21-489056535-1467421822-2524099697-1231
- 「489056535-1467421822-2524099697」の部分は、そのSIDを発行したドメインの一意な識別子です。同じドメイン内のすべてのオブジェクトでこの部分は共通になります。
- 末尾の「1231」はオブジェクトの相対セキュリティ識別子(RID)です。1000から始まり、新しいオブジェクトが作成されるごとに1ずつ増加します。RIDはFSMOロールの「RIDマスター」を持つドメインコントローラーによって発行されます。
Active DirectoryオブジェクトのSIDはntds.ditデータベースに保存され、ローカルユーザーおよびグループのSIDは、レジストリキーHKEY_LOCAL_MACHINE\SAM\SAMにあるWindows Security Account Manager(SAM)データベースに保存されます。
また、WindowsにはWell-known SIDs(既知のSID)と呼ばれる特別なSIDが存在します。これは、すべてのWindowsコンピューターに共通して存在する組み込みユーザーや組み込みグループに割り当てられたSIDです。例えば以下のようなものがあります。
S-1-5-32-544– 組み込みのAdministratorsグループS-1-5-32-545– ローカルUsersグループS-1-5-32-555– RDP経由でのログオンが許可されたRemote Desktop UsersグループS-1-5-domainID-500– 組み込みのWindows管理者アカウント- など
Windowsでは、whoamiツール、wmic、WMIクラス、PowerShell、サードパーティ製ユーティリティなど、さまざまなツールを使って「SID→名前」「ユーザー名→SID」の相互変換が可能です。
ローカルユーザーのSIDを確認する方法
ローカルユーザーアカウントのSIDを取得するには、WMI名前空間に対してクエリを実行できるwmicツールが便利です。ローカルユーザーtest_userのSIDを取得するには、次のコマンドを実行します。
wmic useraccount where name='test_user' get sid
このコマンドにより、指定したローカルユーザーのSIDが返されます。この例ではS-1-5-21-1175659216-1321616944-201305354-1005です。なお、WMIリポジトリが破損している場合、このコマンドはエラーを返すことがあります。その場合はWMIリポジトリの修復ガイドを参照してください。
すべてのローカルユーザーのSIDを一覧表示するには、次のコマンドを実行します。
wmic useraccount get name,sid
現在ログオンしているユーザー自身のSIDを取得したい場合は、以下のコマンドを使用します。
wmic useraccount where name='%username%' get sid
PowerShellから直接WMIに問い合わせることもできます。
(Get-WmiObject -Class win32_userAccount -Filter "name='test_user' and domain='$env:computername'").SID
なお、PowerShell Core 7.x以降のバージョンでは、Get-WmiObjectコマンドレットの代わりにGet-CimInstanceを使用する必要があります。
さらに簡単な方法として、ローカルユーザーとグループを管理するための組み込みPowerShellモジュール(Microsoft.PowerShell.LocalAccounts)を使う方法があります。
Get-LocalUser -Name 'test_user' | Select-Object Name, SID
同様の方法で、ローカルコンピューターのグループのSIDも取得できます。
Get-LocalGroup -Name tstGroup1 | Select-Object Name, SID
また、.NETクラスのSystem.Security.Principal.SecurityIdentifierとSystem.Security.Principal.NTAccountを使って、PowerShell経由でユーザーのSIDを取得することも可能です。
$objUser = New-Object System.Security.Principal.NTAccount("LOCAL_USER_NAME")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
Active Directoryでユーザー/グループのSIDを取得する方法
現在のドメインアカウントのSIDを取得するには、次のコマンドを使用します。
whoami /user
Active DirectoryドメインユーザーのSIDは、WMICツールでも確認できます。コマンドには自分のドメイン名を指定してください。
wmic useraccount where (name='jjsmith' and domain=′corp.woshub.com′) get sid
ADドメインユーザーのSIDを検索するには、Windows PowerShell用Active Directoryモジュールに含まれるGet-ADUserコマンドレットも利用できます。ここでは、ドメインユーザーアカウントjabramsのSIDを取得してみましょう。
Get-ADUser -Identity 'jabrams' | select SID
ADグループのSIDを取得する場合は、Get-ADGroupコマンドレットを使用します。
Get-ADGroup -Filter {Name -like "fr-sales-*"} | Select SID
お使いのコンピューターにPowerShell ADモジュールがインストールされていない場合でも、前述の.NETクラスを使ってADドメインからユーザーのSIDを取得できます。
$objUser = New-Object System.Security.Principal.NTAccount("corp.woshub.com","jabrams")
$strSID = $objUser.Translate([System.Security.Principal.SecurityIdentifier])
$strSID.Value
同じ処理を1行のPowerShellコマンドで実行することもできます。
(new-object security.principal.ntaccount "jabrams").translate([security.principal.securityidentifier])
コンピューターのドメインSIDとローカルマシンSIDの確認
WindowsコンピューターがActive Directoryドメインに参加している場合、そのコンピューターには2つの異なるSIDが存在します。1つ目はローカルコンピューターの識別子(Machine SID)、2つ目はAD上のコンピューターオブジェクトの一意な識別子です。
Active Directoryドメイン内のコンピューターのSIDは、次のコマンドで取得できます。
Get-ADComputer mun-rds1 -properties sid|select name,sid
ローカルコンピューターのSID(Machine SID)は、SysinternalsのPsGetSidツールを使用して取得できます。ただし、このツールは各コンピューターに手動でダウンロード・インストールする必要があります。
.\PsGetsid64.exe
または、任意のローカルユーザーのSIDから末尾4文字(RID部分)を削除するだけでもMachine SIDを求められます。
$user=(Get-LocalUser Administrator).sid
$user -replace ".{4}$"
重要なのは、ドメイン内の各コンピューターが一意のローカル(Machine)SIDを持つことです。コンピューターや仮想マシンのクローンを作成したり、テンプレートから展開したりする場合は、ドメイン参加前に必ずsysprepユーティリティを実行してください。このツールはローカルのMachine SIDをリセットし、よくある信頼関係エラーの発生を防いでくれます。
SIDからユーザー名・グループ名へ変換する方法
SIDからユーザーアカウント名を特定する(逆の手順)には、以下のいずれかのコマンドを使用します。
wmic useraccount where sid='S-1-3-12-12451234567-1234567890-1234567-1434' get name
RSAT-AD-PowerShellモジュールを使えば、SIDからドメインユーザー名を取得できます。
Get-ADUser -Identity S-1-3-12-12451234567-1234567890-1234567-1434
既知のSIDからドメイングループ名を検索するには、次のコマンドを使用します。
Get-ADGroup -Identity S-1-5-21-247647651-3965464288-2949987117-23145222
追加モジュールを使わずに、PowerShellの組み込みクラスだけでSIDからグループ名やユーザー名を調べることも可能です。
$objSID = New-Object System.Security.Principal.SecurityIdentifier("S-1-3-12-12451234567-1234567890-1234567-1434")
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$objUser.Value
PowerShellでSIDを使ってActive Directoryを検索する方法
あるSIDがどの種類のADオブジェクトに属しているのか分からず、どのPowerShellコマンドレット(Get-AdUser、Get-ADComputer、Get-ADGroupなど)を使えばよいか判断できない場合もあります。そんなときは、Get-ADObjectコマンドレットを使った汎用的な検索方法が便利です。これにより、SIDを指定してActive Directoryドメイン内のオブジェクトを統一的に検索できます。
$sid = 'S-1-5-21-2412346651-123456789-123456789-12345678'
Get-ADObject –IncludeDeletedObjects -Filter "objectSid -eq '$sid'" | Select-Object name, objectClass
IncludeDeletedObjectsパラメーターを指定すると、Active Directoryのごみ箱から削除済みオブジェクトも検索対象に含めることができます。
この例では、指定したSIDを持つADオブジェクトはドメインコンピューターでした(objectClass属性で確認できます)。このようにobjectClass属性を見ることで、SIDがユーザー、グループ、コンピューターのどれに該当するかを判別できます。
-
WhatsAppグループの作成・管理方法を徹底解説!初心者向け完全ガイド
WhatsAppは毎日7億人以上の人々がメッセージのやり取りやインターネット通話、ビデオ通話に利用している世界有数のコミュニケーションアプリです。あなたもその一人で、すでにいくつかのWhatsAppグループに参加しているかもしれません。この記事では、WhatsAppグループの作成方法から効率的な管理方法まで、役立つ情報をわかりやすく解説します。 WhatsAppグループを作成するために必要なもの WhatsAppグループを作成するには、まずAndroid端末、iPhone、Mac、WindowsのいずれかのデバイスにWhatsAppをインストールしておく必要があります。 また、以下の項目も事
-
Microsoft 365(Office 365)でユーザーメールボックスと共有メールボックスを相互に変換する方法
このチュートリアルでは、Microsoft 365(旧 Office 365)において、ユーザーメールボックス(通常のメールボックス)を共有メールボックスへ、または共有メールボックスをユーザーメールボックスへ変換する手順を解説します。 Microsoft 365 の便利な機能のひとつが「共有メールボックス」です。共有メールボックスは複数のユーザーでアクセスでき、ユーザーメールボックスとは異なりライセンスが不要という大きなメリットがあります。また、ニーズに応じて通常のメールボックスから共有メールボックスへ、あるいはその逆への変換も自由に行えます。 ユーザーメールボックスを共有メールボックスに変換