袁党生博客

  • 主页
  • linux基础
  • SHELL
  • WEB
  • 负载
  • 企业级应用
  • 数据库
  • KVM
  • Docker
  • K8S
  • 监控
  • 存储
  • 博客搭建问题
  1. 首页
  2. 数据库
  3. 正文

五、MySQL用户和权限管理

2020年4月23日 847点热度 0人点赞 0条评论

  • 元数据数据库:mysql
      系统授权表:
      db, host, user
      columns_priv, tables_priv, procs_priv, proxies_priv
  • 用户账号:
    'USERNAME'@'HOST':
      @'HOST':
      主机名;
      IP地址或Network;
      通配符: % _
        示例:172.16.%.%

用户管理

  • 创建用户:CREATE USER
      CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password'];
      默认权限:USAGE
    create user test@'192.168.32.129' identified by 'centos';

知识扩展:

在192.168.32.129主机的/etc/hosts文件中写入192.168.32.130主机的ip与域名的对应关系
vim /etc/hosts         
192.168.32.130   centos7.localdomain    centos7.localdomain为130主机的主机名      
则可以使用以下方式连接数据库
mysql -utest -pcentos123456 -hcentos7.localdomain   说明数据库把主机名解析为192.168.32.130连接数据库
  • 用户重命名:RENAME USER
      RENAME USER old_user_name TO new_user_name
  • 删除用户:
      DROP USER 'USERNAME'@'HOST'

示例:删除默认的空用户
  DROP USER ''@'localhost';

  • 修改密码:
      mysql>SET PASSWORD FOR 'user'@'host' = PASSWORD(‘password');
      mysql>UPDATE mysql.user SET password=PASSWORD('password') WHERE clause;
      此方法需要执行下面指令才能生效:
      mysql> FLUSH PRIVILEGES;
      #mysqladmin -u root -poldpass password 'newpass'
  • 忘记管理员密码的解决办法:
      启动mysqld进程时,为其使用如下选项:
      --skip-grant-tables
      --skip-networking
      使用UPDATE命令修改管理员密码
      关闭mysqld进程,移除上述两个选项,重启mysqld

实验:破解mysql数据库管理员密码

如何破解mysql管理员密码
(1)更改配置文件
vim /etc/my.cnf
[mysqld]
skip-grant-tables  启动数据库服务时,不检查授权表
skip-networking  生产环境中,为了防止其他用户在破解口令时连接数据库,处于维护模式,禁止其他用户登录
(2)重启数据库服务
systemctl restart mariadb
(3)再次连接数据库,无需密码
[root@centos7-1 ~]#mysql
清除或更改密码
update mysql.user set password = '';   设置密码为空
flush privileges;     update命令通过更改表的方式清空密码,因此需要刷新策略
(4)删除配置文件/etc/my.cnf中的skip-grant-tables和skip-networking,回复原有配置信息
重启数据库服务,再次连接数据库

如果是多实例配置数据库,只需在服务脚本中增加--skip-grant-tables即可
 ${cmd_path}/mysqld_safe --skip-grant-tables  --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null 

MySQL权限管理

  • 权限类别:
      管理类
      程序类
      数据库级别
      表级别
      字段级别
  • 管理类
      CREATE TEMPORARY TABLES
      CREATE USER
      FILE
      SUPER
      SHOW DATABASES
      RELOAD
      SHUTDOWN
      REPLICATION SLAVE
      REPLICATION CLIENT
      LOCK TABLES
      PROCESS
  • 程序类: FUNCTION、PROCEDURE、TRIGGER
      CREATE
      ALTER
      DROP
      EXCUTE
  • 库和表级别:DATABASE、TABLE
      ALTER
      CREATE
      CREATE VIEW
      DROP
      INDEX
      SHOW VIEW
    GRANT OPTION:能将自己获得的权限转赠给其他用户
  • 数据操作:
      SELECT
      INSERT
      DELETE
      UPDATE
  • 字段级别:
      SELECT(col1,col2,...)
      UPDATE(col1,col2,...)
      INSERT(col1,col2,...)
  • 所有权限:ALL PRIVILEGES 或 ALL

授权

参考:https://dev.mysql.com/doc/refman/5.7/en/grant.html

  • 语法:
    GRANT priv_type [(column_list)],... ON [object_type] priv_level TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];  
    priv_type: ALL [PRIVILEGES]  
    object_type:TABLE | FUNCTION | PROCEDURE  
    priv_level: *(所有库) | *.* | db_name.* | db_name.tbl_name | tbl_name(当前库的表) | db_name.routine_name(指定库的函数,存储过程,触发器)  
    with_option: GRANT OPTION  
    | MAX_QUERIES_PER_HOUR count  
    | MAX_UPDATES_PER_HOUR count  
    | MAX_CONNECTIONS_PER_HOUR count  
    | MAX_USER_CONNECTIONS count  

    示例:
    GRANT SELECT (col1), INSERT (col1,col2) ON mydb.mytbl TO 'someuser'@'somehost';

  • 回收授权:REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ...
    示例:
    REVOKE DELETE ON testdb.* FROM 'testuser'@'%'
  • 查看指定用户获得的授权:
      Help SHOW GRANTS
      SHOW GRANTS FOR 'user'@'host';
      SHOW GRANTS FOR CURRENT_USER[()];
  • 注意:MariaDB服务进程启动时会读取mysql库中所有授权表至内存
    (1) GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效
    (2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:mysql> FLUSH PRIVILEGES

注意:


grant all on *.* to test@'192.168.32.129';   授权test用户可以查询所有数据库中的所有表  
在192.168.32.129主机上测试,发现并不能查看所有数据库,这时需要退出重新登录才能具有该权限,这是因为被授权用户在线时不能获取到权限,因此需要重新登录  
撤销权限时也需要被撤销权限用户重新登陆数据库才能生效  
标签: 暂无
最后更新:2023年4月24日

袁党生

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 linux学习. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备18039507号-1