«Référence non résolue à l'utilisateur» après l'importation en tant que projet VS DB

11

Je viens d'importer une base de données de production SQL Server 2008r2 existante dans un projet de base de données VS 2013.

Je reçois maintenant un certain nombre d'erreurs dans le sens de

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

Je n'ai pas vraiment besoin de mon projet VS DB pour gérer les utilisateurs, mais je crains qu'il essaie de les supprimer lors du déploiement s'ils n'étaient pas là.

Les fichiers eux-mêmes sont générés comme

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

ou

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

Le marqueur d'erreur montre que c'est spécifiquement pour la connexion . Comme il s'agit d'un objet au niveau du système, je peux comprendre qu'il est en dehors de la portée du projet db.

Est-il préférable que je les change tous

CREATE USER [mydbuser] WITHOUT LOGIN;

ou ajouter la CREATE LOGINclause au début de chaque fichier?

La suppression de la référence de connexion semble être plus simple et la suppression totale des utilisateurs serait la plus simple.

Je veux m'assurer que j'utilise l'outil comme il était prévu. Y aura-t-il des problèmes lors de la republication de ceux-ci de retour à la production? Quelle est la procédure appropriée pour ajouter un utilisateur / login via un projet?

Greg
la source
1
Je viens de remarquer que cela ne s'est pas produit pour tous les utilisateurs. Ils se trouvaient tous être des utilisateurs SQL et certains étaient désactivés (bien que d'autres ne l'étaient pas). Des idées par où commencer à chercher des différences?
Greg

Réponses:

9

Le moyen le plus simple est de ne pas gérer les utilisateurs via ssdt (la plupart des gens ne le font pas). Vous pouvez donc simplement les supprimer et ne pas déployer de connexions ou d'utilisateurs.

Il existe trois façons:

  • les nouvelles options pour ignorer les utilisateurs / connexions
  • écrire un contributeur de déploiement pour les retirer
  • utiliser mon contributeur de déploiement http://agilesqlclub.Codeplex.com

Ed

Ed Elliott
la source
Votre lien ici a également été très utile: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Greg
1
Pourriez-vous s'il vous plaît élaborer sur "les nouvelles options pour ignorer les utilisateurs / connexions"?
Yawar Murtaza
@YawarMurtaza dba.stackexchange.com/a/150092/117350
Douglas Gaskell
9

J'ai eu le même problème et j'ai trouvé ce lien

L'utilisateur a une référence non résolue à la connexion

Si vous créez des connexions spécifiques à une application (ce que vous devriez), vous rencontrerez cette erreur lors de la création de votre solution. Pour corriger cette erreur, sélectionnez inclure les types d'objet «sans étendue d'application» dans les options (icône d'engrenage en haut) lorsque vous effectuez une comparaison de schéma (cliquez avec le bouton droit sur le projet de base de données pour trouver la comparaison de schéma). Vous pouvez ensuite simplement importer les connexions dans votre projet normal et les références sont triées. Remarque: Si vous cliquez sur l'onglet Types d'objet et qu'il ferme la boîte de dialogue (ce qu'il a fait pour moi), utilisez plutôt la touche de tabulation jusqu'à ce que la portée de l'application soit mise en surbrillance, puis appuyez sur la flèche vers le bas pour mettre en évidence la portée sans application et appuyez sur la touche barre d'espace. Vous devriez maintenant pouvoir cliquer sur OK et voir les connexions.

SpeedOfSpin
la source
1
Merci pour votre réponse! Pourriez-vous fournir un contexte pour ces instructions? Par exemple, qu'est-ce que la comparaison de schémas a à voir avec cette erreur? Où se trouve l'onglet Types d'objets? Où appuyez-vous sur la touche de tabulation? Etc.
Jake
Sûr. Fondamentalement, dans VS2013 / 2015, vous avez votre projet de base de données qui contient tout votre SQL pour la solution que vous utilisez. Si vous faites un clic droit sur ce projet de base de données et cliquez sur "Schema Compare", vous pouvez comparer ce qui est dans votre projet avec ce qui est dans votre base de données. En haut de la fenêtre qui apparaît, une icône Cog pour les paramètres. Vous ne pouvez pas cliquer sur la case à cocher "sans application" avec votre souris pour une raison quelconque, utilisez donc la touche de tabulation à la place. Appuyez une fois sur la touche de tabulation, puis sur la touche fléchée vers le bas, puis sur la barre d'espace pour la sélectionner. J'espère que cela pourra aider.
SpeedOfSpin
1

Apparemment, ce problème se produit également sur les projets de base de données VS2017.

J'ai réussi à le résoudre en créant d'abord le login puis en créant l'utilisateur.

    -- 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"
reas
la source