.. _resolver_migration: .. index:: UserIdResolver, migration, token UserIdResolver migration ---------------------------- Starting with LinOTP 2.8.1 it is possible to migrate token assigned to users from one UserIdResolver to another one. This can be useful for the following situations: * one large UserIdResolver has to be split up into smaller UserIdResolver units * a number of UserIdResolver are to be united into a big one * To change the type of UserIdResolver. E.g. users stored in a SQL database are now hosted in a LDAP * The users stay in the same user directory but the ``UID Type`` needs to be changed The migration works as this: You need an UserIdResolver (or more than one) which contains the same users (means: the user names must be the same) as the original UserIdResolver. The migration from UserIdResolverA to UserIdResolverB transfers all token information for users which exist in UserIdResolverA to the same users in UserIdResolverB. So after the transition you still have the same user names with the same tokens assigned to residing in a new UserIdResolver. Only users which exist in the destination UserIdresolver are migrated. This allowes to split up a large UserIdResolver. **The migrations procedure is like this:** | .. image:: images/migrate_resolver_dropdown.png | Choose the two UserIdResolvers the token should be migrated from one to another. Please keep in mind that the migration is only be done for users existing in both UserIdResolver with the same names: | .. image:: images/migrate_resolver_popup.png | Finally the number of transferred tokens is displayed: | .. image:: images/migrate_resolver_success_popup.png | **Here an example how to split up a large UserIdResolver:** *UserIdResolverA* contains the token information of following users: user1, user2, user3, user4, user5, user6, user7, user8, user9, user10 | *UserIDResolverB* contains tokens of: user1, user2, user3 | *UserIdResolverC* contains tokens of: user4, user5, user6, user7 | **Now the migration starts:** | *UserIdResolverA* --> UserIdResolverB | *UserIdResolverA* contains the following token information for the following users: user4, user5, user6, user7, user8, user9, user10 | *UserIdResolverB* now contains the token information for: user1, user2, user3 | **Second migration:** | *UserIdResolverA* --> UserIdResolverC | *UserIdResolverA* contains the following token information for the following users: user8, user9, user10 | *UserIdResolverB* now contains the token information for: user1, user2, user3 | *UserIdResolverC* now contains the token information for: user4, user5, user6, user7