Casos do Dia a Dia – Default Schema não funciona?

Fala pessoal,

Nesse post vou compartilhar mais um Caso do Dia a Dia, dessa vez mostrando alguns casos em que o default schema não funciona.


Casos do Dia a Dia – Default Schema:

Fiz um outro post em 2020 explicando como o Default Schema pode ser utilizado e mostrei alguns exemplos. Esse post ficou bem legal, recomendo a leitura!

https://luizlima.net/casos-do-dia-a-dia-default-schema-e-default-database/

No post de hoje, vou mostrar alguns casos em que o default schema não vai funcionar, mesmo que aparentemente a configuração esteja correta.

Primeiro, criei uma database chamada “Test_Schema” e um schema chamado “test”.

Depois criei um usuário no Windows chamado “NODE1\test” e liberei o acesso “db_owner” na database “Test_Schema” e alterei o Default Schema para “test”.

OBS: O nome da minha máquina de teste é NODE1.

Por fim, conectei com esse usuário e executei o script abaixo para criar uma tabela, inserir um registro e fazer um SELECT, para mostrar que até aqui está tudo OK. Repare que eu não especifiquei o default schema no script e mesmo assim a tabela foi criada como “test.test_schema”, pois utilizou o default schema do usuário.

Agora vou mostrar dois casos em que o default schema vai “parar de funcionar”, mesmo estando configurado para o usuário “NODE1\test”. Inclusive, resolvi criar esse post após entender esse caso atendendo um cliente aqui na Power Tuning, onde ele informou que alguns usuários estavam funcionando corretamente e outros não.


Caso 1 – Server Role “sysadmin”:

Agora vou colocar o usuário “NODE1\test” com a permissão “sysadmin”. Com isso, o default schema vai “parar de funcionar”.

Essa questão do “sysadmin” já está documentada pela Microsoft:

Referência: https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-ver16&redirectedfrom=MSDN

“The value of DEFAULT_SCHEMA is ignored if the user is a member of the sysadmin fixed server role. All members of the sysadmin fixed server role have a default schema of dbo.”

Segue abaixo o erro:

Msg 208, Level 16, State 1, Line 3

Invalid object name ‘test_schema’.

Portanto, caso o usuário fique com a permissão de “sysadmin”, será necessário incluir SEMPRE o schema nos objetos, pois o default schema será ignorado, conforme informado na documentação da Microsoft.


Caso 2 – Grupos do Windows / AD

Agora vamos para o segundo cenário, que é o mesmo que tive com um cliente aqui na Power Tuning. Nesse caso, exclui o login do usuário “NODE1\test” do SQL Server e criei dois grupos no Windows e no SQL Server:

  • NODE1\SQL_DEV: possui acesso de “db_owner” na database “Test_Schema”.
  • NODE1\SQL_ADM: possui acesso de “sysadmin” na instância.

Portanto, agora o usuário “Node1\test” vai herdar as permissões do grupo que ele pertencer. Nesse caso, inicialmente inclui ele apenas no grupo “NODE1\SQL_DEV”.

Com isso, ele vai conseguir utilizar normalmente o default schema sem precisar informar no script.

Agora, vou incluir esse usuário em mais um grupo, dessa vez no grupo “NODE1\SQL_ADM”.

OBS: Será necessário fazer logoff e logar novamente no Windows com o usuário “NODE1\test” para utilizar as novas permissões, conforme informado no print abaixo.

Por fim, ao fazer o SELECT novamente vamos ter o ERRO, pois agora ele faz parte de um grupo que possui a permissão de “sysadmin” e o default schema será ignorado.

Cliente: “Luiz, o default schema está configurado, mas tem usuários que estão funcionando e outros não! Pode me ajudar?”

Nesse caso, validamos que o motivo de não funcionar para alguns usuários era porque eles estavam em mais de um grupo no AD e algum desses grupos possuía a permissão de “syadmin”, fazendo com que o default schema fosse ignorado. Entendido isso, o cliente removeu o usuário do grupo do AD que possuía essa permissão e depois disso o default schema voltou a funcionar corretamente!

Portanto, caso você tenha algum problema parecido, é bem provável que possa estar relacionado com essa permissão de sysadmin fazendo o default schema ser ignorado. Fica a dica!


Espero que tenha gostado e que isso também possa ser útil no seu dia a dia. Até o próximo post!

Me siga no LinkedIn e YouTube para ficar por dentro das novidades.

Abraço,

Luiz Vitor França Lima

Consultor SQL Server

Deixe uma resposta