Articles tagged with: server

Roles do SQL Server – Serveradmin

Imagem

Olá,

Continuando a  antiga série básica sobre roles do SQL Server, vamos dar uma olhada na role: serveradmin.

Essa role é responsável por realizar atividades inerentes à configuração do servidor.

Roles do SQL Server – Bulkadmin

Cavaleiros

Bom dia. Continuando a série sobre Roles, atualmente falando sobre as Fixed Server Roles, vamos falar um pouco sobre o Bulk Admin. O artigo ficou um pouco extenso devido aos exemplos, que achei interessante aplicar pra fixar a informação passada.

O que é  o Bulkadmin?

O que o BOL (Books Online) diz sobre a role:

Members of the bulkadmin fixed server role can run the BULK INSERT statement.

Em português simples traduzido no popular:

Membros da função fixa bulkadmin podem executar comandos BULK INSERT

Sem muito segredo. Significa que ele pode rodar comandos BULK INSERT.

Por definição, BULK INSERT permite a inserção de arquivos que contenham dados externos ao SQL Server. Com o intuito de reforçar a segurança, o SQL Server insiste que não basta apenas ter insert na tabela, para inserir arquivos externos, é necessário ter permissão exclusiva pra tal. Aqui entra uma observação importante: ter permissão de BULK INSERT não significa que o login ciclano pode realizar inserção de arquivos externos onde quiser: ele ainda precisa da permissão de INSERT nas tabelas normalmente. No final das contas, figurativamente falando, o usuário precisa de Permissão pra Inserir + Permissão pra Inserir arquivos externos.

Aplicação

É uma permissão interessante e necessária apenas para o uso do comando BULK INSERT e mais nada. Para cargas de ETL que usam arquivos externo, por exemplo, é uma situação recorrente e que demanda o uso da permissão, geralmente para uma conta de aplicação. Fora o Bulkadmin, a única permissão que pode realizar este tipo de inserção externa é o sysadmin (que tem permissão total na instância).

Testes

Vamos ver na prática como funciona?

Primeiramente, vamos ver o que a role pode fazer:

Retorna: “O bulkadmin pode fazer BULK INSERT e  Conceder privilégio de BulkAdmin”

OBS: Os testes foram feitos em uma instância local.

1) Crie um arquivo de texto com o seguinte conteúdo:

1,BULKADMIN,Pode realizar comandos BULK INSERT
2,BULKADMIN,Pode propagar a role de BULK INSERT para outros logins

2) Salve o arquivo em C:tempcarga.txt. Esse é o tal do arquivo externo que vamos usar nos nossos testes.

3) Logue em uma instância na qual você possa testar. Use um login com permissão sysadmin para tal.

4) Vamos criar a estrutura para testes

5) Agora vamos criar os logins/usuários para as bases. Atenção aos comentários dos scripts abaixo:

Pronto! Chegamos onde queríamos chegar. Agora, vamos testar os logins! Se você tiver experiência para usar impersonação, fique a vontade para usar EXECUTE AS LOGIN. Porém, em nosso teste, vamos logar com o usuário via ssms mesmo. Alguns detalhes pra evitar ter que fazer troubleshooting:

a) Verifique se o modo de autenticação está como misto (mixed mode)

b) Verifique se o caminho do arquivo está no mesmo servidor  que a instância.

Simbora 🙂

6) Logue com o login CarinhaDoInsert via Management Studio. Execute o seguinte comando:

Primeiro insert funciona, pois ele tem permissão para tal. Mas e o bulk insert?

Uma mensagem vermelha vai emergir sobre as profundezas da engine do SQL Server, direto da sua máquina.

Msg 4834, Level 16, State 4, Line 7

You do not have permission to use the bulk load statement.

Erro extremamente óbvio. “Você não tem permissão pra usar comandos de carregamento BULK.

Agora vamos ver o outro lado da moeda… Quem realmente tem permissão.

7) Logue com o login CarinhaBulkAdmin via Management Studio. Execute o seguinte comando:

Sinta a surpresa (só que não):

Msg 229, Level 14, State 5, Line 1
The INSERT permission was denied on the object ‘Roles’, database ‘RoleTest’, schema ‘dbo’.

Ok. Mas ele tem permissão de realizar um BULK INSERT, então, se ele não tem permissão de INSERT, ah, de BULK tem que ter…certo? Certo? Are you sure?

Adivinha qual mensagem aparece?

Msg 229, Level 14, State 5, Line 6

The INSERT permission was denied on the object ‘Roles’, database ‘RoleTest’, schema ‘dbo’.

Note que independente do comando, ele acusou falta de permissão de INSERT. Simples assim…

Logue como sysadmin novamente e conceda a seguinte permissão:

Agora sim, o BulkAdmin vai conseguir realizar tanto o BulkInsert como o Insert normal.  O exemplo ficou longo (e óbvio pra muitas pessoas) mas agora creio que deu como comprovar de fato pra o BULK INSERT e permissionamento na prática. Ainda logado como CarinhaBulkAdmin, vamos fazer o último teste

8) Lembram lá no começo que qualquer membro de uma server role pode passar permissões (da mesma role) para outro login? Então, vamos ver isso na prática:

Pronto. Agora o CarinhaDoInsert também é bulkadmin. Outro exemplo do porquê se deve ter bastante cuidado ao concender roles de servidor… Não vou entrar em detalhes aqui, mas imagine no milagre da multiplicação…

Bônus/curiosidade:  Não falei ainda sobre o DbOwner, que é uma role de banco, mas aqui vai uma curiosidade interessante: o dbOwner ele tem privilégios extremos no banco de dados na qual ele é dono. Ele pode fazer qualquer coisa praticamente em sua base. Note que eu disse “praticamente”. O BULK LOAD é considerado algo tão importante na parte de segurança que ainda assim, o dbowner precisaria ter explicitamente bulkadmin pra poder usar o bulk insert, pois caso tente uma operação deste tipo sem devida permissão, ocorrerá um erro (e olha que ele é dono da base).

Considerações finais

Pra reforçar o entendimento, sugiro ler novamente [Aplicação], tópico escrito acima. Finish!

É isso. Estou estudando para exames (70-463) então pode demorar um pouco para os post sairem. Mas saem. Dbcreator ficaria pra esse post mas infelizmente não deu tempo. Prometo. Em paralelo, posso prometer que vem um pouco de BI e SSIS por aí (assunto que estou estudando).

Qualquer dúvida, sugestão, etc, entre em contato.

[]’s

Roles do SQL Server – Vida e Obra

s12

(Esse artigo faz parte da série Roles do SQL Server – Vida e Obra)

Bom dia!

Este post inicia o começo de uma série sobre as Server-roles:  Roles no SQL Server.

Entendo que é um assunto importante tanto pra DBA’s (essencial aqui) quanto pra Desenvolvedores, que por vezes que precisam gerenciar o SQL Server por motivo ou outro.

1 – Básico sobre Segurança

Tem um artigo legal do Laurentiu que trata dos aspectos básicos de segurança no SQL Server. Em resumo:

  • Existem dois escopos principais no SQL Server quando o assunto é segurança: Server (Instância) e Databases (Bancos de Dados);
  • Logins são relacionados à Instância (Server) e Usuários, aos bancos de dados;
  • Cada login é um principal. Principal é tudo aquilo que pode sofrer uma ação chamada permissionamento;
  • Existem “principals” que possuem permissões já pré-definidas, embora você também possa criá-los. Tais principals são chamados de Role (Papel, função)

Mas…o que é uma role?

2- Roles: Analogia 

Maria Queren é uma analista de sistemas pela manhã, trabalhando em uma multinacional. De tarde, ela vai para sua empresa, onde é dona, a fim de tomar decisões gerenciais. No final da tarde, vai para o curso de inglês, onde é aluna. De noite, vai pra casa, onde é esposa e mãe. Nos finais de semana, passa o tempo na casa dos pais.

Notou o que seriam “roles”? Observe a variedade de papéis que a Maria possui. Analistas de Sistema, proprietária de negócio, estudante, mãe, esposa, filha… Cada papel deste traz uma série de poderes e possui uma determinada atuação em determinado contexto (ambiente). Maria pode dar gerenciar pessoas em sua empresa, mas não na instituição onde tem curso de inglês.

3 – Voltando ao SQL Server

Então, o SQL Server possui também alguns papéis de servidor, tanto em contexto de servidor como em contexto de banco de dados. É importante associar o contexto de servidor aos logins (autenticação) do que usuários (estes estão no escopo de banco de dados).  Cada papel possui uma série de privilégios, e garante ao principal associado X permissões. No caso em específico do assunto atual, que são roles de servidor, garante algumas permissões à nível de instância.

4-   Mas o que são mesmo Server Roles?

Se dividem em duas categorias: Fixed Server Roles (Leia-se Funções fixas, pré-definidas) e as Custom Server Roles (referenciadas oficialmente como User Defined Server Roles, que é uma novidade trazida pelo SQL Server 2012). Vamos começar da raíz, conhecendo cada uma das roles fixas.

As nove Roles Fixas de Servidor, linkadas neste tópico, são:

5 – Mas porque falar sobre Server Roles em outros posts? “Faz um resumão aê”

Pode parecer simples resumir poucas linhas sobre cada role acima (como é comumente visto pela internet). Porém, algumas roles são  extremamente peculiares, pois, possuem mais privilégios do que se comumente acredita que tenham e é difícil fixar isso sem teste. Algumas são irrelevantes no dia de hoje (em linhas gerais), outras fáceis de entender e outras bastante delicadas e que escondem um canhão (por exemplo, dbcreator) se mal utilizados.

Nas próximas postagens, vou seguir a ordem da lista acima e conversamos sobre as roles bulkadmin e dbcreator.
De antemão, caso tenha alguma pergunta ou queira dar uma sugestão sobre o assunto (e quiser fazer perguntas sobre as roles), não hesite em comentar ou entrar em contato. Todo e qualquer feedback é bem vindo, ok?

[]’s