Pentaho 5 autenticando no LDAP (OpenLDAP e AD)

Postado em

A uns anos atrás(2011), escrevi um tutorial autenticando o Pentaho (na época versão 3.7) no LDAP. Acredito que esse tutorial ajudou muitas pessoas, pois até a versão 4 as configurações ainda eram as mesmas.

Na versão 5, algumas configurações mudaram. Então depois de muito procrastinar, eu tomei vergonha na cara e resolvi escrever esse tutorial atualizado na versão 5 do Pentaho. Para ser mais exato, na versão 5.2.

Vou tentar ser o mais didático possível no passo a passo dessa configuração. Vou falar um pouco sobre as configurações do meu servidor LDAP de teste e mostrar algumas diferenças que possam ter em relação ao Active Directory (AD).

Objetivos:

  • Entender a estrutura do LDAP.
  • Configurar o Pentaho BI-Server para autenticar no LDAP.
  • Testar a autenticação como usuário administrador.
  • Testar a autenticação como usuário comum.
  • Fazer alguns testes de acessos a pastas e arquivos através dos grupos do LDAP.

Entender a estrutura do LDAP

Esse servidor LDAP foi configurado exclusivamente para esse tutorial, por isso ele possuí poucos registros e está o mais simples possível para ser entendido.

Estrutura do LDAP:

  • Raiz: dc=domingos,dc=com,dc=br
  • Usuário administrador: admin (cn=admin,dc=domingos, dc=com,dc=br)
  • Unidade Organizacional (OU) dos grupos: GROUPS (ou=GROUPS,dc=domingos,dc=com,dc=br)
  • Unidade Organizacional (OU) dos usuários: USERS (ou=USERS,dc=domingos,dc=com,dc=br)
  • Grupos criados: pentaho-admin, comercial e administrativo:
    • cn=pentaho-admin,ou=GROUPS,dc=domingos,dc=com,dc=br
    • cn=comercial,ou=GROUPS,dc=domingos,dc=com,dc=br
    • cn=administrativo,ou=GROUPS,dc=domingos,dc=com,dc=br
  • Usuários criados: vader, fulano e ciclano:
    • cn=vader,ou=USERS,dc=domingos,dc=com,dc=br
    • cn=fulano,ou=USERS,dc=domingos,dc=com,dc=br
    • cn=ciclano,ou=USERS,dc=domingos,dc=com,dc=br

O usuário vader é o meu usuário administrador, então ele está associado ao grupo pentaho-admin:

dn: cn=pentaho-admin,ou=GROUPS,dc=domingos,dc=com,dc=br
objectClass: posixGroup
gidNumber: 10002
memberUid: vader
structuralObjectClass: posixGroup
cn: pentaho-admin

O usuário fulano está associado ao grupo Comercial e o usuário ciclano ao Administrativo. Com isso quero ilustrar como ficaria se o seu BI-Server tivesse pastas separadas por departamentos, onde cada um só pode ter acesso a sua pasta. Fazendo dessa forma, todos que estiverem no LDAP vão ter acesso ao Pentaho BI-Server, mas só poderão visualizar aquilo que for permitido ao seu grupo ou diretamente ao seu usuário.

Uma outra forma de fazer, é criar um grupo específico para os usuários comuns do Pentaho, então somente que estiver naquele grupo terá acesso ao Pentaho. Só que dessa forma fica mais complicado de fazer as restrições segmentanda por grupo, teria que ser somente por usuário. Um exemplo seria se eu criasse um grupo chamado pentaho-users e os usuários fulano e ciclano estivessem associados a ele. Ficaria da seguinte forma no LDAP:

dn: cn=pentaho-users,ou=GROUPS,dc=domingos,dc=com,dc=br
objectClass: posixGroup
gidNumber: 10001
memberUid: fulano
memberUid: ciclano
structuralObjectClass: posixGroup
cn: pentaho-users

Nos arquivos de configuração do Pentaho, também vou dar exemplos caso decidam fazer dessa forma com um único grupo.

Configurar o Pentaho BI-Server para autenticar no LDAP

Aqui é o passo a passo da configuração do BI-Server no LDAP.

Os arquivos que vão ser configurados, estão em biserver-ce/pentaho-solutions/system. Os arquivos são:

  • properties
  • applicationContext-security-ldap.properties
  • applicationContext-spring-security.xml
  • spring.properties
  • data-access/settings.xml

1. properties

Nesse arquivo vamos mudar o modo de autenticação.

De:
provider=jackrabbit

Para:
provider=ldap

2. applicationContext-security-ldap.properties

Devemos configurar esse arquivo conforme o nosso servidor LDAP. Segue o exemplo baseado no meu LDAP onde vou dar alguns detalhes:

contextSource.providerUrl=ldap\://localhost\:389
contextSource.userDn=cn\=admin,dc\=domingos,dc\=com,dc\=br
contextSource.password=123456
userSearch.searchBase=ou\=USERS,dc\=domingos,dc\=com,dc\=br
userSearch.searchFilter=(cn\={0})

populator.convertToUpperCase=false
populator.groupRoleAttribute=cn
populator.groupSearchBase=ou\=GROUPS,dc\=domingos,dc\=com,dc\=br
populator.groupSearchFilter=(memberUid\={1})
populator.rolePrefix=
populator.searchSubtree=true

allAuthoritiesSearch.roleAttribute=cn
allAuthoritiesSearch.searchBase=ou\=GROUPS,dc\=domingos,dc\=com,dc\=br
allAuthoritiesSearch.searchFilter=(objectClass\=posixGroup)

allUsernamesSearch.usernameAttribute=cn
allUsernamesSearch.searchBase=ou\=USERS
allUsernamesSearch.searchFilter=(objectClass\=posixAccount)

adminRole=cn\=pentaho-admin,ou\=GROUPS,dc\=domingos,dc\=com,dc\=br
adminUser=cn\=vader,ou\=USERS,dc\=domingos,dc\=com,dc\=br

Observações importantes: 

– contextSource.providerUrl=ldap\://localhost\:389: Endereço de onde está o servidor LDAP. No meu caso ele está em localhost e rodando na porta 389. Normalmente o servidor LDAP está em outra máquina, então coloque o IP da máquina e a porta que ele está rodando.

– userSearch.searchFilter=(cn\={0}): Esse é o atributo do LDAP que ele procurará para achar o nome do usuário. No caso do meu LDAP, o atributo é o CN, e o número zero indica para ele procurar o DN completo do usuário.
Para quem utilizado o Active Directory, normalmente o atributo utilizado é o (sAMAccountName\={0})

– populator.groupSearchFilter=(memberUid\={1}): O campo dentro dos grupos que identificam os usuários pertencentes ao grupo é o atributo memberUid. Colocando 1 ele procura somente pelo nome do usuário, se deixasse em 0 ele procuraria pelo DN completo. Na seção acima foi destacado que no meu LDAP os usuários estão no atributo memberUid, mas possa ser que seu LDAP/AD, use outro, é muito comum no AD ele usar o atributo member.

adminRole=cn\=pentaho-admin,ou\=GROUPS,dc\=domingos,dc\=com,dc\=br e adminUser=cn\=vader,ou\=USERS,dc\=domingos,dc\=com,dc\=br: Essas são as seções onde são configurados o grupo e o usuário admin do Pentaho. Fiquem atentos para configurar o grupo e usuário correto.

3. applicationContext-spring-security.xml

 Esse arquivo é o que define o que os grupos podem acessar. E nele temos um ponto muito específico. Digo isso, pois se seguirem o exemplo de usar os grupos já existente no LDAP, para fazer uma separação por setores, não é necessário mudar nada nesse arquivo.

Exemplo do arquivo:

….
\A/content/common-ui/resources/web/(.+/)*.+\.js.*\Z=Anonymous,Authenticated
\A/.*require-cfg.js.*\Z=Anonymous,Authenticated
\A/.*require-js-cfg.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/require.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/require-cfg.js.*\Z=Anonymous,Authenticated
\A/content/data-access/resources/gwt/.*css\Z=Anonymous,Authenticated
\A/webcontext.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/cache/cache-service.js.*\Z=Anonymous,Authenticated
\A/cacheexpirationservice.*\Z=Anonymous,Authenticated
\A/js/theme.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/themes/.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/dojo/djconfig.js.*\Z=Anonymous,Authenticated
\A/content/common-ui/resources/web/angular-directives/angular-directives.css\Z=Anonymous,Authenticated
\A/content/pentaho-mobile/resources/.*\Z=Anonymous,Authenticated
\A/docs/.*\Z=Anonymous,Authenticated
\A/mantlelogin/.*\Z=Anonymous,Authenticated
\A/mantle/mantleloginservice/*\Z=Anonymous,Authenticated
\A/mantle/.*\Z=Authenticated
\A/welcome/.*\Z=Anonymous,Authenticated
\A/public/.*\Z=Anonymous,Authenticated
\A/login.*\Z=Anonymous,Authenticated
\A/ping/alive.gif.*\Z=Anonymous,Authenticated
\A/j_spring_security_check.*\Z=Anonymous,Authenticated
\A/getimage.*\Z=Anonymous,Authenticated
\A/getresource.*\Z=Anonymous,Authenticated
\A/admin.*\Z=Admin
\A/auditreport.*\Z=Admin
\A/auditreportlist.*\Z=Admin
\A/versioncontrol.*\Z=Admin
\A/propertieseditor.*\Z=Admin
\A/propertiespanel.*\Z=Admin
\A/subscriptionadmin.*\Z=Admin
\A/resetrepository.*\Z=Admin

O grupo Authenticated do Pentaho BI-Server, é o grupo padrão que todos os usuários pertencem para poder autenticar. Como vamos usar os nosso grupos do LDAP para fazer uma separação departamental, não precisamos modificar esse arquivo. Mas caso vocês optem por usar o grupo único, o pentaho-users que eu dei de exemplo, devem substituir todos os Authenticated por pentaho-users. Sendo assim, somente os usuários desse grupo teriam acesso ao Pentaho. Exemplo:

….
\A/content/common-ui/resources/web/(.+/)*.+\.js.*\Z=Anonymous,pentaho-users
\A/.*require-cfg.js.*\Z=Anonymous,pentaho-users
\A/.*require-js-cfg.js.*\Z=Anonymous,pentaho-users
\A/content/common-ui/resources/web/require.js.*\Z=Anonymous,pentaho-users
\A/content/common-ui/resources/web/require-cfg.js.*\Z=Anonymous,pentaho-users
\A/content/data-access/resources/gwt/.*css\Z=Anonymous,pentaho-users
\A/webcontext.js.*\Z=Anonymous,pentaho-users

Outro ponto importante nesse arquivo, é o grupo Admin. ELE NÃO DEVE SER ALTERADO.
Nas versões 3 e 4 do Pentaho BI-Server, era necessário trocar esse grupo Admin para o grupo de administrador criado no LDAP, no meu caso seria o pentaho-admin. Só que nessa versão essa palavra Admin é reservada e ela se refere a configuração que foi feita em applicationContext-security-ldap.properties no item adminRole=cn\=pentaho-admin,ou\=GROUPS,dc\=domingos,dc\=com,dc\=br

Resumindo, se for usar os grupos que já existem no LDAP, não altere esse arquivo. Caso for usar um grupo único de usuários comuns criado no LDAP, só altere o Authenticated para esse grupo. Não mexa nas linhas onde tem o grupo Admin.

4. spring.properties

Nesse arquivo, devemos informar quem é o nosso usuário admin do Pentaho.

singleTenantAdminDefaultUserName=vader
singleTenantAdminUserName=vader
singleTenantAdminDefaultAuthorityName=Administrator
singleTenantAdminAuthorityName=Administrator
repositoryAdminUsername=pentahoRepoAdmin
singleTenantAuthenticatedAuthorityName=Authenticated
singleTenantAnonymousAuthorityName=Anonymous
superAdminAuthorityName=SysAdmin
superAdminUserName=super
systemTenantAdminUserName=system
systemTenantAdminPassword=cGFzc3dvcmQ=

Caso tenham optado por usar o grupo único (pentaho-users), é necessário trocar o parâmetro singleTenantAuthenticatedAuthorityName de Authenticated para pentaho-users.

5. data-access/settings.xml

Nesse arquivo, altere um parâmetro para o usuário administrador do Penthao:

<data-access-view-users>vader</data-access-view-users>

E caso use o grupo único, troque tudo o que tiver Authenticated para pentaho-users.

Após essas configurações, podemos reiniciar o BI-Server.

Importante 1: Para validar esse processo e pegar o problema quando a autenticação LDAP não funciona, eu sempre ativo o DEBUG dos logs no log4j do Pentaho. O arquivo do log4j fica em biserver-ce/tomcat/webapps/pentaho/WEB-INF/classes, e é o arquivo log4j.xml.

Nesse arquivo, eu coloco em DEBUG os seguintes parâmetros:

<category name=”org.springframework”>
<priority value=”DEBUG“/>
</category>

<category name=”org.springframework.security”>
<priority value=”DEBUG“/>
</category>

Com isso, quando reiniciar o Pentaho BI-Server e tentar fazer a autenticação, poderá ser visto o passo a passo da autenticação para possível resolução de problemas. Lembrem de desativar esse DEBUG depois que estiver funcionando, pois ficará gerando log desnecessário.

Importante 2: Se a sua estrutura LDAP tiver mais que 1.000 usuários, pode ser que seja necessário alterar o parâmetro MaxPageSize do seu servidor LDAP (AD ou outro), para que todos os usuários consigam logar no Pentaho e apareçam na lista de permissões.

Testar a autenticação como usuário administrador

 Após reiniciar o BI-Server, podemos fazer o teste de autenticação com o usuário administrador, que no meu caso é o vader.

1. Tela de login:

ScreenHunter_01 Jan. 09 16.09

2. Logado como o usuário vader:

ScreenHunter_02 Jan. 09 16.11

Reparem que o usuário vader como administrador, tem acesso a todos os menus.

Testar a autenticação como usuário comum

1. Logado como usuário fulano

ScreenHunter_03 Jan. 09 16.14

Reparem que o usuário fulano tem acesso restrito nos menus.

Testes de acessos a pastas e arquivos através dos grupos do LDAP

Com usuário vader, podemos criar uma pasta Comercial e associar que somente o grupo comercial tenha acesso a ela. Dessa forma, o usuário ciclano que é do Administrativo, não teria acesso a ela.

1. Criar a pasta e dar o acesso.

ScreenHunter_04 Jan. 09 16.20

2. Dessa forma, o usuário fulano logado terá a seguinte visualização:

ScreenHunter_05 Jan. 09 16.21

3. E o usuário ciclano que é do grupo Administrativo, terá a seguinte visualização:

ScreenHunter_06 Jan. 09 16.25

Com isso finalizamos esse tutorial que mostra a configuração do Pentaho BI-Server para autenticar em um LDAP.

Espero que seja de grande ajuda para quem precisa.

Abraços.

Pentaho – Erro ao abrir dimensão no Jpivot – net.sf.saxon.trans.DynamicError: Illegal HTML character: decimal 150

Postado em

Olá Pessoal.

Agora pouco acabei de passar por um problema. Quando eu ia abrir uma dimensão no Jpivot para filtras os valores, ele me dava um erro pedia para consultar no log do Pentaho. Olhando os logs, vi o seguinte erro:

net.sf.saxon.trans.DynamicError: Illegal HTML character: decimal 150

Procurando na net, acabei descobrindo que o erro não era por alguma falha do Pentaho, do Mondrian ou do Jpivot diretamente. Esse erro é um erro de base, existia algum caractere maluco no meio dos meus dados que estava dando problemas com renderização do Mondrian na hora de ele me mostrar os dados nos filtros do Jpivot.

Bom, procurei para saber quem era esse decimal 150, e achei a referência nesse site:

http://www.ssec.wisc.edu/~tomw/java/unicode.html#x0080

Descobri na minha base qual era a informação zicada e arrumei na própria transformação de criação da dimensão.

Agora já sei que esse tipo de erro, está relacionado com sujeiras que possam existir na base e causar erro de codificação. Parece um erro bobo, mas gastei um tempinho para achar onde estava o erro.

Espero que esse post ajude a dar uma direção para quem tiver esse tipo de problema.

Abraços

Erro ao exportar os gráficos no Jpivot para Excel

Postado em Atualizado em

Quando se usa um Cubo OLAP no Pentaho através do Jpivot, ele permite que exporte aquele cubo para Excel.

Acontece que eu percebi a um bom tempo que sempre que exportava o cubo com um gráfico o gráfico não era exportado para a planilha. Como não estava usando muito o recurso de exportar com o gráfico não me apeguei nisso.

Mas agora surgiu a necessidade de usar esse recurso. Fui pesquisar o motivo de não estar funcionando e o que deveria ser feito para arrumar.

Encontrei no site de JIRA do Pentaho o problema e como resolve-lo. O motivo de não exportar o gráfico está relacionado a permissões de usuários, e a resolução é bem simples.

Para resolver esse problema, é necessário editar o arquivo applicationContext-spring-security.xml que fica dentro do diretório biserver-ce/pentaho-solutions/system.

Nesse arquivo existe uma seção que define acessos a alguns recursos do BI Server vinculando quais grupos podem acessá-los. Um pedaço original do arquivo é da seguinte maneira:

...
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
\A/docs/.*\Z=Anonymous,Authenticated
\A/mantlelogin/.*\Z=Anonymous,Authenticated
\A/mantle/mantleloginservice/*\Z=Anonymous,Authenticated
\A/mantle/.*\Z=Authenticated
\A/welcome/.*\Z=Anonymous,Authenticated
\A/public/.*\Z=Anonymous,Authenticated
\A/login.*\Z=Anonymous,Authenticated
\A/ping/alive.gif.*\Z=Anonymous,Authenticated
\A/j_spring_security_check.*\Z=Anonymous,Authenticated
\A/getimage.*\Z=Anonymous,Authenticated
\A/getresource.*\Z=Anonymous,Authenticated
\A/admin.*\Z=Admin
\A/auditreport.*\Z=Admin
...

Agora devemos inserir o seguinte acesso a esse arquivo:

\A/getchart.*\Z=Anonymous,Authenticated

O arquivo ficará da seguinte maneira:

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
\A/docs/.*\Z=Anonymous,Authenticated
\A/mantlelogin/.*\Z=Anonymous,Authenticated
\A/mantle/mantleloginservice/*\Z=Anonymous,Authenticated
\A/mantle/.*\Z=Authenticated
\A/welcome/.*\Z=Anonymous,Authenticated
\A/public/.*\Z=Anonymous,Authenticated
\A/login.*\Z=Anonymous,Authenticated
\A/ping/alive.gif.*\Z=Anonymous,Authenticated
\A/j_spring_security_check.*\Z=Anonymous,Authenticated
\A/getimage.*\Z=Anonymous,Authenticated
\A/getresource.*\Z=Anonymous,Authenticated
\A/getchart.*\Z=Anonymous,Authenticated
\A/admin.*\Z=Admin
\A/auditreport.*\Z=Admin

Depois disso, basta reiniciar o BI Server e o recurso estará funcionando.

Pelo que pude ver, até a versão 3.8 que é a última versão estável, ainda tem esse problema.

Espero que ajude.

Abraços

Link de referência: http://jira.pentaho.com/browse/BISERVER-1681

Pentaho BI-Server autenticando no LDAP

Postado em Atualizado em

Demorei um pouco para postar isso, mas agora vou documentar o processo que fiz para autenticar o Pentaho BI-Server no LDAP e recuperar os papéis do LDAP para podermos setar as permissões. Podemos dizer que autenticar é a parte mais fácil, recuperar os papéis é que exige um pouco mais de atenção.

Peço que tenham muita ATENÇÃO nos detalhes, pois eles que fizeram eu quebrar um pouco a cabeça para deixar tudo redondo.

Infelizmente não achei um site definitivo na internet que mostrava todos os passos, tive que fazer um catado na internet para conseguir chegar ao objetivo.

Desde já agradeço ao Caio (Professor Corujá), pela indicação de um site em Francês que ajudou bastante, e aos meus amigos de trabalho Diego, Guto Maia, Thiago Lechuga e Gabriela Ozeias da 4Linux que me deram uma força no JAVA e LDAP.

Usei a versão 3.7 do bi-server e usei um OpenLDAP no Linux.

Vamos lá.

1 – O primeiro passo é entender como está a sua árvore do LDAP para poder recuperar os usuários e os grupos.

Vamos imaginar que a estrutura do nosso LDAP esteja da seguinte maneira:

  • dc=empresa,dc=com,dc=br: Essa é a nossa raiz do LDAP.
  • cn=USERS: Essa é a cn onde estão os nossos usuários
  • ou=GROUPS: Essa é a ou onde estão os grupos que vão servir de papéis para o nosso Pentaho BI Server.

Um exemplo de um LDIF de nossa base é o seguinte:

# Minha empresa.com.br

dn: dc=empresa,dc=com,dc=br

objectClass: top

objectClass: organization

o: empresa.com.br

dc: Empresa

# admin, empresa.com.br

dn: cn=admin,dc=empresa,dc=com,dc=br

objectClass: organizationalRole

cn: admin

description: LDAP administrator

# GROUPS, empresa.com.br

dn: ou=GROUPS,dc=empresa,dc=com,dc=br

objectClass: top

objectClass: organizationalUnit

ou: GROUPS

# comercial, GROUPS, empresa.com.br

dn: cn=comercial,ou=GROUPS,dc=empresa,dc=com,dc=br

objectClass: posixGroup

cn: comercial

gidNumber: 10001

memberUid: fulano

memberUid: fulana

# pentaho-admin, GROUPS, empresa.com.br

dn: cn=pentaho-admin,ou=GROUPS,dc=empresa,dc=com,dc=br

objectClass: posixGroup

cn: comercial

gidNumber: 10001

memberUid: vader

# USERS, empresa.com.br

dn: cn=USERS,dc=empresa,dc=com,dc=br

cn: USERS

objectClass: top

# fulano, USERS, empresa.com.br

dn: cn=fulano,cn=USERS,dc=empresa,dc=com,dc=br

objectClass: posixAccount

objectClass: top

uid: fulano

uidNumber: 100

cn: fulano

# vader, USERS, empresa.com.br

dn: cn=vader,cn=USERS,dc=empresa,dc=com,dc=br

objectClass: posixAccount

objectClass: top

uid: vader

uidNumber: 110

cn: vader

Resumindo. Temos a raiz da nossa empresa, dentro dela temos o usuário admin, um grupo chamado comercial onde temos dois usuários, o fulano e a fulana, temos um grupo chamado pentaho-admin, onde temos o usuário vader, que fará o papel de administrador do Pentaho e temos o cadastro desses usuários dentro da cn USERS.

Agora que já conhecemos a nossa base de exemplo, podemo prosseguir com a configuração.

2 – Os arquivos do Pentaho BI Server que precisam ser modificados, estão na pasta biserver-ce/pentaho-solutions/system. Os arquivos são:

  • pentaho-spring-beans.xml
  • applicationContext-security-ldap.properties
  • applicationContext-spring-security-ldap.xml
  • applicationContext-spring-security.xml
  • pentaho.xml

3 – Editar o arquivo pentaho-spring-beans.xml.

Esse arquivo é o que controla onde o Pentaho BI Server vai recuperar os usuários e papéis que utilizará na para loguin e para controlar os acessos. Por padrão ele vem com o hibernate.

O arquivo original está assim:

<import resource=”sessionStartupActions.xml” />

<import resource=”applicationContext-spring-security.xml” />

<import resource=”applicationContext-common-authorization.xml” />

<import resource=”applicationContext-spring-security-hibernate.xml” />

<import resource=”applicationContext-pentaho-security-hibernate.xml” />

Precisamos mudar as linhas que chamam o hibernate para o ldap. O arquivo ficará da seguinte maneira:

<import resource=”sessionStartupActions.xml” />

<import resource=”applicationContext-spring-security.xml” />

<import resource=”applicationContext-common-authorization.xml” />

<import resource=”applicationContext-spring-security-ldap.xml” />

<import resource=”applicationContext-pentaho-security-ldap.xml” />

4 – Em versões antigas do BI Server, era necessário editar diretamente os arquivos xml para colocar os parâmetros do LDAP. De umas versões pra cá a coisa melhorou, e temos um arquivo onde podemos definir os parâmetros que serão substituídos pelas variáveis nos xml. Editem o arquivo applicationContext-security-ldap.properties.

Aqui vou colocar o arquivo conforme as configurações do nosso LDAP de exemplo.

contextSource.providerUrl=ldap\://10.0.0.1\:389/dc\=empresa,dc\=com,dc\=br

contextSource.userDn=cn\=admin,dc\=empresa,dc\=com,dc\=br

contextSource.password=123456

userSearch.searchBase=cn\=USERS

userSearch.searchFilter=(cn\={0})

populator.convertToUpperCase=true

populator.groupRoleAttribute=cn

populator.groupSearchBase=ou\=GROUPS

populator.groupSearchFilter=(memberUid\={1})

populator.rolePrefix=

populator.searchSubtree=true

allAuthoritiesSearch.roleAttribute=cn

allAuthoritiesSearch.searchBase=ou\=GROUPS

allAuthoritiesSearch.searchFilter=(objectClass\=posixGroup)

allUsernamesSearch.usernameAttribute=cn

allUsernamesSearch.searchBase=cn\=USERS

allUsernamesSearch.searchFilter=(objectClass\=posixAccount)

ATENÇÃO nos detalhes desse arquivo, pois eles fazem a diferença. A \ sempre deve ser usada antes de um =, caso contrário o Spring Security vai interpretar o = como sendo parte do parâmetro, e não vai ter nenhum erro no log que vai te mostrar isso.

A explicação de cada seção:

contextSource.providerUrl=ldap\://10.0.0.1\:389/dc\=empresa,dc\=com,dc\=br

contextSource.userDn=cn\=admin,dc\=empresa,dc\=com,dc\=br

contextSource.password=123456

Aqui é necessário colocar o endereço do LDAP, porta e raiz do LDAP. Informar também o usuário admin do LDAP e a senha dele.

userSearch.searchBase=cn\=USERS

userSearch.searchFilter=(cn\={0})

Aqui as variáveis onde ele procurará pelos usuários. Nossos usuários estão uma cn USERS e o nome dos usuários estão em cn também. Colocando 0 ele procura pelo DN completo do usuário.

populator.convertToUpperCase=true

populator.groupRoleAttribute=cn

populator.groupSearchBase=ou\=GROUPS

populator.groupSearchFilter=(memberUid\={1})

populator.rolePrefix=

populator.searchSubtree=true

Essa é a seção onde ele procurará os grupos do LDAP. Os nomes dos nossos grupos estão em um atributo cn, dentro de uma ou GROUPS. O campo dentro dos grupos que identificam os usuário pertencentes ao grupo é o atributo memberUid. Colocando 1 ele procura somente pelo nome do usuário, se deixasse em 0 ele procuraria pelo DN completo.

allAuthoritiesSearch.roleAttribute=cn

allAuthoritiesSearch.searchBase=ou\=GROUPS

allAuthoritiesSearch.searchFilter=(objectClass\=posixGroup)

allUsernamesSearch.usernameAttribute=cn

allUsernamesSearch.searchBase=cn\=USERS

allUsernamesSearch.searchFilter=(objectClass\=posixAccount)

Essa duas seções são usadas para resgatar a lista de usuário e grupos do LDAP. Aqui não é a parte de autenticação, é para trazer a lista de usuários e grupos quando clicamos com o botão direito em uma pasta dentro do BI Server e clicamos em propriedades para setar quem pode acessar aquela pasta. Resumindo, é para trazer a lista de atribuição de permissões.

5 – No modo padrão de autenticação do Pentaho BI Server, ele procura por um grupo/papel chamado Authenticated. Normalmente não temos esse papel no LDAP, mas ele é necessário para que o usuário possa autenticar-se no BI Server. Para isso, podemos editar o arquivo applicationContext-spring-security-ldap.xml e colocar o defaultRole:

<!– be sure to escape ampersands –>

<bean id=”populator”

class=”org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator”>

<constructor-arg index=”0″>

<ref local=”contextSource” />

</constructor-arg>

<constructor-arg index=”1″ value=”${populator.groupSearchBase}” />

<property name=”groupRoleAttribute” value=”${populator.groupRoleAttribute}” />

<!– {0} will be replaced with user DN; {1} will be replaced with username –>

<property name=”groupSearchFilter” value=”${populator.groupSearchFilter}” />

<property name=”rolePrefix” value=”${populator.rolePrefix}” />

<property name=”convertToUpperCase” value=”${populator.convertToUpperCase}” />

<property name=”searchSubtree” value=”${populator.searchSubtree}” />

<property name=”defaultRole” value=”Authenticated” />

</bean>

Com isso, todo usuário receberá por padrão o papel Authenticated para poder se logar, depois será associado outros grupos conforme as configurações que vamos fazer nos outros arquivos.

6 – Agora precisamos definir o acesso de determinados grupos para alguns recursos do BI Server e começar a definir quem vai ser o grupo administrador. Isso é feito no arquivo applicationContext-spring-security.xml.

É necessário acrescentar ou substituir os grupos conforme for necessário. Nesse caso, o mais importante é adicionar o grupo de administrador, pois se o usuário não estiver associado a nenhum outro grupo por padrão, ele sempre estará no grupo Autenticated.

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

\A/docs/.*\Z=Anonymous,Authenticated

\A/mantlelogin/.*\Z=Anonymous,Authenticated

\A/mantle/mantleloginservice/*\Z=Anonymous,Authenticated

\A/mantle/.*\Z=Anonymous,Authenticated

\A/welcome/.*\Z=Anonymous,Authenticated

\A/public/.*\Z=Anonymous,Authenticated

\A/login.*\Z=Anonymous,Authenticated

\A/ping/alive.gif.*\Z=Anonymous,Authenticated

\A/j_spring_security_check.*\Z=Anonymous,Authenticated

\A/getimage.*\Z=Anonymous,Authenticated

\A/getresource.*\Z=Anonymous,Authenticated

\A/admin.*\Z=PENTAHO-ADMIN

\A/auditreport.*\Z=PENTAHO-ADMIN

\A/auditreportlist.*\Z=PENTAHO-ADMIN

\A/versioncontrol.*\Z=PENTAHO-ADMIN

\A/propertieseditor.*\Z=PENTAHO-ADMIN

\A/propertiespanel.*\Z=PENTAHO-ADMIN

\A/subscriptionadmin.*\Z=PENTAHO-ADMIN

\A/resetrepository.*\Z=PENTAHO-ADMIN

\A/viewaction.*solution.admin.*\Z=PENTAHO-ADMIN

\A/scheduleradmin.*\Z=PENTAHO-ADMIN

\A/publish.*\Z=PENTAHO-ADMIN

\A/.*\Z=Authenticated

Na seção de Administrador, nós colocamos o grupo PENTAHO-ADMIN do LDAP, e precisa ser colocado em caixa alta, caso contrário ele não vai reconhecer. Nesse caso nem precisamos informar o grupo comercial, pois os outros usuário assumirão o grupo Authenticated. Caso fosse necessário, era só colocar uma vírgula e colocar o grupo/papel COMERCIAL depois dos Authenticated.

7 – Para finalizar, precisamos acertar as ACL’s de controle do BI Server, para dizer exatamente quem é o grupo de administradores e o seus privilégios. Para isso, precisamos editar o arquivo pentaho.xml.

<default-acls>

<acl-entry role=”PENTAHO-ADMIN” acl=”FULL_CONTROL” />

<acl-entry role=”Authenticated” acl=”EXECUTE” />

</default-acls>

<overrides>

<file path=”/pentaho-solutions/admin”>

<acl-entry role=”PENTAHO-ADMIN” acl=”FULL_CONTROL” />

</file>

</overrides>

<acl-voter>

<!– What role must someone be in to be an ADMIN of Pentaho –>

<admin-role>PENTAHO-ADMIN</admin-role>

</acl-voter>

Os nomes dos grupos precisam estar em caixa alta também.

Com isso a nossa configuração do LDAP está completa. Basta reiniciarmos o biserver-ce e testar no browser. Se tudo der certo, no nosso exemplo o vader entrará com poderes administrativos, o os outros usuários fulano e fulana com acesso comum.

O vader vai poder clicar em propriedades das pastas e setar quem pode ou não acessar determinadas pastas, conforme os usuários e grupos que serão resgatados do LDAP.

Espero que esse tutorial ajude, pois reuniu vários pedaços de outros tutorias da internet.

Segue as referências:

http://blog.netapsys.fr/index.php/post/2010/08/12/Comment-connecter-Pentaho-a-un-LDAP

http://wiki.pentaho.com/display/ServerDoc2x/Active+Directory+configuration+example+%28CE+3.0RC1%29+2.x-3.0.x

http://nextcoder.com/?p=172

http://wiki.pentaho.com/display/ServerDoc2x/Changing+to+the+LDAP+Security+DAO

Vai viajar para Bonito – MS? Saiba o que levar.

Postado em Atualizado em

Recentemente viajei para Bonito nas minhas férias, eu e minha esposa.

Compramos um pacote pela CVC e pelo fato de ser CVC, achamos que eles dariam todas as instruções necessárias para a viagem. Mera ilusão.

No dia em que compramos o pacote, até que a vendedora foi bem atenciosa, mas falou muito pouco do lugar. Ela falou o que ela sabia na teoria, pois tinha feito um trabalho sobre Bonito na faculdade. Mas várias perguntas que fizemos ou ela não sabia responder ou respondia errado.

Quando fomos pegar os nossos vouchers, pensei que dariam mais instruções sobre a viagem. Coisas simples tipo: “Leva isso, leva aquilo, lá é assim ou assado”. Que nada.

Infelizmente tivemos que aprender algumas coisas lá mesmo. Vejam bem, não estou reclamando do lugar, Bonito é maravilhoso, recomendo a todos, estou reclamando do atendimento que a CVC dá.

Pois bem. Se você for viajar para Bonito -MS, o que você deve levar? Segue aqui alguns itens que eu e minha esposa achamos importantes:

1 – Os passeios nas trilhas em cavernas, só podem ser feitos de tênis, papete ou com botinhas de neoprene. Não pode ser feito com chinelo. Pois bem, fazer de tênis não é bom, pois as trilhas são mescladas com cachoeiras, logo é um saco ter que  colocar e tirar o tênis toda hora, fora que ele vai ficar molhado e as pedras das cachoeiras cortam o pé se entrar descalço. As botinhas de neoprene, na maioria das vezes precisam ser alugadas no passeio. Não sabendo disso, só levamos tênis e chinelo, ou seja, tivemos que alugar as botinhas de neoprene. Sugestão: Compre uma papete, ela vai servir para todos os passeios.

2 – Compre uma câmera aquática ou uma proteção de acrílico para a sua. Lá são feitos muitos passeis em rios(bote e flutuação) e muitas cachoeiras. Você com certeza vai querer tirar fotos nas cachoeiras, no bote onde molha tudo e principalmente na flutuação dos rios(principalmente no Rio da Prata), pois dá pra ver muito peixe. Se você não levar uma câmera aquática, você terá que alugar uma, que ai vai custar de R$ 35,00  a R$ 60,00 o dia, dependendo do passei e do lugar. E se a bateria acabar no meio do passeio, dançou, os guias não vão te arrumar outra bateria, ou seja, bateu a foto bateu, se não bateu dançou. Não compre aqueles saquinhos de câmera, aquilo não resolve nada, a foto fica ruim e as vezes entra água. Também não compre aquelas máquinas descartáveis, a qualidade não é boa e não dá para saber se a foto ficou boa ou não. Sugestão: Compre uma câmera aquática ou aquelas proteções de acrílico que envolvem toda a máquina e fica uma máquina parecendo um Transformer.

3 – Compre uma máquina fotográfica terrestre que tenha bastante Zoom. Em Bonito dá para ver vários tipos de animais, só que na maioria das vezes, eles estão longe, estão nas árvores ou passando lá longe. O ideal é ter uma máquina com um Zoom de uns 12x. Ai você vai conseguir fotografar bem esses animais, caso contrário você vai ter que ficar explicando para os seus amigos que aquele pontinho preto e amarelo na foto era um tucano. Sugestão:  Compre daquelas máquinas que tiram várias fotos por minuto, é muito bom para pegar os vários tipos de aves voando por lá, principalmente as araras no Buraco da Araras.

4 – Leve um binoculo. Da mesma forma que é bom ter uma câmera com muito Zoom, é bom ter um binoculo, ele será muito útil para alguns passeios onde é complicado visualizar algo de longe. O Buraco das Araras é um desses, e o binoculo ajuda a ver os vários tipos de aves nas árvores.

5 – Tome Complexo B. Repelente para os mosquitos de lá é igual a perfume, quanto mais você passa, mais eles veem. E olha que usamos a melhor marca que tem no mercado. Depois de dois dias lá, fiquei sabendo através de um farmacêutico, que o ideal é tomar complexo B, o cheiro da vitamina no corpo espanta os mosquitos. Comece a tomar a vitamina uns 4 dias antes da viagem, essa foi a recomendação. Sugestão: Realmente não passe perfume, desodorante ou creme, esses cheiros atraem os mosquitos. Outra coisa, leve aqueles espanta mosquito de tomada para as noites, pois mesmo com tudo fechado, eles conseguem entrar no quarto.

6 – Se você não for cliente do Bradesco, Caixa ou do Banco do Brasil, leve bastante dinheiro, pois só existe esses três bancos por lá, e o da Caixa e na lotérica. Alguns passeios aceitam cartão, mas não são todos e nem sempre as máquinas de cartões deles funciona.

7 – Quando checar em Bonito, aproveite a primeira noite para ir nas agências da cidade. A CVC tenta empurrar alguns passeis e nem sempre eles são os melhores, e fazer passeis com a CVC não é muito bom, pois sempre vai muita gente e tem que ficar esperando. Procure, os preços vão ser os mesmos, mas a comodidade vai ser maior. Sugestão: A Boca da Onça é um passei maravilhoso que os guias da CVC não falam, o Abismo também.

8 – Leve pelo menos uma blusa de freio, pois dependendo da época, pode ser que faça um pouco de freio nas noites e madrugadas.

9 – Leve o protetor solar, só tome cuidado que em alguns lugares como nas nascentes dos rios, não pode entrar com protetor solar. Na verdade não pode passar o protetor na hora do passeio estando lá. Então se você é branco como eu, já passe o protetor antes de sair do hotel. Sugestão: Se você não quiser ficar com a batata da perna toda queimada, leve uma calça leg para o dia das flutuações, pois as roupas de neoprene de lá só vão até o joelho. Leve uma calça dessa mesmo sendo homem.

10 – Se puder, leve um Snorkel. Nos passeios de flutuação eles fornecem um Snorkel, mas tem muitos outros passeios, que é bacana olhar embaixo da água, pois tem muito peixe por lá, principalmente nas cachoeiras. Vale a pena levar um.

Bom, isso são as dicas que eu posso dar se você for viajar para Bonito – MS. A minha viagem foi muito boa, mas se eu soubesse dessas coisas antes, acredito que teria sido muito melhor.

Ah, e fica umas dicas de restaurantes:

– Restaurante Pantanal: Tem uma ótima carne de jacaré e de capivara. O prato principal deles é o Trio Pantaneiro, que vem com carne de jacaré, capivara e queixada, dá para umas 3 ou 4 pessoas comerem, apesar de eles falarem que é para 2.

– Cantinho do Peixe: O melhor lugar para comer alguns tipos de peixe. O parto principal deles é um Pintado ao molho de Urucum.

– Sale e Pepe: Esse restaurante foi indicado pelos guias como o melhor lugar para comer uma Piraputanga, que é o peixe da região, vocês vão ver muito desses por lá.

Bom, espero que essas dicas ajudem.

Pentaho Data Integration com arquivos texto – Parte 1/2

Postado em Atualizado em

Antes de mais nada, gostaria de agradecer ao Fábio de Salles que me ajudou muito nessa tarefa. O Fábio é um grande conhecedor da Suite Pentaho.

Uma situação que enfrentei com o Pentaho Data Integrations(PDI), foi trabalhar com arquivos texto. Pegar arquivos texto e carrega-los em um Banco de Dados.

Só que não foi uma situação comum com arquivos texto. Na maioria das vezes esses arquivos já estão bem formatados, divididos por um separador, seja vírgula, ponto e vírgula ou qualquer outro tipo de separador.

Esse caso em específico, tinha duas particularidades. A primeira é que o arquivo estava todo desformatado, ou seja, o separador eram espaços e existiam colunas que estavam vazias e maioria das informações pegavam mais de uma linha e em geral sem seguir um padrão. A segunda, é que teoricamente a segunda coluna do arquivo (digo teoricamente porque não tinha nenhum padrão de divisão), tinha um tipo. Logo cada um daqueles tipos precisavam ir para tabelas diferentes dentro do banco de dados. Um detalhe, é que esse tipo estava grudado com outra informação dentro do arquivo texto.

Para ilustrar, a solicitação do cliente foi a seguinte:

Preciso que essa fonte de dados que está em arquivo texto, seja transformado em um banco de dados, onde cada tipo será uma tabela. O layout de cada campo, está especificado em um planilha Excel.

Vou colocar o passo a passo de como fiz isso com o Pentaho Data Integration, gravando em um SGDB PostgreSQL. Os dados de exemplo que vou colocar aqui são totalmente fictícios e não condizem com a realidade do cliente. Nesse caso em específico, existiam 15 tipos diferentes, ou seja, surgiram 15 tabelas. Nesse exemplo, vou mostrar com 2 tipos, pois o procedimento se repete.

O arquivo texto que possuí os dados, será referenciado por arquivo_dados.txt. O Formato do arquivo é o seguinte:

017002144301702000011675 0107042010070420104210000000002261060800000000121001001012010SAO PAULO RUA ABC CONSULTOR SEM COMENTARIOS 0000000000000123 05 582500000 ROBERTO JUSTUS 46293043120 000000000000000000000000
0070031145007 9829298000PARQUE IBIRAPUREA

Reparem que não dá para distinguir as informações. Fazendo um Vim numerado no Linux eu consegui pelo menos saber quem eram as linhas, ficou mais ou menos assim:

1 017002144301702000011675 0107042010070420104210000000002261060800000000121001001012010SAO PAULO RUA ABC CONSULTOR SEM COMENTARIOS 0000000000000123 05 582500000 ROBERTO JUSTUS 46293043120 000000000000000000000000
2 0070031145007 9829298000PARQUE IBIRAPUERA

Dá para ver a linha 1 e a linha 2. Lembrando que isso é um pequeno exemplo, o arquivo tinha muito mais linhas.

O primeiro passo era saber onde estava o TIPO que seria usado como filtro para jogar os registros certos para as tabelas certas no banco de dados. Para isso, consultei a planilha.xls, que continha a formatação de cada campo.

Vou colocar um exemplo fictício da planilha, e não vou colocar exemplo de todos os campos, pois ficaria muito grande, já que um dos tipos em questão tem vários campos:

Agora já sabemos onde estão os tipos. Temos 2 tipos, o tipo 01 e o tipo 98. E na planilha podemos ver que temos a posição INICIAL de cada campo, o TAMANHO e o TIPO.

Com o PDI (Pentaho Data Integration), vamos fazer a coisa acontecer.

Em uma nova transformação do PDI, vamos usar um Step chamado Text file input que fica dentro de Input. A imagem dele é a seguinte:

A configuração dele vai ser a seguinte:

Na aba File desse Step, precisamos especificar qual é o arquivo de origem. Procure ele através do botão Browse e com Add eu adiciono ao Selected files. Podem ser especificados vários arquivos.

Na aba Content, o mais importantes são os campos Filetype, onde precisamos deixa-lo com o tipo Fixed, pois o arquivo não é do tipo CSV, logo o Separator não vai ser necessário agora. O outro campo é o Format, que nesse caso pode ser DOS ou Unix e o Encondig, que precisa ter uma atenção especial para não ter problemas na hora de gravar no banco de dados.

A próxima aba, a Fields é onde vamos começar a definir a divisão dos campos dentro do arquivos. Nessa aba, vamos clicar no botão Get Fields, onde o PDI mostrará parte do arquivo, para indicarmos a quebra das colunas. A tela a seguir exemplifica isso:

Como o arquivo está todo bagunçado, a única coluna que realmente conseguimos dividir é a primeira, e ainda sim ela não é um único campo, nos próximos passos, ela será dividida em mais campos. As setas vermelhas foram colocadas manualmente, clicando na posição que deseja fazer a separação.

Nessa caso, podemos dividir o arquivo em 3 colunas, a primeira que está fácil de ser identificada, a segunda que será o nosso campo de filtro que é o TIPO, e o terceiro é o restante do arquivo.

Podemos clicar em Finish e nossa tela ficará da seguinte maneira:

Vejam que os campos foram renomeados para registro_id, tipo e registro_conteudo. Essa nomenclatura não é obrigatória, mas e necessário lembrar delas para os próximos passos.

Com a divisão dos campos, vamos para o segundo passo, que é separar o conteúdo do arquivo por TIPOS. Vamos quebrar o arquivo em tipos e gravar em arquivos separados. Não vamos jogar diretamente para a base de dados, pois eles ainda precisam passar por algumas modificações.

Para dividir o arquivo em outros arquivos, podemos usar o Step chamado Switch/Case que está dentro de Flow. A imagem do Step é a seguinte:

Esse passo depende de outros passos para ser totalmente configurado, pois é ele que vai separar o arquivo conforme o campo que especificarmos e vai jogar para outros Steps.

Para completar essa parte, vamos adicionar dois Steps Text file output que está dentro de Output. A imagem desse passo é a seguinte:

Ligue o Step Text file input ao Switch/Case, e ligue o Switch/Case aos dois Text file output. As ligações ficarão da seguinte forma:

Aqui foi renomeado os nomes dos Steps, para facilitar a visualização. O Step Saida Default, é para gravar linhas que não sejam do Tipo 01 e 98, mas ele não é obrigatório.

Reparem que a ligação do Switch/Case para a Saida do Tipo 01 e 98, está amarela e pontilhada, isso significa que o Switch/Case ainda não está configurado para repassar informações para esses Steps.

Vamos abrir o Switch/Case e configurá-lo:

Nesse Step, tem alguns campos que precisam ser configurados. O primeiro é o Field name to switch. Essa opção define o campo que será usado como separador. Temos que especificar o campo tipo.
O segundo campo é o Case value data type, que define o tipo do campo tipo, que é String.
O terceiro é o Case values. Essa é a opção que vai fazer a separação. Aqui eu digo que tudo que tiver valor 01 nesse campo, seja direcionado para o Step Saida do Tipo 01, e o que tiver valor 98, seja direcionado para o Step Saida do Tipo 98.
E o quarto e não obrigatório é a saida default.

Depois de configurado, as setas ficam da seguinte maneira:

A configuração do Step Saida do Tipo 01 (Text file output), é a seguinte:

Na aba File, é necessário especificar o arquivo onde será gravado os dados que virão do Step anterior.

Na aba Content, é importante informar o Separator, que será “;” e o Format.

Na aba Fields, vamos clicar em Get Fields, para trazer os campos. Nesse momento o campo tipo não é mais importante, pois não precisamos gravá-lo na tabela, já que no banco existirá uma tabela para cada tipo. Logo, podemos remover esse campo da aba Fields, ficando somente o registro_id e registro_conteudo.

Para o Step Saida do tipo 98, é necessário fazer o mesmo procedimento.

Nesse momento, podemos salvar a nossa transformação e executá-la.

Depois da execução da transformação, termos os arquivos saida_tipo_01.txt e saida_tipo_98.txt. Esses arquivos ficarão no seguinte formato.

saida_tipo_01.txt:

017002144301702000011675;07042010070420104210000000002261060800000000121001001012010SAO PAULO RUA ABC CONSULTOR SEM COMENTARIOS 0000000000000123 0558250000 0 ROBERTO JUSTUS 46293043120 000000000000000000000000

saida_tipo_98.txt

0070031145007;29298000PARQUE IBIRAPUERA

Vejam que foi colocado um “;“, separando as duas colunas, e o campo tipo não está mais aqui.

Com isso concluímos a primeira fase que era separar o arquivo pelos seus respectivos tipos, criando um arquivo para cada tipo.

No post com a parte 2 veremos o restante para formatarmos esses campos segundo a planilha.xls e gravar os dados no banco de dados.

Futebol? Que nada, o esquema é PaintBall!

Postado em

Bom, acho que poucos sabem, mas recentemente adotei o PaintBall como o meu esporte. Exatamente, em meio a um país que só pensa em uma bola grande que é chutada com os pés, eu prefiro jogar pequenas bolas de tinta através de um marcador (arma de paintball).

Muitas acham que o Paintball é um esporte perigoso, mas eu digo que é muito mais fácil a pessoa se machucar jogando futebol do que jogando Paintball. Temos um exemplo claro nessa copa do mundo. Cadê o Elano que não jogou mais? Ficou de fora dos jogos por causa de uma entrada dura de um jogador da Costa do Marfim. Fora isso já várias pessoas pararem de jogar futebol porque sofreram entradas duras de outras pessoas.

O Futebol é um esporte de muito mais contato que o Paintball. O Paintball tem todas as suas proteções: Colete, Máscara, luvas, pescoceira e muitas outras coisas que podem ser usadas dependendo do jogador. Ou seja, somente quem quer se machuca nesse esporte. E o Futebol? A no futebol tem uma caneleira e….. E somente isso.

Como todo brasileiro eu gosto bastante de futebol. Gosto mais de ver do que jogar, mas acho que o Brasil precisa abrir mais a mente para outros esportes. Paintball sim é um esporte. É um esporte que se você levar a séria, você realmente vai gastar um pouco mais do que o futebol, afinal, no paintball é necessário muito mais proteção do que só a caneleira.

Você pode usar um marcador que os diversos campos de Paintball oferecem, ou pode comprar o seu próprio. Como estou levando o esporte a sério, resolvi comprar o meu próprio marcador. Segue uma foto do modelo do meu marcador:

Ele vai ficar bem diferente, pois vou modificá-lo. Existem basicamente dois tipos de Paintball, o Speed onde são dois times de cada lado em um campo aberto no mata mata, e o Cenário, normalmente em matas, fábricas abandonadas ou cenários montados, onde a estratégia fala mais alto, pois parece uma guerra de verdade. Eu prefiro o Paintball de cenário.

Existem muitos campos de Paintball. Tem aqueles campos que você precisa ir com uma galera para jogar, mas também tem aqueles jogos abertos onde as pessoas vão e os times são divididos na hora.

Bom é isso, fica aqui um pouco desse maravilhoso esporte que estou praticando.

Abraços e fiquem com Deus.