Como obtenho o ID do usuário do Active Directory?

2

Em primeiro lugar, nem sei se o "ID do usuário" é o termo correto aqui.

O contexto é que estou usando o VisualSVN Server para gerenciar / administrar direitos de acesso em meus repositórios SVN com a Autenticação do Windows, e o arquivo authz-windows que ele contém contém 45 caracteres em vez de usuários ou grupos "humanos legíveis" nomes.

Eu preciso editar esse arquivo manualmente, então como descobrir qual é a string mágica associada a um usuário ou grupo específico?

    
por detly 09.07.2012 / 07:31

2 respostas

4

O arquivo authz-windows mapeia os SIDs de usuários e grupos do Active Directory (% campo objectSid LDAP).

Mas observe que os valores desse campo no AD são armazenados como hexadecimais, para que você possa usar algumas respostas anteriores para determinar IDs de usuários associados.

( Exemplo do PowerShell no StackOverflow.)

    
por 10.07.2012 / 07:21
3

Atualização de 2016:

Atualize para a versão mais recente do VisualSVN Server. Começando com o VisualSVN Server 3.4, o servidor vem com vários cmdlets do PowerShell. Alguns deles, como Get-SvnAccessRule , podem exibir a lista de regras de acesso atribuídas ao Active Directory / Contas de usuários e grupos do Windows.

Aqui está um exemplo para gerar o relatório de regras de acesso em um arquivo CSV AccessReport.csv:

Get-SvnAccessRule | Select Repository, Path, AccountName, Access | Export-Csv -NoTypeInformation AccessReport.csv

Para obter informações completas sobre os cmdlets do VisualSVN Server PowerShell, leia o artigo KB88: Referência de Cmdlet do PowerShell do VisualSVN Server .

Resposta desatualizada:

Concordo com a resposta de ressaca e espero que você ache útil o seguinte VBScript. Ele cria uma lista das permissões definidas e converte corretamente os SIDs em DOMAIN \ Username significativos e legíveis.

'
' 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
    
por 12.07.2012 / 16:46