文章目录
- 用户管理
- 用户信息
- 创建用户
- 删除用户
- 修改用户密码
- 用户权限
- 用户赋权
- 回收权限
用户管理
如果我们只能使用root用户,这样存在安全隐患,因为root可以访问所有的数据库和表,这时,就需要使用MySQL的用户管理,从而限制某个特定的用户只能访问特定的数据库和表,并且对其权限作出一定的限制,比如只有可读权限
用户信息
MySQL中用户信息都在库mysql的user表中
字段 | 解释 |
---|---|
host | 表示这个用户可以从哪个主机登陆,如果是localhost 表示只能从本机登陆,% 表示任意 |
user | 用户名 |
authentication_string | 用户密码通过password函数加密后的结果 |
XXX_priv | 表示用户拥有的权限,后面跟Y表示允许,N表示拒绝 |
例子:
use mysql;#进入mysql这个数据库
select host,user,authentication_string from user;
创建用户
create user '用户名' @'登陆主机或者ip' identified by '用户的密码';
- %从任意处登录,一般只有root用户设置
- 普通用户一般只会设置在某个地方登录来保证安全性,%一般只会设置root用户
关于新增用户这里,需要大家注意,不要轻易添加一个可以从任意地方登陆的user, 这里是为了测试,可能实际在设置密码的时候,因为mysql本身的认证等级比较高,一些简单的密码无法设置,会出现报错,提前设置认证等级
此时我们可以以用户test的身份登录mysql: mysql -utest -p;
然后输入密码
当然,我们也可以通过Windows登录新创建的用户:
- 在cmd中输入:mysql -h 主机名 -u 用户名 -p
注意: 用户被创建好,也无法进行大部分操作,新用户没有权限,因此无法访问数据库,我们需要对用户进行赋权,
删除用户
drop user '用户名'@'主机名'; #不建议直接drop user 用户名
修改用户密码
用户自行修改密码
set password=password('新的密码');
注意:此时是在test用户的身份下
root用户修改其他用户密码
set password for '用户名'@'主机名'=password('新的密码');
注意:此时是在root用户的身份下
用户权限
权限 | 字段 | 上下文 |
---|---|---|
CREATE | Create_priv | 数据库、表或索引 |
DROP | Drop_priv | 数据库、表 |
GRANT OPTION | Grant_priv | 数据库、表或保存的程序 |
REFERENCES | References_priv | 数据库或表 |
ALTER | Alter_priv | 表 |
DELETE | Delete_priv | 表 |
INDEX | Index_priv | 表 |
INSERT | Insert_priv | 表 |
SELECT | Select_priv | 表 |
UPDATE | Update_priy | 表 |
CREATE VIEW | Create_view_priy | 视图 |
SHOW VIEW | Show_view_priv | 视图 |
ALTER ROUTINE | Alter_routine_priy | 保存的程序 |
CREATE ROUTINE | Create_routine_priv | 保存的程序 |
EXECUTE | Execute_priv | 保存的程序 |
FILE | File_priv | 服务器主机上的文件访问 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 服务器管理 |
LOCK TABLES | Lock_tables_priv | 服务器管理 |
CREATE USER | Create_user_priv | 服务器管理 |
PROCESS | Process_priv | 服务器管理 |
RELOAD | Reload_priv | 服务器管理 |
REPLICATION CLIENT | Repl_client_priv | 服务器管理 |
REPLICATION SLAVE | Repl_slave_priv | 服务器管理 |
SHOW_DATABASES | Show_db_priy | 服务器管理 |
SHUTDOWN | Shutdown_priy | 服务器管理 |
SUPER | Super_priv | 服务器管理 |
用户赋权
查看用户所拥有的权限:
show grants for '用户名'@'登陆位置';
例如:查看test用户的权限:
查看所有用户的权限列表
select * from mysql.user\G; #在root身份下查看
给用户赋权:
grant 权限列表 on 库名.对象名 to '用户名'@'登陆位置' [ identified by '密码' ];
- 权限列表:多个权限用逗号分开,如果使用all则赋予所有权利,
- 库.对象名 :
库.*
表示某个数据库中的所有数据对象(表,视图,存储过程等),*.*
表示所有库的所有数据对象
如果嫌麻烦的话可以直接把权限列表写成all
,赋权给用户
grant all on *.* to '用户名'@'登陆IP';
- identified by:可选,如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户,
赋权之后如果没反应,需要进行刷新权限
flush privileges;
比如要给test用户查看和修改test表的权限:
注意:此时只能查看和更新表,不能删除表,因为没有删除权限
回收权限
revoke 权限列表 on 库.对象名 from '用户名'@'登陆IP';