sql-server – 使用SQL SMO修复孤立用户?
发布时间:2020-12-12 06:40:13 所属栏目:MsSql教程 来源:网络整理
导读:有没有办法使用SQL SMO修复SQL 2005/2008数据库中的孤立用户? 通过枚举用户并查找空的User.Login属性,您可以相对轻松地找到孤立用户: using Microsoft.SqlServer.Management.Smo;using Microsoft.SqlServer.Management.Common; public static IListstring G
有没有办法使用SQL SMO修复SQL 2005/2008数据库中的孤立用户?
通过枚举用户并查找空的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确实有一个setter,但我不知道如何将它传播回服务器.它似乎仅在您创建新用户时可用. 我考虑从数据库中删除用户并将服务器登录重新绑定到数据库,但这会带来额外的复杂性.重复分配默认模式,角色等复杂问题,如果他们在数据库中拥有模式,那么当您通过这些更改进行级联时会遇到更多麻烦.这足以让你想要内联SQL并完成它: ServerConnection server = new ServerConnection("MyBoxSQLInstance"); Database db = server.Databases["MyDatabase"]; db.ExecuteNonQuery("sp_change_users_login 'auto_fix','ORPHANED_USERNAME'") 但是,我宁愿不内联对系统存储过程的调用. 有什么建议? 解决方法不幸的是,SMO并没有比SQL-DMO更好地提供应该可用的方法.您将不得不使用内联SQL:db.ExecuteNonQuery("sp_change_users_login 'auto_fix','ORPHANED_USERNAME'") 要么 db.ExecuteNonQuery("sp_change_users_login 'update_one','ORPHANED_USERNAME','ORPHANED_USERNAME'") (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |