一、权限介绍

  1.权限类别:对象界别划分

库级别表级别字段级别管理类权限、程序类权限

    (1)库和表级别的权限对于具体的库或者表进行授权操作

ALTERCREATE CREATE VIEWDROPINDEXSHOW VIEW

GRANT OPTION:能够把自己获得的权限赠经其他用户一个副本;回收权限困难

    (2)数据操作:增删查改

SELECTINSERTDELETEUPDATE

    (3)字段级别:授权可以对指定字段才有去权限

SELECT(col1,col2,...)UPDATE(col1,col2,...)INSERT(col1,col2,...)

    (4) 管理类

   CREATE TEMPORARY TABLES创建临时表

   CREATE USER创建用户

   FILE从文件中导入导出

   SUPER执行管理操作的权限

   SHOW DATABASES查看其所有权限中所能查看的数据库

   RELOAD重新装载授权表

   SHUTDOWN进程级别关闭数据库权限

   REPLICATION SLAVE复制相关

   REPLICATION CLIENT复制相关

   LOCK TABLES服务器级别对表锁操作

   PROCESS根进程相关的

    (5)程序类::是否有权限去运行存储过程或存储函数

  FUNCTION函数、PROCEDURE存储过程、TRIGGER触发器

  配合CREATE, ALTER, DROP, EXCUTE

    (6)所有有限

ALL PRIVILEGES,,可简写为ALL

 

  2.用户权限保存

    设定的相关用户权限信息将保存在元数据数据库(自带的数据字典表):mysql库中的授权表

               db数据库相关权限

               host通过什么主机连接直当前mysql

               user可登录用户

               columns_priv字段相关权限

               tables_priv表相关权限

               procs_priv程序相关权限

               proxies_priv代理相关权限

 

 

 

二、用户账户创建和授权

  1.授权相关

    (1)授权:GRANT

           GRANT priv_type[,...] ON [{table|function|procedure}] db.{table|routine} TO 'USERNAME'@'HOST' [IDENTIFIED BY 'password']

[REQUIRE SSL] [WITH with_option]

               权限    对象 db.存储历程 存储函数  TO    'USERNAME'@'HOST' [IDENTIFIED BY 'password']   ssl  指明限制

with_option:

    GRANT OPTION

  | MAX_QUERIES_PER_HOUR  #  每小时资源查询次数

  | MAX_UPDATES_PER_HOUR # 每小时资源更新次数

  | MAX_CONNECTIONS_PER_HOUR # 每小时创建的连接数

  | MAX_USER_CONNECTIONS # 同一个用户账号同时连接次数

    (2)取消授权:REVOKE

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ...

    (3) 查看用户获得的授权:SHOW GRANTS FOR

    SHOW GRANTS FOR 'USERNAME'@'HOST'

  一般新创建的用户只有usage权限,即用户有权限通过远程连接创建连接线程连入mysql

 

  2.用户相关

    (1)创建用户:CREATE USER

CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password'];可设置密码,也可以省略

    (2)用户重命名:RENAME USER

  RENAME USER  old_user_name TO  new_user_name

    (3)删除用户

DROP USER 'USERNAME'@'HOST'

注意:mysql的反解功能会解析IP到主机名,因为给ip授权而没有给主机名没有给授权时,会报错。

    (4)修改密码

          1) SET PASSWORD FOR

          2) UPDATE mysql.user SET password=PASSWORD('your_password') WHERE clause;

                  更新表PASSWORD函数加密密码,

       clause格式;  user='root' [and host='']

      注意:只有刷新授权表,才能立即生效(FIUSH PRIVILEGES)

          3) mysqladmin password [new-password]

        mysqladmin的子命令:mysqladmin [OPTIONS] command command....

 

  3.忘记管理员密码的解决办法:(离线)

      (1) 启动mysqld进程时,为其使用:--skip-grant-tables --skip-networking 装载时:跳过授权表,禁止远程登录

      (2) 使用UPDATE命令修改管理员密码

      (3) 关闭mysqld进程,移除上述两个选项,重启mysqld;