第12章 MySQL用户和权限管理

MySQL账户管理

练习1:查看mysql数据库中的权限表

使用putty连接ubuntu服务器。输入以下命令查看mySQL中的权限表。

root@mySQL1:~# mysql -u root -p
Enter password:
mysql> use mysql;
mysql> show tables;


练习2:使用命令行创建mySQL用户

本练习你将使用putty连接到Ubuntu服务器,使用mysql工具查看mySQL用户,创建新用户。授予用户权限。在mysql数据库中user表存储了用户和全局权限

1. 查看用户

使用putty连接到UbuntuServer

root@ubuntuServer:~# mysql -u root -p
Enter password: 
mysql> use mysql; 
mysql> select user,host from user;


最好不要删除127.0.0.1和localhost,否则在服务器本地不能连接mySQL。

2. 使用create user创建新用户

使用CREATE USER创建新用户,没有赋予任何权限。

下面创建两个用户webuser,一个允许本地登录,一个允许192.168.80.网段能够登录,注意密码不一样。

mysql> create user 'webuser'@'localhost' identified by 'a1!';
mysql> create user 'webuser'@'192.168.80.%' identified by 'a2!';

创建不需要登录密码的用户,不需要identified by。

3. 使用grant授权用户并创建用户(创建mySQL管理员)

下面使用grant语句创建一个root用户,该用户可以在任何计算机登录,授予所有权限,所有数据库所有表,能够且能够授权。

mysql>grant all privileges on *.* to 'root'@'%' identified by 'a1!' with grant option;
mysql> flush privileges;


4. 重设用户密码

将'webuser'@'192.168.80.%'用户密码设置为123456

注意:mySQL用户webuser

mysql> set password for 'webuser'@'192.168.80.%'=password('123456');

练习3:mySQL授权

下面的练习,将会授权练习2创建的用户webuser@localhost对mySQL数据库对象的访问权限,权限由小变大。并验证权限。

MySQL权限级别

全局权限

数据库权限

表权限

列权限

1. 授予列权限

授予用户webuser@localhost能够查询schoolDB数据的所有表,只能更新TStudent表的sname和Email列。

授予用户能够更改数据库schoolDB.TStudent的Email,Class

mysql> grant select on schoolDB.* to 'webuser'@'localhost';
mysql> grant update(Email,Class) on schoolDB.TStudent to 'webuser'@'localhost'; 
mysql> flush privileges;

2. 验证授权

再打开Putty,使用root连接,登录mySQL使用webuser@localhost,验证权限。

字符集设置为UTF-8

使用webuser连接mysql

更改数据库,查询Tstudent表,可以看到能查询

更改姓名遭到失败

mysql> update TStudent set Sname='zhang' where StudentID='00010';

更改班级成功

mysql> update TStudent set Class='NET' where StudentID='00010';

插入记录和删除记录都被拒绝

这足以证明授权成功。

3. 授予表权限

授权'webuser'@'localhost'用户能够对数据schoolDB中Tstudent能够select,update,delete,insert权限,刷新权限。

mysql> grant select,update,delete,insert on schoolDB.* to 'webuser'@'localhost';

这次不用重新连接,直接验证能够插入成功。

mysql> use schoolDB;
mysql> insert TStudent (StudentID,sname) value ('00012','zhangjing');
mysql> delete from TStudent where studentID='00010';

创建一个新的表,遭到拒绝

mysql> create table webTB (sid int,sname varchar(10));

删除现有表,遭到拒绝

mysql> drop table TScore;

4. 授予数据权限

在root@localhost打开的窗口。执行以下命令。

授权'webuser'@'localhost'用户能够对数据库schoolDB完全控制。

mysql> grant all privileges on schoolDB.* to 'webuser'@'localhost';
mysql> flush privileges;

5. 验证数据库权限

在webuser@localhost登录,退出,重新登录。

可以创建表

可以删除表

创建数据库失败

mysql> create database webdb1;

6. 授予全局权限

在root@localhost登录的窗口,授予webuser@localhost为mysql数据库所有权限,即mySQL管理员。

mysql> grant all privileges on *.* to 'webuser'@'localhost'; 
mysql> flush privileges;

插入一条记录,拒绝。

7. 验证全局权限

在webuser@localhost打开的窗口。

退出,重新登录mySQL,创建数据库,能够成功。

练习4:查看授予的权限

使用root@localhost连接mySQL,查看授予的权限。

mysql> show grants for 'webuser'@'localhost';

练习5:取消授权

取消授予的权限

mysql> revoke update(Email,Class) on schoolDB.TStudent from 'webuser'@'localhost';
mysql> flush privileges;

再次查看权限,发现该用户的权限只剩下两条。

mysql> flush privileges;
mysql> show grants for 'webuser'@'localhost';

练习:6:使用图形界面查看设置的权限

使用mySQL Manager连接,可以创建用户,授权全局权限,表权限,列权限。

点击下图中,可以看到所有用户,全局权限,表权限和列权限。

练习7:恢复root密码

忘记了root密码,可以更改配置文件,在[mysqld]段中加入一行“skip-grant-tables”,重启mySQL服务,可以使用root账号空密码登录mySQL。

sudo vi /etc/mysql/my.cnf

重启mySQL服务

root@ubuntuServer:~# /etc/init.d/mysql restart

再次登录不需要输入密码。

重设密码

mysql> use mysql;
mysql> update user set password=PASSWORD('123') where user='root';

编辑配置文件

注释掉

skip-grant-tables

重启mySQL服务

root@ubuntuServer:~# /etc/init.d/mysql restart

使用新密码登录

广告