Active Directory: Desconecte para obter dados melhores

Usando um conjunto de registros desconectado e seus utilitários associados, é possível manter um desempenho de consultas.

James Turner

Um conjunto de registros desconectado (DRS) é um registro do ADO que reside na memória. Uma DRS é completamente desconectado de sua fonte de dados original e você pode criar um "on demand" com relativa facilidade. Coletar dados de fontes como o Active Directory e reunir informações úteis através da emissão de consultas SQL, como simples.

Os utilitários aqui referenciados não são complexos, e não eles bancos de dados relacionais. Eles são bancos de dados consistindo de conjuntos comuns de dados que você geralmente tem que avaliar em uma base diária ou semanal. O número de campos dentro dos bancos de dados é mantido a um mínimo. A contagem total de registro é geralmente menos de 10.000, e uso de memória e tamanho de arquivo são mínimas. Você encontrará conjuntos de registros deste tamanho e ainda menor executam bem quando consultado.

DRS utilitários vão lhe poupar tempo e fornecer acesso a dados de alto desempenho, pegadas do pequeno espaço em disco e utilização de pouca memória. Geralmente requerem uma quantidade limitada de trabalho. Você pode usar um DRS de muitas maneiras. Quando consultas interativas são melhores, eu tenho construído uma HTA GUI que permite encontrar conjuntos de dados para combinar consultas específicas.

Quando uma interface gráfica não é necessária, criar os DRS e avaliar os dados em qualquer forma é necessária para executar a tarefa em mãos. Que possam implicar esfrega arquivos de log que contêm userids e nomes de computador e substituir esses valores valores substituídos.

Ao longo dos anos, o DRS provou para ser um excelente recurso para utilitários de rápido e eficientes sem nenhum custo, tais como:

  • Lavadores de log de segurança
  • Identificador de segurança (SID) / bancos de dados usuário-retenção
  • Consultas de referência cruzada de SID/usuário
  • Pesquisas de fila de impressão
  • Comparações de conta admin semanal

Para construir uma DRS, comece criando um objeto de Recordset do ADO (ADOR). Aqui estão dois exemplos usando VBScript:

Set DRS = CreateObject("ADOR.Recordset")

E:

Set DRS = CreateObject("ADODB.Recordset")

ADOR é um cliente leve do ADO que expõe a interface de conjunto de registros. Se você pode criar instâncias de ADO, em seguida, você pode criar instâncias ADOR. ADOR é um subconjunto do ADOdb, que é um subconjunto do ADO. Tendem a usar ADODB.Conjunto de registros, mas há um uso alternativo.

Construir um banco de dados do DRS é simples. Começar pela criação de campos que se relacionam com seu esforço e, em seguida, preencher os campos utilizando dados de uma fonte como o Active Directory.

Aqui está um exemplo de como você pode configurar um banco de dados de utilidade de purificador segurança log:

Const adFldIsNullable = 32 Set DRS = CreateObject("ADODB.Recordset") DRS.Fields.Append "SecurityObject",201,256,adFldIsNullable DRS.Fields.Append "Type",201,256,adFldIsNullable DRS.Fields.Append "Substitute",201,256,adFldIsNullable DRS.Open

Observe que a primeira linha declara uma constante. A constante de adFldIsNullable indica que o campo pode aceitar valores nulos. No script purificador, campos sempre irão conter dados. Incluindo a constante não é realmente necessário e você pode pular essa etapa, mas incluindo ele não afetará o script. No entanto, se você criar um banco de dados com campos que podem não conter dados, você precisará declarar e usar esta constante. Aqui estão alguns do script outras características:

  • A segunda linha cria o DRS Object.
  • A terceira quinta linhas definem os campos do banco de dados.
  • A sexta linha do código de exemplo declara o banco de dados aberto para negócios e pronto para aceitar dados.

Vamos examinar a sintaxe da instrução Fields.Append:

  • O nome do campo está sendo criado é SecurityObject.
  • O 201 indica um tipo de dados de campo de cadeia longa.
  • A 256 especifica que definedsize o campo é um tamanho de comprimento variável. (Por definição, qualquer largura de campo maior que 255 para este tipo de campo vai ser tratada como comprimento variável, o que significa que o campo pode armazenar mais ou menos de 256 caracteres.)
  • O campo de que atributo de adFldIsNullable significa que aceita valores nulos.

Para obter informações sobre tipos de dados de campo, confira o DataTypeEnum Web page. Para obter informações sobre as larguras de campo, confira o Método Append (ADO) página de Web.

Para adicionar dados ao banco de dados, basta segui uma seqüência de eventos semelhantes a este exemplo:

DRS.AddNew DRS("SecurityObject") = "172.172. \d\d? \d? \. \d\d? \d?" DRS("SecurityType") = "IP" DRS("Substitute") = "a1.b1.c1.d1" DRS.Update

Você não tem que emitir o DRS.Método Update após cada registro que você preencher. Você pode esperar para emitir este comando, até que você tenha preenchido seu completo conjunto de registros. O método de atualização simplesmente confirma os registros no banco de dados e faz registros acessíveis.

No trecho anterior, eu adicionei um registro no banco de dados. O processo purificador vai usar este registro específico para procurar alguma coisa no arquivo de log baseado em texto que contém um endereço IP começando com 172.172 e substituí-lo por a1.b1.c1.d1.

Para preencher o banco de dados com uma coleção de nomes de computador e o servidor do Active Directory, crie uma consulta LDAP e preencher o banco de dados, como mostrado na Figura 1.

Figura 1 criar uma consulta LDAP e preencher o banco de dados.

Const ADS_SCOPE_SUBTREE = 2 DNC = GetObject("LDAP://RootDSE").Get("defaultNamingContext") Set objConnection = CreateObject("ADODB.Connection") Set objCommand = CreateObject("ADODB.Command") objConnection.Provider = "ADsDSOObject" objConnection.Open "Active Directory Provider" Set objCommand.ActiveConnection = objConnection objCommand.Properties("Page Size") = 1000 objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE objCommand.CommandText = _ "SELECT cn FROM 'LDAP://" & DNC & "' WHERE objectcategory = 'computer'" Set objRecordSet = objCommand.Execute objRecordSet.MoveFirst SubstCount = 1 Do Until objRecordset.EOF DRS.AddNew DRS("SecurityObject") = objrecordset.Fields("CN").Value DRS("SecurityType") = "Host" DRS("Substitute") = "Host" & SubstCount SubstCount = SubstCount + 1 objRecordset.MoveNext Loop

Cada um dos registros criados nesta seqüência conteria um nome de computador, com um valor de tipo de "Host" e um valor de substituto de "Hostnnn" (onde nnn representa um número seqüencial, ou seja, Host123). Você pode examinar o código para ver como um processo similar é codificado para preencher o banco de dados com userids.

Depois que você terminar de preencher o banco de dados e de emissão de um.Atualização, você pode agora ordenar, ler e filtrar registros. Para avançar o banco de dados, primeiro coloque o ponteiro do registro para o primeiro registro, em seguida, configurar um processo de loop para percorrer o banco de dados da seguinte forma:

DRS.MoveFirst Do while Not DRS.EOF myRegExp.Pattern = "\b" & Lcase(Trim(DRS.Fields.Item("SecurityObject"))) & "\b" If myRegExp.Test(strNewText) Then chng2 = Lcase(Trim(DRS.Fields.Item("Substitute"))) strNewText = myRegExp.Replace(strNewText,chng2) End If DRS.MoveNext Loop

O processo de loop continuará até que ele atinja um marcador de fim de arquivo. Também é importante observar o método de "MoveNext", que avança o ponteiro do registro. Sem ele, você encontraria o seu programa em um loop infinito.

Como você avançar o banco de dados, você será capaz de acessar o valor do campo de dados dentro de cada registro usando a propriedade Fields.Items, como visto na terceiros e quinta linhas de trecho de código anterior:

  • DRS.Fields.Item("SecurityObject") irá conter um valor de Active Directory de um ID de usuário ou nome do computador.
  • DRS.Fields.Item("Substitute") irá conter o valor que irá substituir esse ID de usuário ou nome do computador, se ele for encontrado.

O que você não vê no trecho anterior é que ele abriu um arquivo precisando esfregar e lê-lo em uma variável. Em seguida, é criado um objeto de expressão Regular com a finalidade de localizar seqüências de caracteres dentro do texto e substituindo-os por valores específicos.

Os itens que está sendo pesquisados todos residem no banco de dados no campo chamado SecurityObject. O valor de substituição reside no campo chamado substituto. Neste exemplo, o banco de dados contém todos os nomes de computador e userids que existem dentro de um determinado domínio. Enquanto ainda estiver dentro do processo loop, se a DRS localiza um valor de SecurityObject dentro do arquivo de texto, substitui-lo com o valor de substituição associado.

Uma vez que o DRS atinge o marcador de fim de arquivo, ele o arquivo de clientes grava o arquivo de texto limpo no sistema de arquivo e passa para suporte de fornecedor aprovado uma vez. Você pode usar este código como está ou adaptar como quiser. Você pode achar que você precisa para ajustar o código para que ele ignora comum nomes ou palavras que podem residir em seu Active Directory.

Isto apenas arranhões na superfície do que você pode fazer com uma DRS, mas espero que esta prova para ser benéfico. Há muito mais para discutir sobre o assunto de DRS, como a criação de uma interface gráfica que mostra mais características do DRS, incluindo classificação, filtragem e exibir os registros com base em consultas SQL.

James Turner

James Turner foi um analista de sistemas de informação e administrador de sistemas Windows desde os mid-1980s. Ele também é um entusiasta de longa data script e gosta de fazer as coisas acontecerem com código.

Conteúdo relacionado