Your trait says that reference returned by db() outlives self, and therefore is never a value stored in self (it doesn't state that explicitly, but in practice there's no other logical possibility).
However, your implementation returns self.db, which is a reference to an object that could be destroyed together with self.
You need to make pooled connection live longer than auth context, ie. store it elsewhere in a more permanent place. OR make db() not promise such a long lifetime unrelated to self in the trait.
because <'a> on the trait means it's something that had to exist before self has been created, but then you say that lifetime is also as short as lifetime of self, so in the end you gained nothing.
Since Self = AuthContext<'b>, the fact that we have &'a self implies that 'b : 'a. With your added 'a : 'b, that means that 'a and 'b are equal, so I'd remove 'b altogether for simplicity:
Note, by the way, that your borrow will thus last for the whole lifetime of the object (even if you drop result), which means you won't be able to ever mutate it afterwards; thus it does look to me like this is still not what you'd want, c.f.@kornel's remarks