一、原理
MySQL的用户管理实质上是对用户表的管理,系统中的数据库mysql存在一张用户表(user),所有的用户都在该表内,对用户的管里也就是对该表进行增删查改的操作。
show databases;
如图中的mysql数据库,所有的用户信息都存在这个数据内的user表中。
use mysql;
select host,user,authentication_string from user;
进入该数据库后,查看user表中的内容:
如图显示了当前系统下的所有用户信息,root就是超级用户,剩下两个是系统自带的,由于没有创建普通用户,所有只有此三项。
字段含义:
host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆
user: 用户名
authentication_string: 用户密码,通过password函数加密后的
二、创建普通用户
create user '用户名'@'登陆主机/ip' identified by '密码';
'登陆主机/ip' 可选项:
localhost:表示只能在本主机进行登录。
指定的ip地址:表示只允许特定ip的主机才能登录。
% :表示允许远端登录,可以在任意主机上进行登录。(建议少用)
注意:如果创建的时候报错,先执行flush privileges; 刷新一下再进行创建。
三、用户登录
本机登录:
mysql -u用户名 -p;
远程登录:
远程连接其他服务器下的mysql。需要对方的mysql下的用户登录主机设置的是指定ip或%,才能远程登录。
远程登录指令:
mysql -u用户名 -h需要连接的ip -p
四、删除用户
方式1. 使用对表的删除语句删除
DELETE FROM mysql.user WHERE user = 'username' AND host = 'localhost';
方式2. 使用DROP USER语句:
drop user '用户名'@'localhost';
五、修改密码
方法1.
只能给本用户自己设置密码。
set password=password('新的密码');
方法2.
root用户修改指定用户的密码
set password for '用户名'@'主机名'=password('新的密码');
修改密码后需要使用flush privileges;刷新一下。
root忘了密码重置
方法:先设置免密登录,登录后,在重新设置密码。
1. # vim /etc/my.cnf
2. 在[mysqld]下添加 skip-grant-tables
这时就可以无密码登录。
3. # mysql -uroot -p
4. 输入密码的时候直接回车
5. 进入后输入 # flush privileges;
6. 设置密码,指令:
set password for root@localhost=password(‘你的密码’);
这样退出后就可以使用密码登录了。
最后记得把skip-grant-tables给注释了
如果是普通账户密码忘了,可以直接在root下进行重置。
六、权限赋予
权限 | 意义 |
ALL [PRIVILEGES] | 设置除GRANT OPTION之外的所有简单权限 |
ALTER | 允许使用ALTER TABLE |
ALTER ROUTINE | 更改或取消已存储的子程序 |
CREATE | 允许使用CREATE TABLE |
CREATE USER | 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES |
CREATE VIEW | 允许使用CREATE VIEW |
DELETE | 允许使用DELETE |
DROP | 允许使用DROP TABLE |
INDEX | 允许使用CREATE INDEX和DROP INDEX |
INSERT | 允许使用INSERT |
SELECT | 允许使用SELECT |
SHOW DATABASES | SHOW DATABASES显示所有数据库 |
SHOW VIEW | 允许使用SHOW CREATE VIEW |
SHUTDOWN | 允许使用mysqladmin shutdown |
UPDATE | 允许使用UPDATE |
GRANT OPTION | 允许授予权限 |
权限赋予语句:
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']; // grant select on ... // grant select, delete, create on ... // grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
*.* : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
库.* : 表示某个数据库中的所有数据对象(表,视图,存储过程等)
identified by可选。 如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户权限赋予后需要刷新才能使用:flush privileges;
例:赋予zhangsan关于test数据库的select所有表的权限。
grant select on test.* to 'zhangsan'@'localhost';
权限查看:
show grants for 'username'@'localhost';
查看某用户被赋予的权限。
七、权限收回
指令:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
例:
revoke all on test.* from 'zhangsan'@'localhost';
回收张三关于test数据库的所有权限。