O esquema padrão do SQL Server 2008 não está sendo respeitado?


9

Acabamos de copiar um banco de dados SQL 2008 para outro servidor, para fins de teste. O usuário típico que efetua login usa alguns objetos em um determinado esquema. Digamos que seja usuário fooe esquema bar.

fooO esquema padrão está barno nível da instância e do banco de dados. No entanto, ao fooefetuar login, ele não pode encontrar nenhum objeto no baresquema sem usar um nome completo.

Por que o esquema padrão não funcionaria aqui?

Respostas:


13

Tem direitos sysadmin de usuário foo no SQL Server? Porque, se houver, qualquer usuário sysadmin terá, por padrão, o esquema dbo atribuído , independentemente do que está definido nas propriedades do Usuário para um banco de dados específico.

Portanto, para ter um esquema padrão, o usuário precisa ter funções de banco de dados como db_owner, db_datawriter e assim por diante, em vez da função de servidor sysadmin.

Diga-me se não é o seu caso.


1
Você é um deus e eu me curvo ao seu conhecimento, fiquei perplexo até me deparar com isso!
Jens

1

Outro cenário em que esse problema pode ocorrer (SQL 2008 R2) ...

Eu tinha um usuário vinculado a um logon de autenticação SQL, que estava tentando associar a um esquema existente. O Login não tinha direitos de administrador de sistema , portanto, a solução acima não ajudou.

Acabei descobrindo que o banco de dados ainda estava configurado no modo de compatibilidade com o SQL 2000. A mudança para o SQL 2005 resolveu o problema.


Estranhamente, eu parecem estar a ter este problema (usuário vinculado a um SQL autenticação de login, que eu estava tentando associar com um esquema existente), exceto o meu nível de compatibilidade é 'SQL Server 2016 (130)'
tbone

0

Ele assumirá que o esquema padrão no novo servidor é dbo; Se o esquema não tiver sido copiado com o banco de dados.

Não é a solução, mas talvez isso possa ajudar, dando uma olhada no artigo do msdn. http://msdn.microsoft.com/en-us/library/dd283095.aspx


Configuramos o esquema padrão para fooo novo servidor. É definido como barno nível do usuário da instância e do usuário do banco de dados.
John Cromartie
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.