Impossible d'ouvrir la base de données par défaut de l'utilisateur. Échec de la connexion. SQL 2005

StackOverflow https://stackoverflow.com/questions/176851

  •  05-07-2019
  •  | 
  •  

Question

J'ai emporté avec moi une copie d'une base de données pour pouvoir effectuer des tests. Cependant, lorsque j'essaie d'exécuter une procédure stockée, je ne parviens pas à ouvrir la base de données utilisateur par défaut. Échec de la connexion.

J'ai vérifié, vérifié et vérifié Je peux ouvrir des tables dans les bases de données en me connectant à SQL Management Studio et accéder à la base de données par défaut ainsi qu'à d'autres bases de données.

Peut-être un utilisateur corrompu était-il de SQL 2000 au travail à 2005 à la maison

Était-ce utile?

La solution

J'ai déplacé 8 bases de données de SQL Server 2000 vers SQL Server 2005 et sur un autre ordinateur. Normalement, j'aime bien savoir ce que font les processus stockés. J'ai creusé un peu et découvert que la commande réelle est ALTER USER .

C'est ce que tout le monde a dit. Les utilisateurs sont dissociés lorsque vous détachez et reconnectez des bases de données dans SQL Server 2005. Je trouve ce comportement très gênant car je ne l'ai pas vu dans SQL Server 2000.

Le code T-SQL permettant de résoudre ce problème se présente comme suit:

USE AdventureWorks;
ALTER USER Mary5 WITH NAME = Mary51;
GO

Cet article MSDN en dit un peu plus long sur ce sujet:

http://msdn.microsoft.com/en-us/library /ms176060.aspx

Autres conseils

EDIT: La mienne datait de 2005 à 2005. Vous ne savez pas si cela fonctionnera pour votre cas ...

J'ai eu un problème similaire. Pour moi, quand je détache ou crée une sauvegarde, puis que je recrée la base de données, la connexion avec les utilisateurs sera perdue. L'utilisateur que j'utilise est toujours présent sous Connexion, mais la connexion échouera.

Dans mon cas, j’ai pu me connecter en supprimant l’utilisateur sous la base de données - > sécurité - > utilisateurs, pas l'utilisateur qui se trouve dans la liste des utilisateurs du serveur racine.

Accédez ensuite à la liste des utilisateurs racine et réaffectez le mappage de la base de données ou créez un utilisateur s'il n'en existe pas.

J'espère que cela vous aidera.

Ceci est un coup dans le noir, alors pardonnez-moi si cela vous fait perdre votre temps.

Une autre affiche a indiqué qu'un utilisateur donné possède un identifiant pour le système et un identifiant pour toute base de données donnée. Cela peut être prouvé en comparant les identifiants entre master.sys.syslogins et dbname.sys.users pour le même nom d'utilisateur / login. Si vous restaurez une sauvegarde à partir d'un autre serveur SQL disposant de sa propre copie des bases de données maîtres, les sids ne correspondront pas.

SQL Server 2005 ne permet pas l’édition directe de tables système sans trop de difficultés. Pour vous aider à résoudre ces problèmes, ils ont ajouté une procédure stockée pour vous aider à les résoudre:

USE dbName GO

sp_change_users_login @ Action = 'Signaler'

Cela vous montrera ce que les utilisateurs ont une entrée dbName.sys.users, mais pas master.sys.syslogins - ou lorsque le nom existe dans les deux, mais diffère par les sids.

Si cela indique que votre utilisateur est désynchronisé, la procédure comporte également un mode permettant de modifier la liaison:

USE dbName ALLER sp_change_users_login 'Update_One', 'userNameInDbUsers', 'UserNameInLogins'

Si le déséquilibre latent n’est pas votre problème, j’ai également vu des problèmes avec Sql Server 2005. Le gui est particulièrement bogué. Pour résoudre un problème comme celui-ci, j'ai dû supprimer l'entrée syslogins (via la commande gui ou DROP LOGIN)

sp_change_users_login: http://msdn.microsoft. com / fr-us / library / ms174378 (SQL.90) .aspx

Abandonner la syntaxe de connexion: http: // msdn. microsoft.com/fr-fr/library/ms188012(SQL.90).aspx

J'ai eu le même problème et je l'ai corrigé avec:

C:\> sqlcmd -E -d master
1> ALTER LOGIN ***** WITH DEFAULT_DATABASE=master
2> GO

***** est votre nom d'utilisateur.

(Si vous utilisez un nom d'utilisateur de domaine: [*****] )

Modifier:

***** pourrait être:

  • nom d'utilisateur si l'utilisateur est local
  • [nom d'utilisateur] si l'utilisateur appartient au domaine actuel
  • [domaine \ nom d'utilisateur] si l'utilisateur appartient à un autre domaine (non testé)

Je viens de résoudre ce problème. Ma base de données par défaut était AdventureWorks2008. En tant qu'administrateur, j'ai donc supprimé mon identifiant de connexion du serveur. Ensuite, lancez ce qui suit pour recréer mon utilisateur

CREATE LOGIN [NT\mylogin] FROM WINDOWS WITH DEFAULT_DATABASE=[Master], DEFAULT_LANGUAGE=[us_english]
GO

Je crois comprendre que les connexions sont stockées sur le serveur, alors qu'un utilisateur correspond à l'attribution d'un identifiant de connexion à une base de données (corrigez-moi si je me trompe).

Par conséquent, vous ne pouvez pas déplacer les connexions en détachant / reliant des bases de données. La solution serait de créer une base de données utilisateur connectant une connexion (valide) à la base copiée.

ALTER LOGIN ne fonctionne que dans SQL 2005 et versions supérieures.

Pour modifier la base de données par défaut d'un utilisateur 2000, utilisez

EXEC master.dbo.sp_defaultdb @loginname = N'BuiltIn\Administrators', @defdb = N'master'

J'ai découvert cela à la dure lorsque j'ai défini le compte intrinsin \ administrators sur la base de données de l'application par défaut. La connexion est alors hors connexion et je ne pouvais plus me connecter. À l’aide de Management Studio, vous pouvez définir l’option de connexion sur maître, mais vous devez exécuter la commande ci-dessus avant toute autre opération, sauf si vous obtenez une erreur de la base de données par défaut.

Comme cela a été mentionné précédemment, le mappage de connexion à ce compte d'utilisateur a probablement été dissocié lors du déplacement. Ou, vous l'avez déplacé sans créer les informations d'identification attendues. Dans ce cas, vous devez d'abord créer le login ...

S'il s'agissait d'un jeu de sauvegarde et que vous le restauriez, il n'y a aucun moyen (à ma connaissance) de réassocier la connexion à l'utilisateur via l'interface utilisateur de gestion. Au lieu de cela, vous devez utiliser:

exec sp_change_users_login update_one, 'user', 'login'

pour qu'il récupère le lien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top