Roles do SQL Server – Public


public

 

 

 

 

 

 

 

 

Olá!

Continuando com a série de Roles do SQL Server, vamos conversar sobre a role Public.

Provavelmente o post mais rápido do blog =)

Public

De cara, vale dizer que public possui uma implementação diferente das outras roles de servidor. Alguma peculiaridades:

  • Todo login criado no SQL Server, por padrão está vinculado à role public;
  • Das roles de servidor padrão (entenda-se excluindo as roles de servidor customizadas), é a única server role que pode ter as permissões controladas através de GRANT, DENY e REVOKE;
  • É gerado em cada banco uma database role com o mesmo nome. Embora estejam estritamente relacionadas, não são a mesma coisa;

Qual a ideia afinal do public? Bem… Sabe o nosso direito de ser cidadão, independente de quem seja? Liberdade de ir e vir, liberdade de expressão, etc? Segue a mesma ideia. Os direitos (e restrições) valem pra todo mundo, exceto para os sysadmins (que não possuem nenhuma restrição). Public contém as instruções padrões para TODOS os logins que se autenticam na instância.


--> Cria um login sem direito algum
CREATE LOGIN NaoFazNada WITH PASSWORD='123', CHECK_POLICY=OFF

 

Acabamos de criar um login qualquer. Quais permissões ele possui? Até o momento nenhuma, exceto as automaticamente herdadas pelo public. Pra ficar mais claro ainda, vamos aos testes de laboratório. Logue com o usuário recém-criado e tente criar um base:


CREATE DATABASE pensaNumCaos

Obviamente, o esperado é…

Msg 262, Level 14, State 1, Line 1
CREATE DATABASE permission denied in database ‘master’.

Agora, logado em seu usuário que seja sysadmin ou que tenha privilégios suficientes para executar o comando abaixo, tire a prova…


--> Dá direito de criação para public (ou seja, qualquer um)
GRANT CREATE ANY DATABASE TO PUBLIC

Com o login NaoFazNada, tente criar a base novamente…

 

Observações de public

Embora conceder permissões para public sempre seja o caminho mais fácil, evite isso sempre que possível. É a mesma coisa de, na preguiça, conceder acesso para Everyone em determinado diretório no Windows Server… Resolver resolve, mas abre a porta pra qualquer um entrar. Será que isso pode causar dor de cabeça futuramente?

E mais algumas enquanto database-role…

Existe outro cuidado bastante peculiar quando falamos de public enquanto DATABASE-ROLE (É importante distinguir uma da outra). É comum encontrarmos por aí solicitações, por exemplo, de conceder permissão para executar functions de tratamento de caracteres para o public em determinado banco. Esse public  como database-role na verdade contêm as definições que TODOS os usuários com acesso em determinada base.

Não é foco desta postagem granular a atuação do public ao nível de banco, mas, sobre tal tipo de solicitação bastante recorrente, só tenho a dizer que, embora facilite demais a vida de quem utiliza essas funções, sempre se deve levar em conta o permissionamento mínimo, logo…

Futuramente, vou criar um post sobre o tema, mas enquanto isso…

Por fim..

A conclusão é: nunca confie demais algo ao público, você pode não saber quem está lá.

Fique à vontade para acrescentar algo nos comentários abaixo, caso queira. Nos vemos por aí.

,

Leave a Reply

Your email address will not be published. Required fields are marked *