之前我们一直都使用root身份来对mysql进行操作,但这样存在安全隐患。这时,就需要使用MySQL的用户管理
目录
[1.1 用户信息](#1.1 用户信息)
[1.2 添加用户](#1.2 添加用户)
[1.3 删除用户](#1.3 删除用户)
[1.4 修改用户密码](#1.4 修改用户密码)
[2.1 赋予授权](#2.1 赋予授权)
[2.2 回收权限](#2.2 回收权限)
一、用户
1.1 用户信息
在MySQL中所有允许被登录的用户信息都被存放在系统数据库mysql的user表中:
来看看这张表中有着什么样的信息:
在上表中我们先介绍几个比较关键的列:
Host:表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆,如果是%表示可以从任何服务器上登录(不推荐%的设置方式,这是很危险的)
user: 用户名
authentication_string: 通过password函数加密后的用户密码
*_priv: 用户拥有的权限
所以我们在对用户信息做修改,本质上是对这个user表做修改!
1.2 添加用户
我们在数据库下添加用户,本质上可以使用insert语句向user表中插入数据,但表中要插入的数据太多了,insert语句在这里就显的不实用了,mysql提供下列语句来方便我们插入用户数据:
sql
create user '用户名'@'登陆主机/ip' identified by '密码';
在我们对user表做了任何修改后,都要下面的语句刷新一下,才能生效:
sql
flush privileges;
1.3 删除用户
mysql提供下列语句供我们删除用户:
sql
drop user '用户名'@'主机名';
1.4 修改用户密码
自己改自己密码:
sql
set password=password('新的密码');
root用户修改指定用户的密码:
sql
set password for '用户名'@'主机名'=password('新的密码');
修改完后记得刷新一下哦:
sql
flush privileges;
二、用户权限
在mysql下用户共有以下权限:
权限 | 列 | 上下文 |
---|---|---|
CREATE | Create_priv | 数据库、表或索引 |
DROP | Drop_priv | 数据库或表 |
GRANT OPTION | Rant_priv | 数据库、表或保存的程序 |
REFERENCES | References _priv | 数据库或表 |
ALTER | Alter_priv | 表 |
DELETE | Delete_priv | 表 |
INDEX | Index_priv | 表 |
INSERT | Insert_priv | 表 |
SELECT | Select_priv | 表 |
UPDATE | Update_priv | 表 |
CREATE VIEW | Create_view_priv | 视图 |
SHOW VIEW | Show_view_priv | 视图 |
ALTER ROUTINE | Alter_routine_priv | 保存的程序 |
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 | Reate_user_priv | 服务器管理 |
PROCESS | Process_priv | 服务器管理 |
RELOAD | Reload_priv | 服务器管理 |
REPLICATION CLIENT | Repl_client_priv | 服务器管理 |
REPLICATION SLAVE | Repl_slave_priv | 服务器管理 |
SHOW DATABASES | show_db_priv | 服务器管理 |
SHUTDOWN | Shutdown_priv | 服务器管理 |
SUPER | Super_priv | 服务器管理 |
2.1 赋予授权
刚创建的用户没有任何权限。需要通过下列语句给用户授权:
sql
grant 权限列表 on 库名.表名 to '用户名'@'登陆位置' [identified by '密码'];
注意:
当我们要给多个权限时,记得用逗号分开:
sqlgrant select, delete, create ...
我们可以在权限列表中使用all关键字,表示赋予该用户在该对象上的所有权限
库名和表名我们可以使用*来代表所有如*.* 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)
identified by可选,如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户
2.2 回收权限
我们可以使用下列语句来回收用户的权限:
sql
revoke 权限列表 on 库名.表名 from '用户名'@'登陆位置';
感谢各位的阅览~
更多MySQL技能请看:http://t.csdn.cn/W9dQl
博主努力更新中~