MySQL 知识量:16 - 40 - 165
在创建用户账号后,必须接着分配访问权限。新创建的用户账号没有访问权限,能够登录MySQL,但是不能查看数据,也不能执行任何数据库操作。
可以使用show grants for语句查看账号的权限:
show grants for bob;
查询结果:
+---------------------------------+ | Grants for bob@% | +---------------------------------+ | GRANT USAGE ON *.* TO 'bob'@'%' | +---------------------------------+
usage on *.*表示账号bob在任意数据库和任意表上对任何东西都没有权限。
MySQL的权限使用用户名和主机名结合定义。如果不指定主机名,则使用默认的主机名%,即授予用户访问权限而不管主机名。
可以使用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'@'%' | +----------------------------------------------------------------+
撤销访问权限使用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时,用户账号必须存在,但是所涉及的对象(数据库、表、列等)则没有这个要求。因此,当某个数据库或表被删除后,相关的访问权限仍然存在,当重新建立这些数据库或表时,这些权限依然起作用。
要更改用户口令,可以使用set password语句,注意新口令必须使用password()函数加密。
例如:更改账号bob的口令。
set password for bob=password('newpassword');
以上SQL语句中,如果省略账号,则就是更新当前登录用户的口令:
set password=password('newpassword');
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6