Le serveur principal n'est pas en mesure d'accéder à la base de données dans le contexte de sécurité actuel dans SQL Server MS 2012
J'essaie d'accéder à mon serveur d'hébergement de la base de données via SQL Server Management Studio, tout jusqu'à la connexion est bien, mais lorsque j'utilise la commande use myDatabase
il me donne cette erreur:
The server principal "****" is not able to access the database "****" under the current security context.
J'ai cherché sur et les fournisseurs de services d'hébergement a répertorié cette résoudre le problème.
Mais ce n'est pas de travail pour moi, probablement parce que c'est pour SQL Server Management Studio 2008, mais je suis à l'aide de SQL Server Management Studio 2012.
Cela peut-il être un problème? Et si oui que quelqu'un peut me dire son alternative dans SSMS 2012?
- L'hébergement des fournisseurs de services? Sommes-nous parler dédié ou partagé? Si c'est un serveur mutualisé, je recommande fortement de contacter votre fournisseur d'hébergement pour de l'aide. SQL dans un environnement d'hébergement partagé est notoirement buggy et problématique. Il n'a rien à voir avec le produit, mais la politique que les fournisseurs d'hébergement s'appliquent au serveur(s). Chaque société d'hébergement a sa propre façon de tirer parti de SQL semble-t-il.
Vous devez vous connecter pour publier un commentaire.
Vérifier pour voir si votre utilisateur est mappé à la DB vous essayez d'ouvrir une session dans.
Nous avons eu la même erreur déploiement d'un rapport de SSRS dans notre environnement de PROD. Il a été constaté que le problème pourrait même être reproduites avec une instruction “use”. La solution a été de re-synchronisation de l'utilisateur GUID compte de référence avec la base de données en question (c'est à dire, à l'aide de "sp_change_users_login" comme vous le feriez après la restauration de la base de données). Un stock (curseur driven) script pour re-synchroniser tous les comptes est joint:
J'ai passé un bon moment de lutte avec ce problème et puis j'ai réalisé que je faisais une simple erreur dans le fait que j'avais oublié de base de données particulier, j'ai été le ciblage de ma connexion. J'ai été en utilisant le standard de connexion SQL Server fenêtre pour saisir les informations d'identification:
J'ai eu à vérifier la Propriétés de la Connexion onglet pour vérifier que je a été de choisir la bonne base de données à laquelle se connecter. J'avais malencontreusement laissé les se Connecter à la base de données option ici mis à la une sélection à partir d'une session précédente. C'est pourquoi j'ai été incapable de se connecter à la base je pensée j'ai essayé de vous connecter.
Notez que vous devez cliquer sur le
Options >>
bouton pour que le Propriétés de la Connexion et d'autres onglets pour afficher jusqu'.Dans mon cas, le message a été causé par un synonyme qui inclus par inadvertance le nom de base de données dans le "nom d'objet". Quand j'ai restauré la base de données sous un nouveau nom, le synonyme encore souligné l'ancien nom DB. Puisque l'utilisateur n'a pas les autorisations dans le vieux DB, le message est apparu. Pour corriger, j'ai supprimé et recréé le synonyme sans qualification le nom de l'objet avec le nom de la base:
Cela a fonctionné pour moi:
Le problème peut être visualisée avec:
J'ai rencontré la même erreur lors de l'utilisation de Server Management Objects (SMO) dans vb.net (je suis sûr que c'est la même chose en C#)
Technophile Joe commentaire sur le post initial était un avertissement utile que dans d'hébergement partagé beaucoup de choses sont en cours. Il a fallu un peu de temps à comprendre, mais le code ci-dessous montre comment on a d'être très précis dans la manière dont ils accèdent à des bases de données SQL. Le " serveur principal...' erreur semblait montrer chaque fois que le SMO appels n'étaient pas précisément spécifiques dans l'environnement d'hébergement partagé.
Cette première section de code a été à l'encontre d'un local de SQL server Express et s'appuyait sur la simple Authentification Windows. Tous les codes utilisés dans ces exemples sont basés sur le SMO tutoriel par Robert Kanasz dans ce Projet de Code site internet de l'article:
Le code ci-dessus trouve le .les fichiers mdf pour chaque base de données sur les locaux SQLEXPRESS serveur juste bien parce que l'authentification est gérée par Windows et il est large à travers toutes les bases de données.
Dans le code suivant, il y a 2 sections de l'itération pour la .les fichiers mdf. Dans ce cas, seule la première itération la recherche d'un groupe de fichiers, et il ne trouve un seul fichier car la connexion est d'une seule base de données dans l'environnement d'hébergement partagé.
La deuxième itération, qui est une copie de l'itération qui a travaillé dessus, étouffe immédiatement parce que la façon dont il est écrit, il tente d'accéder à la 1ère base de données dans l'environnement partagé, ce qui n'est pas celle à laquelle l'ID Utilisateur/Mot de passe s'appliquent, de sorte que le SQL server renvoie une autorisation d'erreur dans la forme d'un " serveur principal...' erreur.
Dans cette deuxième itération de la boucle, le code se compile bien, mais parce que SMO n'était pas configuré pour accéder précisément à la base de données correcte avec la syntaxe précise, que la tentative échoue.
Que je suis en train d'apprendre SMO j'ai pensé à d'autres débutants pourraient apprécier de savoir il y a aussi une explication plus simple pour cette erreur - nous juste codé mal.
Nous avons eu la même erreur, même si l'utilisateur a été correctement mappé à la connexion.
Après avoir essayé de supprimer l'utilisateur, il a été découvert que quelques SPs contenus "à exécuter en tant que" cet utilisateur.
Le problème a été résolu par la chute de ceux SPs, à l'abandon de l'utilisateur, de recréer de l'utilisateur lié à la connexion, et la recréation de l'accord SPs.
Peut-être qu'il a obtenu dans cet état à partir de restauration à partir d'une sauvegarde (pendant un temps lorsque la connexion n'existe pas) ou en vrac schéma de synchronisation (si c'est possible de créer un SP avec exécuter même si l'utilisateur n'existe pas. Pourrait également être lié à cette réponse.
SQL Connexions sont définis au niveau du serveur, et doit être mappé à Utilisateurs dans des bases de données spécifiques.
Dans SSMS de l'explorateur d'objets, sous le serveur que vous voulez modifier, élargir de Sécurité > Connexions, puis double-cliquez sur l'utilisateur approprié qui permettra d'apporter de la "Connexion" Propriétés de la boîte de dialogue.
Sélectionnez Mappage de l'Utilisateur, qui vous fera découvrir toutes les bases de données sur le serveur, avec ceux ayant un mappage existant sélectionné. De là, vous pouvez sélectionner d'autres bases de données (et assurez-vous de sélectionner les rôles dans chaque base de données que l'utilisateur doit appartenir), puis cliquez sur OK pour ajouter des mappages.
Ces mappages peuvent être déconnectés après une restauration ou opération similaire. Dans ce cas, l'utilisateur peut encore exister dans la base de données mais n'est pas en fait associé à une connexion. Si cela se produit, vous pouvez exécuter les opérations suivantes pour restaurer la connexion:
Vous pouvez également supprimer le DB utilisateur et de le recréer à partir de la boîte de dialogue Propriétés de la Connexion, mais un rôle d'adhésions ou d'autres paramètres devront être recréés.