Y a-t-il un moyen de corriger un utilisateur orphelin dans une base de données SQL 2005/2008 à l'aide de SQL SMO?
Vous pouvez trouver des utilisateurs orphelins relativement facilement en énumérant les utilisateurs et en recherchant un utilisateur vide.login Propriété: P> ServerConnection server = new ServerConnection("MyBox\SQLInstance");
Database db = server.Databases["MyDatabase"];
db.ExecuteNonQuery("sp_change_users_login 'auto_fix', 'ORPHANED_USERNAME'")
3 Réponses :
de t-sql ALTER LOGIN ... avec Connexion = ... p>
LOGIN = NOME LOGIN_NAME P>
repère un utilisateur à une autre connexion en modifiant l'utilisateur Identifiant de sécurité (SID) pour correspondre à la SID de login. p> blockQuote>
Maintenant, je ne l'ai pas essayé parce que je synchrai des Sids entre serveurs (et utilisez rarement des connexions SQL ces jours-ci) P>
Cependant, cette carte du User.alter Method . P>
Alors, ça pourrait marcher ... p>
Si cela n'aime pas utiliser le même identifiant, je pense que vous pouvez mapper dans une autre connexion et retour. P>
Excellente suggestion. Je ne sais pas comment j'ai manqué la méthode utilisateur.alter (). Cependant, il semble que la définition de l'utilisateur.login, puis appelant l'utilisateur.alter () n'est pas autorisé. Il jette une exception échouée: "ALTER a échoué pour l'utilisateur" myorphaneDUser "." La défaillance accrue a une exception interne de type SmoException qui indique: "La modification de la propriété de connexion de l'objet utilisateur n'est pas autorisée. Vous devez déposer et recréer l'objet avec la propriété souhaitée." Peut-être qu'il n'est tout simplement pas possible de désexpérer l'API SMO?
juste faire smo.database.executenononceery ("Alter utilisateur FOO avec LOGIN LOBOGIN").
C'est ce que j'espérais à l'origine éviter - en revitalisant SQL à la base de données. Mais c'est la route que j'ai fini par prendre. Cependant, j'utilise la procédure stockée «sp_change_users_login» que j'ai mentionné ma question.
Malheureusement, le SMO n'est pas bien meilleur que SQL-DMO pour fournir des méthodes Devraient être disponibles sur strong> être disponible. Vous devrez utiliser SQL en ligne SQL: db.ExecuteNonQuery("sp_change_users_login 'update_one', 'ORPHANED_USERNAME', 'ORPHANED_USERNAME'")
C'est à peu près ce que je concluais de la réponse de GBN et des commentaires jusqu'à présent. Cela ressemble à une réponse, mais, autant que je sache, c'est la bonne réponse.
Juste une tête de tête, la documentation MSDN, msdn.microsoft.com/en-us /Library/ms174378.aspx , stipule que cette méthode sera supprimée dans les versions futures de SQL Server et à l'utilisateur L'utilisateur modificateur, que, comme Yoopergec, indiqué ci-dessous ne fonctionne pas avec SMO.
Pour moi, cette syntaxe a fonctionné bien je l'ai trouvé ici: http://dbadiaries.com/utentur-sp_change_users_login-a-fix-sql-server-orphand-utilisateurs#sthash.q85ewer9.dpuf < / p> p>