Есть ли способ исправить потерянного пользователя в базе данных SQL 2005/2008 с использованием SQL SMO?Фиксирование осиротевших пользователей SQL SMO?
Вы можете найти осиротевшие пользователь относительно легко перечисляя через пользователь и ищу пустой 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;
}
К сожалению, исправить это не так просто, как установку User.Login
свойства входа соответствия сервера имя. У User.Login
есть сеттер, но я не знаю, как можно распространить его обратно на сервер. Он появляется только при использовании нового User
.
Я подумал о том, чтобы удалить пользователя из базы данных и повторно привязать сервер к базе данных, но с этим возникают дополнительные осложнения. Осложнения, такие как переназначение схем, ролей по умолчанию, а также если у них есть схема в базе данных, в которой вы находитесь, возникают дополнительные проблемы при каскаде этих изменений. Этого достаточно, чтобы сделать вы хотите, чтобы встроить в SQL и сделать с ней:
ServerConnection server = new ServerConnection("MyBox\SQLInstance");
Database db = server.Databases["MyDatabase"];
db.ExecuteNonQuery("sp_change_users_login 'auto_fix', 'ORPHANED_USERNAME'")
Однако, я бы предпочел, чтобы не встраивать вызов процедуры системы сохраняется.
Любые предложения?
Это в значительной степени то, что я заключил из ответа gbn и комментариев до сих пор. Это похоже на кражу ответа, но, насколько я могу судить, это правильный ответ. – Yoopergeek
Просто вверху, документация MSDN, http://msdn.microsoft.com/en-us/library/ms174378.aspx, говорится, что этот метод будет удален в будущих версиях SQL-сервера и пользователю Alter User, который, как Yoopergeek заявил ниже не работает с SMO. – Despertar