“Referência não resolvida ao usuário” após importar como um projeto do VS DB


11

Acabei de importar um banco de dados de produção existente do SQL Server 2008r2 para um projeto de banco de dados do VS 2013.

Agora, recebo vários erros ao longo das linhas de

Error       SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].

Eu realmente não preciso do meu projeto do VS DB para gerenciar usuários, mas estou preocupado que ele tente removê-los na implantação se eles não estiverem lá.

Os próprios arquivos são gerados como

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

ou

CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];

O marcador de erro mostra que é especificamente para o login . Como esse é um objeto no nível do sistema, posso entender que ele está fora do escopo do projeto db.

É preferível que eu mude todos eles para

CREATE USER [mydbuser] WITHOUT LOGIN;

ou adicione a CREATE LOGINcláusula ao início de cada arquivo?

A remoção da referência de login parece ser mais simples e a remoção total dos usuários seria a mais simples.

Quero ter certeza de que estou usando a ferramenta do jeito que ela foi planejada. Haverá algum problema na republicação de algum deles de volta à produção? Qual é o procedimento adequado para adicionar um usuário / login através de um projeto?


11
Acabei de perceber que isso não aconteceu para todos os usuários. Todos eles eram usuários de SQL, e alguns estavam desativados (embora outros não). Alguma idéia por onde começar a procurar diferenças?
Greg

Respostas:


9

A maneira mais fácil é não gerenciar usuários através do ssdt (a maioria das pessoas não). Assim, você pode removê-los e não implantar logins ou usuários.

Existem três maneiras:

  • as novas opções para ignorar usuários / logins
  • escreva um colaborador de implantação para retirá-los
  • usar meu colaborador de implantação http://agilesqlclub.Codeplex.com

Ed


Seu link aqui também foi bastante útil: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Greg

11
Você poderia elaborar "as novas opções para ignorar usuários / logins"?
Yawar Murtaza


9

Eu tive o mesmo problema e encontrei este link

O usuário tem uma referência não resolvida para o Login

Se você criar logins específicos do aplicativo (o que você deve), encontrará esse erro ao tentar criar sua solução. Para corrigir esse erro, selecione incluir tipos de objeto 'Não abrangidos pelo aplicativo' nas opções (ícone de engrenagem na parte superior) ao fazer uma comparação de esquema (clique com o botão direito do mouse no projeto de banco de dados para localizar Comparação de Esquema). Você pode apenas importar os logins para o seu projeto regular e as referências são classificadas. Nota: Se você clicar na guia Tipos de Objeto e fechar a caixa de diálogo (o que fez para mim), use a tecla Tab até que o Escopo do aplicativo seja realçado e pressione a seta para baixo para destacar Não escopo do aplicativo e pressione o botão barra de espaço. Agora você deve poder clicar em OK e ver os logins.


11
Obrigado pela resposta! Você poderia fornecer algum contexto para essas instruções? Por exemplo, o que a comparação de esquema tem a ver com esse erro? Onde está a guia Tipos de objeto? Onde você pressiona a tecla Tab? Etc.
Jake

Certo. Basicamente, no VS2013 / 2015, você tem seu projeto de banco de dados que contém todo o seu SQL para a solução que está usando. Se você clicar com o botão direito do mouse nesse projeto de banco de dados e clicar em "Comparação de Esquema", poderá comparar o que está no seu projeto com o que está no seu banco de dados. Na parte superior da janela exibida, há um ícone de Cog para as configurações. Você não pode clicar na caixa de seleção "Não escopo do aplicativo" com o mouse por algum motivo; portanto, use a tecla tab. Pressione a tecla Tab uma vez, depois a seta para baixo e a barra de espaço para selecioná-la. Espero que ajude.
SpeedOfSpin

1

Aparentemente, esse problema ainda está ocorrendo nos projetos de banco de dados do VS2017 também.

Eu consegui resolvê-lo criando primeiro o login e depois crie o usuário.

    -- Windows Account
    CREATE LOGIN [Domain\Username]
    FROM WINDOWS WITH DEFAULT_LANGUAGE = [us_english];

    GO

    CREATE USER [Domain\Username] FOR LOGIN [Domain\Username];
    GO

    -- Sql Acccount

    CREATE LOGIN [sql_account] WITH PASSWORD = 'Ch@ngeth1spA$swurD'
    GO

    CREATE USER [sql_account]
    FROM LOGIN [sql_account]
    WITH DEFAULT_SCHEMA = dbo

    GO


    -- Then set the sql file Build Action to "Build"
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.