1.MySQL用户和权限管理

         user表:包含用户的帐号,全局权限

         db表:数据库级别的权限定义

         tables_priv表:表级别权限

         columns_priv表:列级别权限

         procs_priv表:存储过程和存储函数相关的权限

         proxies_priv表:代理用户权限



2.用户帐号:

    用户名@主机构成

        用户名:16个字符以内

        主机:

           主机名:www.baidu.com| mysql

           IP192.168.1.100

           网络地址:192.168.1.0/255.255.255.0

               通配符:% _

                  192.168.%.%

                  %.baidu.com

                                              

         --skip-name-resolve:为了加速mysql服务器的性能,而且访问mysql的时候也不需要它通过主机名来认证,关闭一切基于主机名认证的方式来进行授权,提高用户连接时候的速度



3.权限级别:

         全局级别:SUPER,

         库级别:

         表级别:

         列级别:

         存储过程和存储函数级别:



4.创建用户

         第一种:CREATE USER username@host IDENTIFIED BY 'password'

        

         第二种:GRANT

                  

         第三种:INSERT INTO mysql.user

                mysql>FLUSH PRIVILEGES;



4.1查看某个用户的授权信息

         SHOW GRANTS FOR 'username@host';




5.为用户添加student库中“创建”的权限

MySQL用户与权限_第1张图片

MySQL用户与权限_第2张图片



当创建数据库的时候,显示没有权限

MySQL用户与权限_第3张图片



6.为用户添加创建sdb和创建sdb库下任何表的权限

MySQL用户与权限_第4张图片

MySQL用户与权限_第5张图片



7当我们为新创建的tb1表插入数据的时候,显示没有权限

wKiom1VLfWOiCUBbAABOdRxx8eA013.jpg



8.为用户添加sdb库下插入数据的权限

wKioL1VLfwyiKuhTAAChsPr6TOo766.jpg


当授权完成之后也重读授权表(执行了FLUSH PRIVILEGES;)但是还是不能插入数据

wKiom1VLfa-BQfaKAABlbEOip4M949.jpg


当退出当前mysql再重新登录的时候发现可以插入数据了,所以INSERT权限重新登录

wKiom1VLfb3C1jNuAABtGPQ2kjg266.jpg




9.为用户同时添加UPDATEDELETE权限,以及DELETE权限

MySQL用户与权限_第6张图片


更新、删除的时候显示没有权限,和INSERT权限一样,需要重新登录

wKiom1VLffuzlQ6OAACUG4ccLVs720.jpg




于是重新登录,发现没有SELECT 权限,因为要更新或者删除某一条记录,需要先查到之后才能进行删除,所以需要SELECT权限

wKioL1VLf7OTY3HMAAB-G3yWMI8351.jpg

MySQL用户与权限_第7张图片

MySQL用户与权限_第8张图片




10.撤销某个用户的某项权限

MySQL用户与权限_第9张图片




11.撤销用户的UPDATE权限,然后为用户添加只能修改sdb库下stb1表的age字段的权限

MySQL用户与权限_第10张图片

MySQL用户与权限_第11张图片

MySQL用户与权限_第12张图片




12.修改MySQL的全局变量,killMySQL进程,需要有SUPER权限

wKioL1VLgF6T5l32AABXc-0XwZI105.jpg

wKioL1VLgF6jmJcJAADCNgszHns878.jpg

wKiom1VLfuvBsrxVAABwn7NVF80192.jpg




13.删除用户、用户重命名

DROP USER username@host

RENAME USER old_name TO new_name;



14.忘记root密码

14.1关闭MySQL服务

wKiom1VLfyGAQL4NAABC4pofHZk219.jpg



14.2编辑mysql脚本,添加相关参数

    编辑/etc/init.d/mysqld,找到下面内容,然后添加

         --skip-grant-tables

        --skip-networking

MySQL用户与权限_第13张图片

MySQL用户与权限_第14张图片




14.3启动MySQL服务,并连接到MySQL

MySQL用户与权限_第15张图片



14.4修改密码

当视图使用修改授权表的方式去修改密码的时候,MySQL显示说不可以,因为当前启动的MySQL服务已经跳过授权表了

wKioL1VLgSKhwKUaAABSbIJvKuM099.jpg



所以只能通过修改user表的方式来修改密码了

wKiom1VLf9WAOg0jAABzk0RCSvA860.jpg



14.5修改完密码以后,停止MySQL服务,删除/etc/init.d/mysqld中刚才添加的内容

    --skip-grants-table --skip-working然后重启MySQL服务



15.权限手册

http://dev.mysql.com/doc/mysql-security-excerpt/5.5/en/privileges-provided.html

MySQL用户与权限_第16张图片

MySQL用户与权限_第17张图片



16.用户授权的一些其它选项说明

MySQL用户与权限_第18张图片

一般情况下不需要使用object_type,当我们要指定特定的,表、存储函数、存储过程

的时候,就需要指定了


当需要为db_name库中的存储函数abc授权的时候,如果执行以下命令,是否可以正常

的给abc存储函数授权呢?



GRANT EXECUTE ON db.abc TO username@'%';

知道abc代表的是什么吗、?---》不知道----》所以我们需要指定授权的类型

 

所以要想给存储函数abc授权,需要执行

GRANT EXECUTE ON FUNCTION db.abc TO username@'%';