Mysql 用户管理

 

         账号的组成方式:用户名+主机(所以可以出现重复的用户名,跟其他的数据库不一样)

                  例如: root@localhost   root@%

用户名:16字符以内.

主机名:可以用主机名和IP地址,也可以用通配符

通配符说明:172.18.10.%(IP地址为172.18.10段的所有IP地址都可以访问)


查看用户表
      select * from mysql.user

 

创建用户

1.insert user表方法、
2.create user 方法、
3.grant  方法。

 

1、使用INSERT语句

mysql> insert into mysql.user (host,user,password) values ('%','john',password('123'));
可以直接用insert语句创建相同的账户,然后使用FLUSH PRIVILEGES刷新权限来告诉服务器重载授权表:

#也可以这样插入
shell> mysql -u root mysql

mysql> INSERT INTO mysql.user
    -> VALUES('localhost','monty',PASSWORD('some_pass'),
    -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO user
    -> VALUES('%','monty',PASSWORD('some_pass'),
    -> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

注意:操作INSERT INTO语句插入用户会报错:

ERROR 1136 (21S01): Column count doesn't match value count at row 1
意思是给表user中插入的数据列数跟表的列数不匹配。

我的mysql版本是

mysql> status

Server version:         5.7.10 MySQL Community Server (GPL)


在新的mysql中密码字段不是password了,更改为authentication_string

 

 

 

2.CREATE USER

通过CREATE USER命令进行创建用户

脚本:CREATE USER 'username'@'%' [IDENTIFIED BY 'PASSWORD'] 其中密码是可选项;

例子:CREATE USER 'john'@'192.168.189.71' IDENTIFIED BY "123";

CREATE USER 'john@192.168.189.%' IDENTIFIED BY "123";

CREATE USER 'john@' ;

说明:该方法创建出来的用户只有连接数据库的权限,其它权限需要授权

 

 

 

 

3、使用grant创建用户

以root连接到服务器上后,可以添加新账户。下面的语句表示使用GRANT来设置账户

mysql> GRANT all privileges ON 库名.表名 to 'monty'@'localhost'
                 -> IDENTIFIED BY 'password' WITH GRANT OPTION;

GRANT命令说明:

1.ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限。

2.ON 用来指定权限针对哪些库和表。*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。

3.TO 表示将权限赋予某个用户。

'monty'@'localhost' 表示monty用户,@ 后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。(注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。)

4.IDENTIFIED BY指定用户的登录密码。

5.WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。(注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其他用户授权。)

备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加了一个SELECT权限,然后又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。

创建四个用户:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';

mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

上述用GRANT语句创建的账户具有以下属性:

其中两个账户有相同的用户名monty和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。
  一个账户 ('monty'@'localhost')只用于从本机连接另一个账户('monty'@'%')可用于从其它主机连接
        请注意monty的两个账户必须能从任何主机以monty连接。当不具有localhost账户的用户monty从本机连接时,mysql_install_db创建的localhost匿名用户账户将具有优先权限。结果是,monty将被视为匿名用户。原因是在user表中匿名用户账户的Host列值比monty'@'%账户更具体(%相当于空HOST),这样在user表中排序是排在前面。

第三个账户有用户名admin,但没有密码。该账户只能用于本机连接。上面第三条语句中授予admin用户RELOAD和PROCESS管理权限;这些权限允许admin用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-xxx以及mysqladmin processlist命令;但是它未被授予访问数据库的权限;你可以通过GRANT语句添加此类权限。

第四个账户有用户名dummy,但是也没有密码,该账户只用于本机连接,通过GRANT语句中赋予的USAGE权限,你可以创建账户而不授予任何权限;它可以将所有全局权限设为'N'。假定你将在以后将具体权限授予该账户。



 
删除用户:
                @>mysql -u root -p

  @>密码

   mysql>Delete FROM user Where User='test' and Host='localhost';

   mysql>flush privileges;

 

 

posted @ 2017-10-10 21:56  乌托邦眺望  阅读(330)  评论(0编辑  收藏  举报