I have some users that I want to grant read only access to my database so I setup a replica server, but I don't want to grant them access to the master. I'd assume that this is a common use case, but I've not been able to find out how to do this easily. The only thing I can think of to accomplish this is to restrict access by IP to the master server.
Master and slave instances can have different users and access permissions -replicated queries are executed by the
SUPER user-, just create and/or modify the separate users with
SET SESSION sql_log_bin = 0; every time (so you do not create conflicts on replication). Avoid any other process writing directly to the mysql.user (and other mysql.*) tables directly and you will be fine.
You probably want to set your slave as
read_only and not provide
SUPER privileges on anyone else there (as it will become out of sync if someone writes there and not to the master).