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';
只能给本用户自己设置密码。
set password=password('新的密码');
root用户修改指定用户的密码
set password for '用户名'@'主机名'=password('新的密码');
?修改密码后需要使用flush privileges;刷新一下。
方法:先设置免密登录,登录后,在重新设置密码。
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(‘你的密码’);
这样退出后就可以使用密码登录了。
如果是普通账户密码忘了,可以直接在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数据库的所有权限。
?