MySQL数据库导出用户及权限
创建用户并授权
mysql中存在5个控制权限的表,分别为user,db,tables_priv,columns_priv,procs_priv
。
• user表:
存放用户账户信息以及全局级别(所有数据库)权限,决定了 来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限。• db表:
存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访 问此数据库。本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!• tables_priv表:
存放表级别的权限,决定了来自哪些主机的哪些用户可以 访问数据库的这个表。• columns_priv表:
存放列(字段)级别的权限,决定了来自哪些主机的哪些用户可 以访问数据库表的这个字段。• procs_priv表:
存放存储过程和函数级别的权限。
mysql权限表的验证过程为:
- 先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
- 通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | create database db1 default character set utf8mb4; create database db2 default character set utf8mb4; create database db3 default character set utf8mb4; -- 用户 grant all on db1.* to u1@'%' identified by 'lhr' with grant option; grant all on db2.* to u2@'%' identified by 'lhr' with grant option; grant all on db3.* to u3@'%' identified by 'lhr' with grant option; -- 表权限 create table db1.test as select * from mysql.user; grant select on db1.test to u2@'%'; -- 列权限 grant select(Host,user) on db1.test to u3@'%'; -- 刷新权限 flush privileges; -- 查询权限 select * from mysql.user; select * from mysql.db; select * from mysql.tables_priv; select * from mysql.columns_priv; select * from mysql.procs_priv; |
导出用户及权限
1 2 3 4 | mysqldump -uroot -plhr -h121.36.8.186 -P3306 \ --hex-blob --skip-triggers --set-gtid-purged=OFF --default-character-set=utf8 --skip-lock-tables \ --no-create-info --max_allowed_packet=512M --complete-insert --insert-ignore --skip-extended-insert \ mysql user db tables_priv columns_priv procs_priv > mysql_priv_data.sql |
导入用户及权限
1 | mysql -f -h121.36.23.144 -P3306 -u root -pLHR@mysql -D mysql --default-character-set=utf8 < mysql_priv_data.sql |