Je ne vous recommande généralement pas d'ouvrir le port 3306 pour un accès public (ou même avec des restrictions IP). Personnellement, je tunnelise toujours le port 3306 avec Putty/ssh, puis j'utilise simplement localhost pour me connecter à la base de données.
Dans ce cas, n'oubliez pas d'accorder des privilèges à l'utilisateur comme ceci :
grant all privileges on yourDatabaseName.* to 'yourUserName'@'localhost' identified by "yourUsersPassword";
Si vous souhaitez toujours établir une connexion directe, il est possible que votre utilisateur n'ait toujours pas suffisamment de privilèges. Vous pouvez essayer ceci :
grant all privileges on yourDatabaseName.* to 'yourUserName'@'yourClientsIp' identified by "yourUsersPassword";