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;