MySQL用户可以分为普通用户和root用户。 root用户是超级管理员,拥有所有权限, 普通用户只拥有被授予的各种权限 用户管理包括但不限于管理用户账户、权限等。 目录 1. 权限表 2. 账户管理 登录和退出...
MySQL是一个多用户数据库,可以为不同用户指定允许的权限。MySQL用户可以分为普通用户和root用户。
root用户是超级管理员,拥有所有权限,普通用户只拥有被授予的各种权限
用户管理包括但不限于管理用户账户、权限等。
目录
一、权限表
MySQL通过权限表来控制用户对数据库的访问,权限表就在默认的数据库mysql中,由mysql_install_db脚本初始化,存储账户权限信息表主要有:user、db、host、tables_priv、column_priv和procs_priv。
user表
user表是记录允许连接到服务器的账户信息,里面的权限是全局级别的。
db表和host表
db表中存储了用户对某个用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。
host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上数据库级操作权限做更细致的控制。
tables_priv表和colums_priv表
tables_priv表用来对表设置操作权限,columns_priv表用来对表的某一列设置权限。
二、账户管理
MySQL提供许多语句来管理用户账号,这些语句可以用来管理包括登录和退出MySQL服务器、创建用户、删除用户、密码管理和权限管理等内容。通过账户管理来保证MySQL数据库的安全性。

1. 登录和退出MySQL服务器

使用mysql命令并在后面指定登录主机以及用户名和密码。通过mysql-help命令可以查看mysql命令。
mysql命令的常用参数

参数说明
-h主机名指定主机名或ip,如果不指定,默认是localhost
-u用户名指定用户名
-p密码指定登录密码。如果该参数后面有一段字段,则该段字符串将作为用户的密码直接登录。如果后面没有内容,则登录的时候会提示输入密码。注意:该参数后面的字符串和-p不能有空格
-P端口号该参数后面接MySQL服务器的端口号,默认为3306
数据库名可以在命令的最后指定数据库名
-e执行sql语句如果指定了该参数,将在登录后执行-e后面的命令或sql语句并退出。

2. 新建普通用户

创建新用户,必须有相应地权限来执行创建操作。

(1)使用CREATE USER 语句创建新用户

执行CREATE USER或GRANT语句时,服务器会修改相应地用户授权表,添加或者修改用户及其权限。
CREATE USER user_specification [,user_specification]... user_specification: user@host [ IDENTIFIED BY [PASSWORD]'password' |IDENTIFIED WITH auth_plugin[AS'auth_string'] ]user:表示创建的用户的名称host:表示允许登录的用户主机名称IDENTIFIED BY: 表示用来设置用户的密码,该参数可选password:表示用户登录时使用的普通明文密码IDENTIFIED WITH: 为用户指定一个身份验证插件auth_plugin:是可选的字符串参数,传递给身份验证插件,由该插件解释该参数的意义。
IDENTIFIED BY和IDENTIFIED WITH是互斥的,所以对于一个账户只能使用一个验证方法
CREATE USER语句会添加一个新的MySQL账户。使用CREATE语句用户,必须有全局的CREATE USER权限或MySQL数据库的INSERT权限。每添加一个用户,CREATE USER语句会在mysql.user表中添加一天新纪录,但是新创建的账户没有任何权限。如果添加的账户已经存在,CREATE USER语句会返回一个错误。

(2)使用GRANT语句来创建新用户

虽然CREATE USER语句可以用来创建新用户,但是所创建的新用户确没有任何权限,仍需要GRANT语句赋予用户权限。而GRANT不仅可以创建新用户,还可以在创建的同时对用户授予权限,因此,添加新用户并授权它们访问MySQL对象应首选GRANT语句。同样,使用GRANT必须有GRANT权限。
GRANT privileges ON db.table TO user@host [IDENTIFIED BY 'password'][,user[IDENTIFIED BY 'password']] [WITH GRANT OPTION]privileges:表示赋予用户的权限类型db.table:表示用户的权限所作用的权限所作用的数据库中的表IDENTIFIED BY:用来设置密码password:表示用户密码WITH GRANT OPTION:可选参数,表示对新建立的用户赋予GRANT权限,即该用户可以对其他用户赋予权限。
添加或者修改用户权限之后可以对mysql.user表进行查询,注意:user表中的user和host区分大小写,在查询的时候要指定正确的用户名称或者主机名。

(3)直接操作MySQL用户表

其实上述的两种添加新用户的操作,实际都是在user表中添加一条新的记录。因此,可以使用INSERT语句向user表中直接插入一条记录来创建一个新的用户。使用INSERT语句,向user表中直接插入一条记录来创建一个新的用户。需要有mysql.user表的INSERT权限。
INSERT INTO mysql.user(Host,User,Password,[privilegelist]) VALUES('host','username',PASSWORD('password'),privilegevaluelist);PASSWORD()函数为密码加密函数privilegevaluelist为对应的权限的值,只能取 ‘Y’ 或者 ‘N’
INSERT语句需要使用PASSWORD()函数加密密码;GRANT语句会自动将密码加密后存入user表,因此不需要PASSWORD().
还要注意的是,新用户添加成功后还无法使用账号密码登录MySQL,需要使用FLUSH命令,因此执行FLUSH PRIVILEGES,使服务器重新加载授权表(重启也可以重新加载授权表)才能实现登录,使用FLUSH命令需要有RELOAD权限。
FLUSH PRIVILEGES;
使用GRANT则不需要使用FLUSH PRIVILEGES。

3. 删除普通用户

在MySQL数据库中,可以使用 DROP USER 语句删除用户,也可以直接通过DELETE从mysql.user表中删除对应的记录来删除用户。

(1)使用 DROP USER 语句删除用户

DROP USER user[,user];
DROP USER语句用于删除一个或者多个MySQL账户。要使用DROP USER,必须拥有MySQL数据库的全局CREATE权限或者DELETE权限。