猫猫1 发表于 2018-9-28 12:41:34

MySQL的用户和权限介绍

  一、关于MySQL权限的几点常识:
  1、MySQL的权限系统主要用来验证用户的操作权限。
  2、在MySQL内部,权限信息存放在MySQL数据库的granttable里。当mysql启动后,granttable里的信息会写入内存。
  3、MySQL 使用user name 加 host name 来作为标识符。
  通过这种标识符,可以用来区分不同host上的相同的user name。
  4、MySQL 权限控制有2种策略:
  1)根据密码是否正确来控制客户端的连接。
  2)假设可以正常connect,server还可以检查每个satement是否有权限去执行。如果只有某张表的select 权限,就不能进行drop 操作。
  5、如果用户的权限改变,当前已连接的会话用户不会受影响,下次登录才会生效。
  二、关于MySQL的几个有关权限表的含义:
  user:用户账号、全局权限
  db:库级别权限
  host:废弃
  tables_priv:表级别权限
  colums_priv:列级别权限
  procs_priv:存储过程和存储函数相关的权限
  proxies_priv:代理用户权限
  三、MySQL用户账号的创建规则
  用户名@主机
  用户名:16字符以内
  主机:
  主机名:www.test.com,mysql
  IP:192.168.2.1
  网络地址:192.168.0.0/255.255.0.0
  通配符:%,192.168.%.%,%.test.com
  四、MySQL的用户权限级别
  服务管理类:super
  库:CREATE
  表:DELETE、ALTER
  列:INSERT、SELECT、UPDATE
  更多级别可参考MySQL官方文档
  五、与权限相关的几个命令
  GRANT 权限,... ON [对象类型] db.{table|routine} TO 'username'@'host' ;
  REVOKE 权限,... ON [对象类型] db.{table|routine} FROM 'username'@'host';
  SHOW GRANTS FOR 'username'@'host';
  CREATE USER 'username'@'host' ;
  DROP USER 'username'@'host';
  RENAME USER old_name TO new_name;
  六、权限的操作命令举例
  查看当前数据库的所有用户:
  select user,host,password from mysql.user;
  给用户赋予super权限(super和ALL PRIVILEGES都可以):
  GRANT super ON *.* TO 'mysql'@'localhost';
  GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost';
  删除用户的super权限(super和ALL PRIVILEGES都可以):
  REVOKE super ON *.* FROM 'mysql'@'localhost';
  REVOKE ALL PRIVILEGES ON *.* FROM 'mysql'@'localhost';
  查看赋予用户的权限
  SHOW GRANTS FOR 'mysql'@'localhost';
  七、MySQL的问题处理
  1、MySQL登录密码忘记时的恢复操作
  启动mysql_safe时传递两个参数:
  --skip-grant-tables      跳过授权表
  --skip-networking       为了安全,防止网络登录
  登录方式一:
  修改/etc/init.d/mysql

  登录方式二:
  直接在my.cnf配置
  
  skip-grant-tables
  skip-networking
  而后修改密码:
  通过更新授权表方式直接修改其密码,而后移除此两个选项重启服务器
  UPDATE user SET PASSWORD=PASSWORD('123456') WHERE User='root'
  2、客户端连接MySQL数据库速度慢的问题
  直接在my.cnf配置,关闭DNS的反向解析参数
  
  skip-name-resolve

页: [1]
查看完整版本: MySQL的用户和权限介绍