我之前安装数据库的时候,因为root生成的初始密码,修改的时候网上给出的很多答案都不能正常工作。所以自己总结了一下
用户操作
1.创建新用户
-- 创建用户并赋予密码
create user '用户名'@'主机' identified by '密码';
mysql> create user 'test'@'localhost' identified by '111111';
-- 创建用户不初始化密码
create user '用户名'
mysql> create user 'test1'
2.修改密码
alter user [if exists] '用户'@'主机名' identified by '新密码'
mysql> alter user 'test'@'localhost' identified by '123456';
set password for 'user' @'host' = password('password')
mysql> set password for 'test' = password('111111')
我看到网上有些人说update mysql.user set authentication_string ='新密码' where user='用户名'
也可以修改密码,我只能说我试过了不行。因为authentication_string存储的是加密后的密码,我想mysql登陆的时候输入的密码应该也会先加密然后再经行密码比对,直接修改的话authentication_string的值是明文是无法匹配的。
3.删除用户
删除MySQL一个或多个账户及其权限。使用drop user 需要有创建用户或者删除数据库的权限。
drop user [if exists] '用户名'@'主机'
drop user 'test'@'localhost'
注意:用户删除操作不会删除该用户之前创建的数据库或对象。这包括该用户创建的存储过程或视图
4.查询用户
mysql的用户信息保存在mysql数据库的user表中。需要提及的是mysql.user
用一个复合主键,host和user。user@host
会被分别放到user和host字段中。如果不写host则默认为%
,表示所有ip都可以连接
-- 查询所有用户
select user from mysql.user;
user 表存储了MySQL数据库中所有用户基本信息以及权限信息。在5.7中没有password字段了,但是提供了authentication_string字段,这是加密后的密码
select user,authentication_string from mysql.user;
可以看到test用户有密码,test1没有密码
| test | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| test1 | |
用户分配表操作权限
之前说user表中保存一些权限信息,那是用户的操作权限,比如说select,delete,update等权限。但是刚创建的用户是没有操作其他已经存在数据库及表的权限,需要其他高级用户分配权限
给userName用户操作dbname数据库所有表的权限。
GRANT ALL ON dbname.* TO 'userName'@'host'
给用户授予权限的一般语法
GRANT
priv_type ON [object_type] priv_level
TO user [auth_option] ...
priv_type:{//权限类型
select,
update,
delete,
ALL,
......
}
object_type: { //对象类型
TABLE
| FUNCTION
| PROCEDURE
}
priv_level: { // 权限范围
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
user: //账户
'username'@'host'
5.查询用户权限
show grants for '用户名'@'主机名'