【MySQL数据库】用户管理
目录
1,用户信息
2,创建/删除/修改用户
3,数据库的权限
MySQL数据库安装完之后,我们最开始时使用的都是 root 用户,其它用户通常无法进行操作。因此,MySQL数据库需要对用户进行管理。
1,用户信息
MySQL中的用户信息,都存储在系统数据库 mysql 的 user 表中。这里只研究 user 表中的 host, user, authentication_string。
- host:指定了允许用户连接的主机。如果是localhost,表示只能从本机登陆。
- user:用户名字段,代表用户的登录名称。
- authentication_string:该字段存储了用户的密码(或更准确地说,密码的哈希值)。它是用来验证尝试连接到MySQL服务器用户的身份。
查看MySQL用户信息:select host,user,authentication_string from user;
下面进行有关用户的操作之前要说明的是,若数据库服务器的配置文件中(my.cnf里的[mysqld])使用了 skip-grant-tables,那么这里就无法进行用户相关的操作,因为该选项绕过服务器权限验证的操作,用户相关的操作一般都会设计到权限的分配操作,绕过权限验证操作,就意味着无法给相关用户分配权限,比如创建用户,需要给此用户分配登录权限。
2,创建/删除/修改用户
1,创建用户
语法:
create user '用户名'@'登陆主机/ip' identified by '密码';
样例:
在本主机下创建zhu用户:create user 'zhu'@'localhost' identified by 'zhu';
创建test用户,允许在任意主机下登录:create user 'test'@'%' identified by '123';
查看user表可观看到:select user,host,authentication_string from user;
2,删除用户
语法:
drop user '用户名'@'主机名';
样例:
在本主机下删除用户zhu:drop user 'zhu'@'localhost';
3,修改用户密码
语法:
自己改自己密码:set password=password('新的密码');
root用户修改指定用户的密码:set password for '用户名'@'主机名'=password('新的密码');
3,数据库的权限
1,给用户授权
刚创建的用户没有任何权限,这也就意味着 MySQL 服务器不会相应该用户的一切指令(如创建数据库,建立表,查看数据库等),因此,对于新建的用户而言,我们需要给用户授权。在MySQL中,给用户授权通常使用 grant 语句来完成。这个命令允许你指定特定的权限给一个或多个数据库对象。
语法:
grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码'];
说明:
权限列表:可以是 all [可选privileges],表示所有权限,也可以是具体权限如select、insert、update、delete、create、drop等。
数据库名.表名:指明权限应用到哪个数据库和表上。可以使用通配符*,例如:*.*:表示所有数据库的所有表;库.*:表示某个数据库中的所有数据对象。
用户名@主机名:指定用户以及允许从哪里连接(例如localhost)。
IDENTIFIED BY '密码':可选字段,如果用户存在,赋予权限的同时修改密码;如果该用户不存在,就是创建用户。
注意:
权限列表,多个权限用逗号分开,表示赋予多个权限,例如:
grant select on ...
grant select, delete, create on ....
grant all [privileges] on ... (表示赋予该用户在指定对象上的所有权限)
还有就是,如果发现赋权限后,没有生效,执行指令:flush privileges; 并退出后重新登录。
样例:
给zhu用户赋予所有数据库下所有表的select和create权限:
grant select, create on *.* to 'zhu'@'%';
2,回收权限
语法:
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
样例:
回收zhu对test数据库的所有权限:revoke all on test.* from 'zhu'@'%';
注意:上面给用户权限赋予和收回操作全都是在root账户下进行的。在权限赋予和收回后,为了确保更改立即生效,我们需要运行指令:flush privileges; 刷新权限。