¿Hay alguna manera de reparar a un usuario huérfano en una base de datos SQL 2005/2008 utilizando SQL SMO?¿Cómo reparar usuarios huérfanos con SQL SMO?
Usted puede encontrar usuarios huérfanos con relativa facilidad mediante la enumeración a través de los usuarios y en busca de una propiedad vacía User.Login
:
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
public static IList<string> GetOrphanedUsers(Server smoServer, string database) {
Database db = smoServer.Databases[database];
List<string> orphanedUsers = new List<string>();
foreach (User user in db.Users) {
if (!user.IsSystemObject && user.Login == string.Empty) {
orphanedUsers.Add(user.Name);
}
}
return orphanedUsers;
}
Desafortunadamente, la solución no es tan simple como establecer la propiedad User.Login
al inicio de sesión de servidor coincidente nombre. User.Login
tiene un colocador, pero no conozco una forma de propocionar eso de regreso al servidor. Parece solo utilizable cuando está creando un nuevo User
.
Consideré descartar al usuario de la base de datos y volver a vincular el inicio de sesión del servidor a la base de datos, pero eso conlleva complicaciones adicionales. Complicaciones como la reasignación de esquemas predeterminados, roles y si poseen un esquema en la base de datos que te proporcionará más problemas a medida que realices esos cambios. Es suficiente para hacer que usted desea inline del SQL y hacerse con él:
ServerConnection server = new ServerConnection("MyBox\SQLInstance");
Database db = server.Databases["MyDatabase"];
db.ExecuteNonQuery("sp_change_users_login 'auto_fix', 'ORPHANED_USERNAME'")
Sin embargo, preferiría no coloca en línea una llamada a un procedimiento almacenado del sistema.
¿Alguna sugerencia?
Esto es más o menos lo que estaba concluyendo a partir de la respuesta de Gbn, y los comentarios hasta el momento. Esto parece una respuesta-robo, pero, por lo que puedo decir, es la respuesta correcta. – Yoopergeek
Sólo una cara a cara, la documentación de MSDN, http://msdn.microsoft.com/en-us/library/ms174378.aspx, indica que este método se eliminará en las versiones futuras de SQL Server y para el usuario Alter User, que como Yoopergeek fijado a continuación no funciona con SMO. – Despertar