Práticas recomendadas ou experiência com políticas de nome de usuário e resolução de duplicatas em toda a empresa

6

Eu sou um programador com um aplicativo que precisa ser integrado ao novo esquema de login do Active Directory. Isso significa alterar todos os nomes de usuários em nosso sistema para usar o novo esquema. O novo esquema é "primeira inicial, sobrenome", então Joe Smith teria um nome de usuário de jsilva. Se John Smith for contratado, ele receberá jsmith2. Mas assim que Joe deixar a empresa, sua conta do AD será excluída e o jsmith estará disponível novamente. Então, se Jill Smith for contratada, ela receberá jsmith. Do ponto de vista de aplicativos, isso causa problemas, na minha opinião, porque agora eu poderia ter registros relacionados a Joe e registros relacionados a Jill que são indistinguíveis, porque ambos foram criados por "jsmith".

Por isso, fico pensando se existe um padrão ou uma prática recomendada que lide com essa questão de reutilizar nomes de usuários em um diretório de toda a organização, especialmente em empresas maiores. Quando levantei minhas preocupações em uma reunião, disseram-me que "não tem como [o grande nome da empresa] ter um registro de todos os usuários que deixaram a empresa", e isso me pareceu uma loucura. Então, existe uma solução geralmente aceita para lidar com nomes de usuários? Ou todas as empresas fazem as pazes?

    
por Peter 17.07.2009 / 18:16

8 respostas

7

O Windows lida com isso usando um GUID para identificar todas as contas. O nome de usuário é apenas decoração. Você verá que o jsmith antigo e o novo jsmith têm diferentes GUIDs, mesmo que os nomes de usuário sejam os mesmos.

Você pode associar um GUID a cada conta no seu aplicativo? Se eu pensar nisso, provavelmente posso dizer como chegar ao GUID para um usuário. Será um atributo do usuário no diretório ativo.

JR

    
por 17.07.2009 / 18:21
5

Sim, mantemos todos os usuários contratados. Eu geralmente recomendo uma primeira inicial, média inicial, sobrenome para minimizar o número de contas JQPublic1, mas isso acontece, no entanto, de uma perspectiva do AD, os usuários são apenas números. Você pode ver o número de qualquer conta com este script:

strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set objAccount = objWMIService.Get ("Win32_UserAccount.Name='myusername',Domain='mydomain'")
Wscript.Echo objAccount.SID

como um bônus gratuito, veja como transformar um sid em um nome de usuário :

strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-21-1454471165-1004336348-1606980848-5555'")
Wscript.Echo objAccount.AccountName
Wscript.Echo objAccount.ReferencedDomainName
    
por 17.07.2009 / 19:08
3

Como outros já mencionaram, usar o atributo GUID da conta do Active Directory do usuário é uma ótima ideia. Se você quiser legibilidade humana, no entanto, você deve dar uma olhada nos documentos para o Interface iADsNameTranslate . Você pode obter um monte de milhagem para lidar traduzindo os vários nomes possíveis de uma conta do AD (GUID, SID, samAccountName, displayName, DN, etc).

Exemplo:

Option Explicit

' Constants for the iADsNameTranslate object. (from http://msdn.microsoft.com/en-us/library/aa772267(VS.85).aspx)
Const ADS_NAME_TYPE_NT4 = 3
Const ADS_NAME_TYPE_GUID = 7

Const ADS_NAME_INITTYPE_GC = 3

Dim objNameTranslate 
Dim strUserGUID

' Create a nametranslate object and init to talk to a global catalog server
Set objNameTranslate = CreateObject("NameTranslate")
objNameTranslate.Init ADS_NAME_INITTYPE_GC, ""

' We're looking for an "NT 4" account name type-- aka a samAccountName
objNameTranslate.Set ADS_NAME_TYPE_NT4, "DOMAIN\username"

' Translate into the user's GUID
strUserGUID = objNameTranslate.Get(ADS_NAME_TYPE_GUID)

WScript.Echo strUserGUID

Isso não é apenas para contas de usuário. Cada objeto no AD tem um GUID, portanto, se você precisar "lembrar" um DN para, digamos, uma base de pesquisa LDAP (ou um grupo, ou qualquer coisa), use o GUID de modo que ele seja movido no AD sobre algum administrador saindo e reorganizando UOs, ou renomeando grupos) seu "ponteiro" para ele não quebrará (porque o GUID nunca muda).

    
por 17.07.2009 / 19:14
1

Existem vários atributos de nomenclatura no Active Directory:

  • sAMAccountName: esse é o nome de até 20 caracteres que deve ser exclusivo dentro do domínio, mas não dentro da floresta.
  • userPrinicipalName: geralmente é na forma de [email protected] e eu acredito que seja único dentro da floresta, mas como a primeira parte é única dentro do domínio, então @ domain.name isso deve acontecer.
  • displayName: O que você vê no ADUC MMC quando olha para os usuários.
  • DN: o DN do LDAP real do usuário na árvore do AD. É assim que você identificaria o usuário de uma perspectiva LDAP, geralmente.

O DN é ruim para ser desativado, já que ele mudará se o usuário for movido ou renomeado. O Sane é possível para userPrincipalName / sAMAccountName (se eles forem renomeados).

Como outro pôster sugeriu, o atributo verdadeiramente único dos usuários é provavelmente o GUID, e não é legal nem legível para humanos, infelizmente.

    
por 17.07.2009 / 18:35
1

O GUID é definitivamente o caminho a percorrer. Se você realmente precisa apresentar o nome da pessoa em um formato amigável, basta fazer uma pesquisa de AD no código.

    
por 18.07.2009 / 01:16
0

Outros já publicaram trechos de script e você encontrará muitos trechos de código para uma variedade de idiomas nos sites de codificação habituais. Tente pesquisar por coisas como "user to guid", "user to id", etc.

    
por 18.07.2009 / 02:24
0

IMO, boa prática é nunca excluir contas, basta desativá-las. Dessa forma, eles não podem ser reutilizados.

    
por 18.07.2009 / 03:44
0

Peter, minha própria experiência com isso é - não espere que o nome de usuário seja único, a menos que você tenha uma maneira de garantir a exclusividade do nome de usuário. Como você diz, isso nunca dá certo.

O aplicativo, seja ele qual for, precisa usar outros dados relevantes para determinar o que torna o usuário único no contexto do que o aplicativo está fazendo. Se você estiver usando um aplicativo para gerar panfletos de e-mail, por exemplo, provavelmente não desejará enviar mais de um panfleto por endereço postal exclusivo.

    
por 18.07.2009 / 23:06