mysql创建用户的一些问题

  因为使用默认的root用户会有一些安全问题,可以创建一个新的用户,赋予它应有的权限。

 创建用户语句为:

create user lkprof identified by 'abc123';

  传建一个用户名为lkprof的用户,用户密码为abc123。

如果要限制在固定地址登陆,比如localhost 登陆,可以用下面语句:

create user lkprof@localhost identified by 'abc123';

  给该用户授权,如何要把所有权限赋予用户(不建议),可以用下面语句:

grant all privileges on *.* to lkprof;

  只赋予用户需要用的权限,可以用下面语句:

grant select,insert,update,delete on *.* to lkprof@"%" Identified by "abc123";

  格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码",其中@“%”是可以在任何地址登录。

  更新mysql:

flush privileges;

  退出mysql用新创建用户登录出现下面问题: 

  lkprof@ubuntu:~$ mysql -u lkprof -p
  Enter password:
  ERROR 1045 (28000): Access denied for user 'lkprof'@'localhost' (using password: YES)

  查看用户发现用户确实存在:

mysql> select host,user,password from mysql.user;
+-----------+------------------+-------------------------------------------+
| host | user | password |
+-----------+------------------+-------------------------------------------+
| localhost | root | *4B17032983AB1859A30266285A14B27281D6288E |
| ubuntu | root | *4B17032983AB1859A30266285A14B27281D6288E |
| 127.0.0.1 | root | *4B17032983AB1859A30266285A14B27281D6288E |
| ::1 | root | *4B17032983AB1859A30266285A14B27281D6288E |
| localhost | | |
| ubuntu | | |
| localhost | debian-sys-maint | *EBB140FE106F6E280438A4901ADACF9426C3CDD5 |
| localhost | phpmyadmin | *4B17032983AB1859A30266285A14B27281D6288E |
| localhost | wordpress | *4DA3F78768A2A609E0CB551343C316C17EA5CDEE |
| % | lkprof | *4B17032983AB1859A30266285A14B27281D6288E |
+-----------+------------------+-------------------------------------------+
10 rows in set (0.00 sec)

google了一下发现原因,引用如下:

其中两个账户有相同的用户名monty和密码some_pass。两个账户均为超级用户账户,具有完全的权限可以做任何事情。一个账户 ('monty'@'localhost')只用于从本机连接时。另一个账户('monty'@'%')可用于从其它主机连接。请注意monty的两个账户必须能从任何主机以monty连接。没有localhost账户,当monty从本机连接时,mysql_install_db创建的localhost的匿名用户账户将占先。结果是,monty将被视为匿名用户。原因是匿名用户账户的Host列值比'monty'@'%'账户更具体,这样在user表排序顺序中排在前面。 
这段话说的很清楚,因此执行 grant select,insert,update,delete on test.* to user@"localhost" identified by "password"; 
退出后用lkprof登录,成功。

如果想删除那些为空(匿名)的用户

mysql> delete from mysql.user where user=''; 

查看当前用户可以用:

mysql>select user();

也可以用:

mysql> status;

原文地址:https://www.cnblogs.com/lkprof/p/3098557.html