One other thing to note is that there are a few alternatives which tend to be a bit more feasible to implement (and sustain). Namely, using a single campaign key but leverage an encoding scheme for the key/id rather than a randomly generated one. That way it can be parsed at collection time and every permutation doesn't have to be predefined in a dataset ahead of time. Then end users can still self-service link creation with a template provided to them (they input the usual utm parameters they're used to, but it spits out a link with a single encoded key).
Then on the receiving end, you use lookup tables or functions to decode the various aspects of the key, and explicitly define the relevant utm parameters in the call to Google Analytics (which it natively supports as an alternative to implicitly sniffing them from the URL string). Or if your encoding scheme is simple enough, you can send the key directly to GA and use Advanced custom filters[1] to decode the utm parameters there.
[1] https://support.google.com/analytics/answer/1033162?hl=en