MySQL日常维护一(用户与权限) 2013529

         今天先对日常维护中的用户的创建啊,删除及权限的管理做总结。

      首先我们要知道在MySQL创建的过程中将为MySQL服务器创建一个数据目录并在其中创建两个数据库

  1. 一个mysql数据库,里面放的是用来控制客户对服务器的访问权限的各种权限数据。
  2. test数据库,这是一个用于测试目的的数据库。

      二、MySQL软件的安装过程将在权限数据表中创建两种类型的账户

  1.  Root账户,root用户有操作数据库的所有权限,可以用来做任何事情,包括删除数据库和关闭服务器。

            MySQL的root与unix超级用户root 相同时纯属巧合。

      2.  就是匿名账户,权限往往有限,在MySQL(5.0.36/5.1.16)之前,可能会有一个具有超级用户权限的匿名账户   

            MySQL已知的用户都在user表里面。

             mysql> use mysql

             Database changed

             mysql> show tables

      查询user表     mysql> select host,user,password from user;

      | host      | user     | password                                  |

      +-----------+----------+-------------------------------------------+

      | localhost | root     | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |

      | localhost | mysqladm | *FF680E568727C9C00FABFEE03D13BA727047CC65 |

      | localhost | sampadm  | *FF680E568727C9C00FABFEE03D13BA727047CC65 |

      +-----------+----------+-------------------------------------------+       这个是我的结果,会不同。

       注:访问mysql数据库需要时root用户

    3.  现在的有些版本的mysql安装过程会提示你创建一个root用户密码,有些没有的话就可以用root用户登入数据库来获得超级用户权限。

           这里是没有匿名的用户,在(MySQL(5.0.36/5.1.16)之前,可能会有一个具有超级用户权限的匿名账户与root的权限相同)

    

    三、给用户设置密码:

      1. 方法1.mysql> set password for 'sampadm'@'localhost' = password('sampadm');

         Query OK, 0 rows affected (0.00 sec)

         方法2.修改user表数据

             mysql> update user set password=password('a123456') where user='mysqladm';

             Query OK, 1 row affected (0.00 sec)

            Rows matched: 1  Changed: 1  Warnings: 0

             mysql> flush privileges;

             Query OK, 0 rows affected (0.01 sec)

            注:如果使用方法1 set password修改口令,服务器觉察到你对权限表进行了修改,它将自动重新读入权限表新内容区更新内存里的版本。

             而方法2就必须明确的通知服务器重新去加载这个权限表。

      2.查看用户的权限

          mysql> show grants for 'sampadm'@localhost;

          | GRANT USAGE ON *.* TO 'sampadm'@'localhost' IDENTIFIED BY PASSWORD '*697036916BB979C3494B2DFC08CC9402B1CB63A6' |

         | GRANT ALL PRIVILEGES ON `sampdb`.* TO 'sampadm'@'localhost'

     3.回收这些权限

       Revoke all *.* from ‘’@’localhost’;

        还有一个办法处理的办法就将不要的或者权限过大的匿名账户删掉。

        mysql> drop user 'mysqladm'@localhost;

        Query OK, 0 rows affected (0.01 sec)

       这个删除匿名账户的最大好处是它将大大简化非匿名账户的设置工作。否则会出现各种奇怪问题。

     注:设安装完这一步是首先要做的,千万要记得,即使是自己联系,也要养成好习惯,去检查(因为现在很多安装版本已经在安装过程中设置好)

     

      四、在windows 下启动停止服务:

         1.停止服务器:

          C:\Users\Administrator>net stop mysql

          MySQL 服务正在停止..

          MySQL 服务已成功停止。

          C:\Users\Administrator>mysqladmin -p -u root shutdown

             Enter password: *****

     2.启动服务器:

        C:\Users\Administrator>net start mysql

         MySQL 服务正在启动 .

         MySQL 服务已经启动成功。

         C:\Users\Administrator>mysqladmin -p -u root startup

         Enter password: *****

      3.指定服务器启动选项: [mysqld]

                                     user=mysql

     五、账户管理

  1. create user、drop user、rename user用来创建、删除、重命名用户。

          Create user account [identified by ’password’];创建一个新的用户并为它设置一个口令,它值创建账户,不分配权限。

          Drop user account;删除用户,语句不删除这个账户可以访问的任何数据库和其中的数据对象。

          Rename user from_account to to_account;为用户改变现有的名字

          例:mysql> create user 'caoyf'@'localhost' identified by 'caoyf';

               Query OK, 0 rows affected (0.00 sec)         这里请记住主机名部分是指的是客户将从哪些主机区连接服务器。

              这面这句话就是如果你经常出差,可以使用任何地方机器连接服务器

              mysql> Create user 'max' @'%' identified by '123';

              Query OK, 0 rows affected (0.00 sec)  这种形式但对系统却最不安全。

       2.在账户名里面使用localhost作为主机名将允许用户从本地主机来连接服务器,分为几种情况:

            a. 在unix系统上用户如果使用localhost 或者127.0.0.1为主机名来连接服务器。如果主机名是localhost,将使用unix套接字文件建立连接;

                 如果是127.0.0.1,将使用本地主机IP回送接口建立TCP/IP连接。

            b.在windows系统上,都是使用TCP/IP来建立连接,但如果服务器支持内存共享的话,以localhost作为主机名默认使用共享内存建立连接。

                如果服务器支持命名管道连接,用户还可以做“.”作为主机名用过命名管道建立连接。

                    注:如果account 值的用户或主机名作为一个无须转义的标示符,就不必用引号把它括起来。但是最好加上,保险。

                        如果你在创建账户时没有给出它的主机部分,在效果上就等同于把主机名设置为“%”.

        

        3.grant为某指定用户分配权限。

           如果grant账户已经存在,grant语句将改变它的权限。如果那个账户尚不存在,grant语句将先创建它,在分配权限,这样容易产生一个没有任何口令的新账号。

           可以启用 NO_AUTO_CREATE_USER SQL模式可以防止这种情况发生。

        常用的几个字句

           privileges,授权账户的权限。

    columns,权限将作用于哪些列。只有子啊设置数据列权限时才必须给出

           what,权限级别。最高级别是全局级别,即给定所有数据库和所有数据表,你可以把全局权限视为超级用户权限。

          account ,被授予权限的账户

          password,账户的口令。

           想要把权限授予其他账户,你本人必须具备该权限,而且有grant option权限

           Grant可以同时列出说个权限,grant语句里的数据库、数据表或数据列的名字加反引号是,必须把他们当做标示符(而不是字符串)来对待。

            如果给出 with grant  option字句,就是账户可以把它自己的权限转授给其他账户。 Grant option 权限授予的另一种方法是:

                    Grant  grant option on sales.’*’ to “caoyf”@‘localhost’;但是不能与all同时出现

             限制账户的资源占有量:MySQL的授权机制可以让你显示账户每小时可以连接多少次服务器,每小时可以发出或修改多少语句。、

              如果用户具有reload权限就可以发出一条 flush user_resouces语句对当前的设置进行复位。

              查看指定用户权限mysql> show grants for 'sampadm'@'localhost' ;

              查看自己的权限 show grants;

        4.撤销权限,使用revoke 同grant语法。

原文地址:https://www.cnblogs.com/evencao/p/3106302.html