Estou usando a seguinte consulta para verificar se o esquema padrão está definido como dbo
.
SELECT DB_NAME() AS [database]
,[name]
,[type_desc]
,[default_schema_name]
FROM [sys].[database_principals]
WHERE [type] IN ('U', 'G')
--AND [default_schema_name] <> 'dbo';
Se não for definido como dbo
e alguém criar um objeto sem especificar um identificador de esquema, um novo schema
será criado com suas credenciais do Windows.
Então, eu queria escrever um script para verificar (em determinado período de tempo) se tudo está correto (porque novas máquinas e bancos de dados são restaurados/criados diariamente).
O problema com o script acima é que consigo ver que o esquema padrão do meu usuário não é dbo
, mas quando executado com outra conta, meu usuário não está listado.
Suponho que seja por causa do WINDOWS_GROUP
qual todos somos membros, então preciso verificar suas configurações, mas sempre obter NULL
valor para grupos.
O
default schema
de agroup
pode ser verificado com seu script.Quando este script é exibido
NULL
para um grupo, significa quedefault schema
não foi definido explicitamente para este grupo.Isso significa que isso
account
não é mapeado explicitamente para esse banco de dados, mas é membro de umWindows groups
ou mais minérios mapeados.A regra aqui é:
Quando você vê isso
isso significa que esse usuário o usuário é membro de um ou mais grupos do Windows e nenhum desses grupos possui um esquema padrão.
Se você quiser evitar essa "criação de esquema", você não deve deixar users-
Windows groups
semdefault schema
, apenas atribuadbo
o esquema adbo
:Para verificar os grupos de usuários mapeados para este banco de dados execute o seguinte código:
Você pode filtrar aqui,
type = 'WINDOWS GROUP'
mas quando não filtrado, você vê todos os tokens, portanto, se você não vê a conta do Windows como está, é porque ela não foi mapeada explicitamente para esse banco de dados e chega ao banco de dados por meio de grupo(s) do WindowsATUALIZAR
Esse comportamento é chamado
implicit schema creation
e está documentado aqui: CREATE SCHEMA (Transact-SQL)