Olá,
Resolvi escrever esse artigo para citar a variedade de funções voltadas a privilégios, no SQL Server. Existem inúmeras variáveis em tudo isso, no entanto vou falar das mais utilizadas.
Como prezo pela simplicidade e facilidade de interpretação, tentarei ser o mais objetivo possível. Então, antes de tudo vamos entender o básico sobre as permissões: logins e usuários.
Login: exclusivo para uso na instância. É a porta de entrada, e pode ser interno do SQL Server, ou mapeado através do Windows.
Usuário: objeto para acesso aos bancos de dados. Um detalhe, é que todo usuário terá vínculo com um login, mas o oposto não necessariamente ocorre. Outro ponto a observar, é que para cada banco de dados que um login tem permissão de acesso, um usuário é mapeado.
Após distinguirmos o que são os identificadores de acesso, temos que conhecer os roles (ou papéis), tanto a nível de instância quanto a nível de bancos de dados. Basicamente, os roles são grupos com níveis de acessos diferentes. Temos que considerar roles a nível de servidor e bancos de dados, são eles:
Funções de Servidor
Login: exclusivo para uso na instância. É a porta de entrada, e pode ser interno do SQL Server, ou mapeado através do Windows.
Usuário: objeto para acesso aos bancos de dados. Um detalhe, é que todo usuário terá vínculo com um login, mas o oposto não necessariamente ocorre. Outro ponto a observar, é que para cada banco de dados que um login tem permissão de acesso, um usuário é mapeado.
Após distinguirmos o que são os identificadores de acesso, temos que conhecer os roles (ou papéis), tanto a nível de instância quanto a nível de bancos de dados. Basicamente, os roles são grupos com níveis de acessos diferentes. Temos que considerar roles a nível de servidor e bancos de dados, são eles:
Funções de Servidor
Aqui temos as funções para conceder privilégios a nível de instância. Em resumo: administração.
- bulkadmin: realizar inserções em massa no banco de dados;
- dbcreator: criar, modificar, eliminar e restaurar bancos de dados;
- diskadmin: gerenciar arquivos de disco;
- processadmin: controlar processos do SQL Server;
- securityadmin: gerenciar logins, permissões de banco de dados e ler logs de erro;
- serveradmin: definir opções de configuração em nível do servidor e encerrar o servidor;
- setupadmin: gerenciar servidores vinculados e controlar procedimentos de inicialização;
- sysadmin: controle total sobre o SQL Server, pode executar qualquer tarefa.
Funções de Bancos de dados
Aqui temos as funções para conceder privilégios a nível de banco de dados. Em resumo: quando queremos atribuir privilégios de consulta, escrita, leitura e deleção, usamos essas funções. Importante lembrar que os privilégios são exclusivos por bancos de dados, ou seja, podemos ter diferentes roles para cada banco.
- public: usuários que não possuem permissão ou negação explícita, herdam essa função;
- db_owner: alterar todas as configurações dos bancos, incluindo deletar os mesmos;
- db_securityadmin: modificar e gerenciar níveis de acesso aos bancos de dados;
- db_accessadmin: permitir ou negar o acesso aos bancos de dados;
- db_backupoperator: fazer backup dos bancos de dados;
- db_ddladmin: executar comandos DDL em um banco de dados (ALTER, CREATE, DROP, etc);
- db_datawriter: adicionar, excluir ou alterar dados em todas as tabelas de usuário;
- db_datareader: ler quaisquer dados de todas as tabelas de usuário;
- db_denydatawriter: não pode inserir, excluir, tampouco alterar dados em tabelas de usuários;
- db_denydatareader: não pode ler dados em tabelas de usuários.
Diante de tudo que já foi exposto, também gostaria de compartilhar com vocês, uma maneira de verificar as permissões de um login, usuário ou grupo. A que considero mais simples, é através da stored procedure sp_helpprotect, veja:
EXEC <database>.<schema>.sp_helprotect @username = 'monitorscom'
Repare que os valores entre < > devem ser alterados, de acordo com o ambiente onde será verificado. Ex.: MyDB.dbo.sp_helpprotect "username = 'rafael.conzatti'.
Podemos obter detalhes de forma mais abrangente via transact-SQL. Para fins de formatação do artigo, irei disponibilizar os scripts para download. Para baixar clique na imagem do resultado de cada um.
Membros de roles
Permissões
Se você reparou na imagem do resultado acima, pode ver os comandos GRANT e REVOKE. Explicando brevemente, temos:
- GRANT: concede permissão para executar a tarefa proposta;
- DENY: nega permissão para executar tarefas;
- REVOKE: remove a permissão GRANT;
Ainda existem mais configurações como PRINCIPAL, SECURABLE e PERMISSION. Há também funções exclusivas para o banco de dados de sistema 'msdb', no entanto não irei abordá-las neste artigo.
E aí, o que achou? Gostou? Ficou com dúvidas? Quer sugerir um artigo? Deixe-me saber, envie uma mensagem aqui.
Postar um comentário