MySQL用户主要包括普通用户和root用户。
root用户是超级管理员,拥有所有的权限,包括:
创建用户;
删除用户;
修改普通用户的账户、权限等。
普通用户只拥有创建该用户时赋予它的权限。
安装MySQL时,会自动安装一个名为mysql的数据库。
mysql数据库下面存储的都是权限表。
这些权限表中,最重要的是:
user表;
db表;
host表;
除此之外,还有:
tables_priv表;
columns_priv表;
proc_priv表。
user表是MySQL中最重要的一个权限表。
DESC语句可以查看user表的基本结构。
user表有39个字段,大致可以分为4类:
用户列;
权限列;
安全列;
资源控制列。
1. 用户列
user表的用户列包括:
Host,表示主机名;
User,表示用户名;
Password,表示密码。
详见书上。
2. 权限列
user表的权限列包括Select_priv、Insert_priv等以priv结尾的字段。
这些字段决定了用户的权限。包括:
查询权限、修改权限等普通权限,用于操作数据库;
关闭服务、超级权限、加载用户等高级管理权限,用于对数据库进行管理。
详见书上。
3. 安全列
user表的安全列只有4个字段,分别是:
ssl_type
ssl_cipher
x509_issuer
x509_subject
资源控制列
user表的4个资源控制列是:
max_questions,规定每小时可以允许执行多少次查询;
max_updates,规定每小时可以允许执行多少次更新;
max_connections,规定每小时可以建立多少连接;
max_user_connections,规定单个用户可以同时具有的连接数。
这些字段的默认值为0,表示没有限制。
db表和host表也是MySQL中非常重要的权限表。
db表中存储了某个用户对一个数据库的权限。
db表比较常用,host表很少用到。
DESC语句可以查看这2个表的基本结构。
db表和host表的字段大致可以分为两类:用户列、权限列。
1. 用户列
db表的用户列有3个字段,分别是:
Host,表示主机名;
Db,表示数据库名;
User,用户名。
host表是db表的扩展。如果db表中找不到Host字段的值,就需要到host表中去寻找。但host表很少用到,通常db表的设置已经满足要求了。
2. 权限列
db表和host表的权限列几乎一样,只是db表中多了一个Create_routine_priv字段和Alter_routine_priv字段。这两个字段决定用户是否具有创建和修改存储过程的权限。
详见书上。
tables_priv表可以对单个表进行权限设置。
colums_priv表可以对单个数据列进行权限设置。
DESC语句可以查看这两个表的基本结构。
详见书上。
procs_priv表可以对存储过程和存储函数进行权限设置。
DESC语句可以查看procs_priv表的基本结构。
包括:
登录和退出MySQL服务器;
创建用户;
删除用户;
密码管理;
权限管理等。
在MySQL中:
CREATE USER语句可以创建新的用户;
INSERT语句可以在mysql.user表中添加用户;
GRANT语句可以新建用户。
详见书上。
在MySQL中,删除普通用户的方法包括:
使用DROP USER语句;
使用DELETE语句。
详见书上。
使用mysqladmin命令来修改root用户的密码
语法:
mysqladmin -u username -p password "new_password";
修改mysql数据库下的user表
使用UPDATE语句,语法:
UPDATE mysql.user SET Password=PASSWORD("new_password")
WHERE User="root" AND Host="locahost";
执行了UPDATE语句之后,需要执行FLUSH PRIVILEGES语句来加载权限。
使用SET语句来修改root用户的密码
SET PASSWORD=PASSWORD("new_password");
root用户登录服务器后,修改普通用户密码的方式包括:
使用SET语句;
使用UPDATE语句,修改user表;
GRANT语句。
语法:
SET PASSWORD=PASSWORD('new_password');
步骤:
1. Linux中,
使用mysqld_safe来启动MySQL服务:
mysqld_safe --skip-grant-tables user=mysql
也可以使用/etc/init.d/mysql来启动MySQL服务:
/etc/init.d/mysql start --mysqld --skip-grant-tables
2. 登录root用户,并且设置新的密码
通过上述方式启动MySQL服务以后,可以不输入密码就登录root用户。登录以后,可以使用UPDATE语句来修改密码。
mysql -u root(亲测会出现”Access denied”)
3. 加载权限表
修改完密码以哦户,必须用FLUSH PRIVILEGES语句来加载权限表。加载权限表后,新密码开始有效。而且MySQL服务器开始进行权限认证。用户必须输入用户名和密码才能登录MySQL数据库。
MySQL中,使用GRANT关键字来为用户设置权限。
MySQL中,必须拥有GRANT权限的用户才可以执行GRANT语句。语法:
详见书上。
收回权限就是取消某个用户的某些权限。
MySQL中,可以使用REVOKE关键字来为用户设置权限。
语法:
详见书上。
MySQL中,
可以使用SELECT语句来查询user表中各用户的权限;
可以直接使用SHOW GRANTS语句来查看权限;
详见书上。
参考文献:
1.《MySQL入门很简单》。