Re: Replication and user privileges
"shawn l.green" <[email protected]> Tue, 26 Feb 2019 09:44:10 -0500
| Newsgroups | gmane.comp.db.mysql.general |
|---|---|
| Organization | Oracle Corporation |
| Message-ID | <[email protected]> |
Hello Jim, On 2/25/2019 7:29 PM, Jim wrote: > On 2/25/2019 5:46 PM, shawn l.green wrote: >> Hello Jim, >> >> On 2/25/2019 5:04 PM, Jim wrote: >>> I have a question about mysql replication. I believe I understand most >>> of it, but have a question about user privileges. >>> >>> I understand on the master, the replication user must have the >>> Repl_slave_priv privilege as described here: >>> https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_replication-slave >>> >>> >>> >>> My question is about what replication-related users and privileges must >>> exist on the slave. >>> >>> So, for example, if an insert on the master that is to be replicated is >>> performed by user 'abc' with proper insert permissions on the master, >>> does that same 'abc' user with same insert permissions need to exist on >>> the slave as well? >>> >>> In other words, what user is performing the replication operation on the >>> slave? I don't see any indication of users referenced in the bin logs >>> that I have examined on the master. Are user and privileges regarding >>> replicated queries irrelevant on the slave and that is handled all >>> internally via the replication thread with no regard to user privileges? >>> >>> Thank you. >>> Jim >>> >> >> Your final supposition is correct. All privileges were checked and >> verified on the master when the original command was executed. The >> Replication system on the slave is going to repeat that change as well >> as possible given the state of its copy of the data without regards to >> "who originally performed this change" on the upstream master. >> >> We do not store credentials in the Binary Log because they are not >> important to either of the purposes of the Binary Log >> >> * point-in-time recovery >> or >> * Replication (which is very much like an automated, continuous >> point-in-time recovery) >> >> === >> >> That replication account you mentioned, on the master, is required to >> give a slave (and you could have several) enough rights to read the >> Binary Log and not much else. This allows you to create an account >> that can login from a remote location with the "least privileges" >> necessary to do its job. This minimizes your data's exposure should >> that account become compromised. >> >> Many other accounts could also have the REPL_SLAVE_PRIV privilege and >> any of those could be used by a slave to do the same job. However >> losing control over one of those more privileged accounts could pose a >> higher risk to your data. >> >> > > Thanks, Shawn. Your response confirms what I had assumed was happening. > > So bottom line... what I plan to do is strip the various > insert/update/delete privileges from appropriate db users on my slaves. > I had placed them there originally because I thought they would be > needed for the replicated queries, but not true based on your response. > > I only want the various mysql users used by my code to have select privs > on the slaves so that if somehow a slave was mistakenly written to via a > bug in my code, that write would fail and I would receive the error. The > slaves should only be used for selects and should never experience a write. > > That would make sense based on our discussion, correct? > > Thanks again. > Jim > As masters and slaves can exchange "positions" or "roles" (it depends on how you like to mentally visualize the relationship) within a replication graph in a failover situation, adding time to re-establish actual permissions using GRANT commands to reset user accounts to their old privileges may not be time you want to spend. A cleaner, simpler solution is to set the --super-read-only flag in the server: https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_super_read_only That way, you get the behavior you want (no writes to a read-only slave) without forcing differences to the content of your privileges tables within different nodes of your Replication setup. Each node will remain a transactionally consistent copy of all the others (within the temporal limits of replication being an asynchronous process). Yours, -- Shawn Green MySQL Senior Principal Technical Support Engineer Oracle USA, Inc. - Integrated Cloud Applications & Platform Services Office: Blountville, TN Become certified in MySQL! Visit https://www.mysql.com/certification/ for details. -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/mysql