12.3 权限管理
账户权限信息被存储在MySQL数据库的user、db、host、tables_priv、columns_priv和proce_prive,启动时,这些数据就被存在内存中
12.3.1 MySQL的各种权限
GRANT表与REVOKE表CREATE和DROP权限,可以创建新数据库和表,或删除(移摊)已有数据库和表。如果将MySQL数据库中的DROP权限授予某用户,用户可以删掉MySOL访问权限保存的数据库。SELECT、INSERT、UPDATE和DELETE权限允许在一个数据库现有的表上实施操作。SELECT权限只有在它们真正从一个表中检索行时才被用到。INDEX权限允许创建或删除索引,INDEX适用已有表。如果具有某个表的CREATE权限,可以在CREATE TABLE语句中包括索引定义。ALTER权限,可以使用ALTER TABLE来更改表的结构和重新命名表。CREATE ROUTINE权限来创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序,EXECUTE权限用来执行保存的程序。GRANT权限允许授权给其他用户。可用于数据库、表和保存的程序。FILE权限给予用户使用LOAD DATA INFILE和SELECT .. INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL服务器上的任何文件。(说明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件)。FILE权限允许用户在MySQL服务器具有写权限的目录下创建新文件,但不能覆盖已有文件。
其余的权限
reload命令告诉服务器将授权表重新读入内存;fush-privileges是reload的同义词;refresh命令清空所有表并关闭/打开记录文件:其他fush-xxx命令执行类似refresh的功能,但是范围更有限,并且在某些情况下可能更好用。shutdown命令关掉服务器。只能从MySQLadmin发出命令。processlist命令显示在服务器内执行的线程的信息(即其他账户相关的客户端执行的语句。kill命令语句)。kill命令杀死服务器线程。用户总是能显示或杀死自己的线程,但是需要PROCESS权限来显示或杀死其他用户和SUPER权限启动的线程。kill命令能用来终止其他用户或更改服务器的操作方式。
12.3.2 授权
给用户授权
全局层级
全局权限适合用于一个给定服务器中的所有数据库。这些权限存储在MySQL.user表中。
GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限数据库层级
数据库权限适用与一个给定数据库中的所有目标。这些权限存储在MySQL.db和MySQL.host表中。
GRANT ALL ON db_name和REVOKE ALL ON db_name值授予和撤销数据库权限表层级
表权限适用于一个给定表中的所有列,这些权限存储在MySQL.tables.priv表中。
GRANT ALL ON db_name.tab_name和REVOKE ALL ON db_name.tab_name只授予和撤销表权限列层级
列层级适用于一个给定表中的单一列。这些权限存在MySQL.columns_priv表中。当使用
REVOKE时,必须指定与被授权列相同的列子程序层级
CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT权限适用于已存储的子程序,权限可以授予到全局和数据库层级。除了CREATE ROUTINE外,都可以授予到子程序层级,并存储在MySQL.proce_priv表中。必须拥有GRANT权限的用户才可以执行GRANT语句,使用GRANT或REVOKE,必须拥有GRANT OPTION权限,并必须用于正在授权或撤销的权限,GRANT语法如下:备注:
priv_type:权限类型
columns:表示权限用在那些列上,不指定参数,表示作用再整表
table1...:授权的列所在表
object_type:指定授权作用的对象类型,按顺序——表,函数,存储过程备注2:
WITH关键字后可以跟一个或多个GRANT OPTION,取值:
GRANT OPTION:被授权的用户可以将这些权限赋予别的用户。
MAX_QUERIES_PER_HOUR count:设置每个小时可以执行count次查询
MAX_UPDATES_PER_HOUR count:设置每个小时可以执行count次更新
MAX_CONNECTIONS_PER_HOUR count:设置每个小时可以建立count次连接
MAX_USER_CONNECTIONS count:设置单个用户可以建立count次连接
12.3.3 收回权限
取消某些用户的某些权限,收回后,记录从db、host、tables_priv和columns_priv表中删除,但账号依旧在user表中
应先收回用户权限,后删除用户
或
备注:
priv_type:表示权限类型
columns:表示权限作用列
tab:表示在那些表上
举例:
12.3.4 查看权限
最后更新于
这有帮助吗?