MySQL

MySQL 知识量:16 - 40 - 165

15.2 权限管理><

查看访问权限- 15.2.1 -

在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限,能够登录MySQL,但是不能查看数据,也不能执行任何数据库操作。

可以使用show grants for语句查看账号的权限:

show grants for bob;

查询结果:

+---------------------------------+
| Grants for bob@%                |
+---------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'%' |
+---------------------------------+

usage on *.*表示账号bob在任意数据库和任意表上对任何东西都没有权限。

MySQL的权限使用用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%,即授予用户访问权限而不管主机名。

设置访问权限- 15.2.2 -

可以使用grant语句设置用户权限,设置权限前,需要给出以下信息:

  • 要授予的权限。

  • 被授予访问权限的数据库或表的名称。

  • 用户名。

例如:授予用户bob在数据库school上的查询权限。

grant select on school.* to bob;

再次查询账号Bob的权限,结果为:

+-----------------------------------------+
| Grants for bob@%                        |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'%'         |
| GRANT SELECT ON `school`.* TO 'bob'@'%' |
+-----------------------------------------+

可以通过列出各权限并用逗号分隔的方式,一次授予用户多项权限,例如:

grant select,insert,update,delete on school.* to bob;

查询bob的权限结果为:

+----------------------------------------------------------------+
| Grants for bob@%                                               |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'%'                                |
| GRANT SELECT, INSERT, UPDATE, DELETE ON `school`.* TO 'bob'@'%' |
+----------------------------------------------------------------+

撤销访问权限- 15.2.3 -

撤销访问权限使用revoke语句,它是grant的反操作。

例如:撤销bob在数据库school上的查询权限。

revoke select on school.* from bob;

grant和revoke可以在几个层次上控制访问权限:

  • 整个服务器,使用grant all和revoke all。

  • 整个数据库,使用on database.*。

  • 特定的表,使用on database.table。

  • 特定的列。

  • 特定的存储过程。

以下列出可以授予或撤销的每个权限:

权限说明
all除grant option外的所有权限
alter使用alter table
alter routine使用alter procedure和drop procedure
create使用create table
create routine使用create procedure
create temporary tables使用create temporary table
create user使用create user、drop user、rename user和revoke all privileges
create view使用create view
delete使用delete
drop使用drop table
execute使用call和存储过程
file使用select into outfile和load data infile
grant option使用grant和revoke
index使用create index和drop index
insert使用insert
lock tables使用lock tables
process使用show full processlist
reload使用flush
replication client服务器位置的访问
replication slave由复制从属使用
select使用select
show databases使用show databases
show view使用show create view
shutdown使用mysqladmin shutdown(用来关闭MySQL)
super使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登录
update使用update
usage
无访问权限

在使用grant和revoke时,用户账号必须存在,但是所涉及的对象(数据库、表、列等)则没有这个要求。因此,当某个数据库或表被删除后,相关的访问权限仍然存在,当重新建立这些数据库或表时,这些权限依然起作用。

更改用户口令- 15.2.4 -

要更改用户口令,可以使用set password语句,注意新口令必须使用password()函数加密。

例如:更改账号bob的口令。

set password for bob=password('newpassword');

以上SQL语句中,如果省略账号,则就是更新当前登录用户的口令:

set password=password('newpassword');