Unless you have other reasons for doing so, you do not need to give a user access to the back of CiviCRM to edit their own contact details.
In Drupal you can do this by setting any profile with the relevant fields to be Used For "View/Edit Drupal User Account". This profile will then appear on the Drupal account information page when that user is logged in and they can edit their own details.
There is similar functionality for Joomla! and Wordpress, but I can see that the User and Admin guide is somewhat Drupal-centric in this regard and does not specify the equivalent Used For option for those. It looks like it may be "User account" and that the profile labelled "Name and Address" always has that option selected and is the only profile that can have that option selected in both Joomla! and WordPress.
Alternatively it could be that in Joomla! and WordPress any Contact profile can be exposed through the front-facing web pages to allow logged-in users to edit their own information if you follow the instructions in the Integrating with Joomla! or Integrating with WordPress sections of our User and Administrator Guide.
(I, too, am somewhat Drupal-centric.)