Во-первых, я даже не знаю, "Логин пользователя" это правильный термин здесь.
Контекст заключается в том, что я использую VisualSVN Server для управления / администрирования прав доступа в моих репозиториях SVN с аутентификацией Windows, а authz-windows
файл, который он создает, содержит строки длиной 45 символов вместо "удобочитаемых" имен пользователей или групп.
Мне нужно отредактировать этот файл вручную, так как мне узнать, какая волшебная строка связана с конкретным пользователем или группой?
В authz-windows
файл сопоставляет идентификаторы безопасности пользователя и группы Active Directory (objectSid
Поле LDAP).
Но обратите внимание, что значения этого поля в AD хранятся как шестнадцатеричные, поэтому вы можете использовать некоторые предыдущие ответы для определения связанных идентификаторов пользователей.
(Пример PowerShell в StackOverflow.)
Обновление 2016:
Выполните обновление до последней версии VisualSVN Server. Начиная с VisualSVN Server 3.4, сервер поставляется с рядом командлетов PowerShell. Некоторым из них нравится Get-SvnAccessRule
может выводить список правил доступа, назначенных для учетных записей пользователей и групп Active Directory / Windows.
Вот пример создания отчета о правилах доступа в CSV-файле AccessReport.csv:
Get-SvnAccessRule | Select Repository, Path, AccountName, Access | Export-Csv -NoTypeInformation AccessReport.csv
Полную информацию о командлетах PowerShell для VisualSVN Server см. В статье KB88: Справочник по командлетам PowerShell для VisualSVN Server.
Устаревший ответ:
Я согласен с ответом Похмелье и надеюсь, вы найдете следующий VBScript полезным. Он создает список определенных разрешений и правильно конвертирует SID осмысленным и читаемым ДОМЕН \ Имя пользователя.
'
' Print permissions in the form: user_name,path,level
'
strComputer = "."
Set wmi = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\VisualSVN")
Set win = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _
& strComputer & "\root\cimv2")
' Return text representation for the Access Level
Function AccessLevelToText(level)
If level = 0 Then
AccessLevelToText = "No Access"
ElseIf level = 1 Then
AccessLevelToText = "Read Only"
ElseIf level = 2 Then
AccessLevelToText = "Read/Write"
Else
AccessLevelToText = "Unknown"
End If
End Function
' Return repository path for the object
Function GetPath(obj)
cname = assoc.Path_.Class
If cname = "VisualSVN_Service" Then
GetPath = "Repositories Root"
ElseIf cname = "VisualSVN_Repository" Then
GetPath = assoc.Name
ElseIf cname = "VisualSVN_RepositoryEntry" Then
GetPath = assoc.RepositoryName & ": " & assoc.Path
Else
GetPath = "Unknown"
End If
End Function
' Convert SID to user name
Function SidToUserName(sid)
Set account = win.Get("Win32_SID.SID='" & sid & "'")
user = account.AccountName
domain = account.ReferencedDomainName
SidToUserName = domain & "\" & user
End Function
' Return user name associated with account
Function GetAccountName(account)
If account.Path_.Class = "VisualSVN_WindowsAccount" Then
GetAccountName = SidToUserName(account.SID)
Else
GetAccountName = account.Name
End If
End Function
' Iterate over all security descriptions
Set objs = wmi.ExecQuery("SELECT * FROM VisualSVN_SecurityDescriptor")
For Each obj In objs
Set assoc = wmi.Get(obj.AssociatedObject)
For Each perm in obj.Permissions
name = GetAccountName(perm.Account)
level = AccessLevelToText(perm.AccessLevel)
Wscript.Echo name & "," & GetPath(assoc) & "," & level
Next
Next