This has been asked before.
If you do not want to give the user Administration access there is no other access that will let you have what you want.
Neither can you edit the rights out of the box.
One of the proposals was to create a custom object where the user can pick up the right to be given eg from a list and then to whom eg user or group.
Then as Navjoshi writes a process which does the assignment and also writes a log.
Search for the discussions on this