MySQL用户帐号管理主要用grant(授权)和revoke(撤权)两个SQL指令来管理。这两个指令实质是通过操作user(连接权限和全局权限)、db(数据库级权限)、tables_priv(数据表级权限)、columns_priv(数据列级权限)四个权限表来分配权限的。host权限表不受这两个指令影响。下面将会详细介绍用户权限管理的内容。
本文由网页教学网(http://www.phpstudy.net)整理发布!转载请注明出处,谢谢!
GRANT语法说明:
GRANT privileges (columns) #privileges表示授予的权限,columns表示作用的列(可选) ON what #设置权限级别,全局级、数据库级、数据表级和数据列级 TO account #权限授予的用户,用"user_name"@"host_name"这种用户名、主机名格式 IDENTIFIED BY 'password' #设置用户帐号密码 REQUIRE encryption requirements #设置经由SSL连接帐号 WITH grant or resource management options; #设置帐号的管理和资源(连接服务器次数或查询次数等)选项
示例:
mysql>grant all on db.* to 'test'@'localhost' identified by 'test'; 上例运行后的效果是,test用户只能通过‘test’密码从本机访问db数据库 mysql>grant all on db.* to 'test'@'%' identified by 'test'; 上例运行后的效果是,test用户可通过‘test’密码从任意计算机上访问db数据库。‘%’代表任意字符,‘_’代表一个任意字符。主机名部份还可以是IP地址。
如果没有给定主机部份,则默认为任意主机,也就是'test'和'test'@'%'是等价的。 |
Table 4.1. 访问权限表
权限 | 权限说明 |
---|---|
CREATE TEMPORARY TABLES | 创建临时数据表 |
EXECUTE | 执行存储过程(暂不支持) |
FILE | 操作系统文件 |
GRANT OPTION | 可把本帐号的权限授予其它用户 |
LOCK TABLES | 锁定指定数据表 |
PROCESS | 查看运行着的线程信息 |
RELOAD | 重新加载权限表或刷新日志及缓冲区 |
REPLICATION CLIENT | 可查询主/从服务器主机名 |
REPLICATION SLAVE | 运行一个镜像从服务器 |
SHOW DATABASES | 可运行SHOW DATABASES指令 |
SHUTDOWN | 关闭数据库服务器 |
SUPER | 可用kill终止线程以及进行超级用户操作 |
ALTER | 可修改表和索引的结构 |
CREATE | 创建数据库和数据表 |
DELETE | 删除数据表中的数据行 |
DROP | 删除数据表和数据行 |
INDEX | 建立或删除索引 |
INSERT | 插入数据行 |
REFERENCES | (暂时不支持) |
SELECT | 查询数据行 |
UPDATE | 更新数据行 |
ALL | 所有权限,但不包括GRANT。 |
USAGE | 无权限权限 |
Table 4.2. 权限作用范围(由ON子句设置)
权限限定符 | 作用范围 |
---|---|
ON *.* | 全局级权限,作用于所有数据库 |
ON * | 全局级权限,若未指定默认数据库,其作用范围是所有数据库,否则,其作用范围是当前数据库 |
ON db_name.* | 数据库级权限,作用于指定数据库里的所有数据表 |
ON db_name.tbl_name | 数据表级权限,作用于数据表里的所有数据列 |
ON tbl_name | 数据表级权限,作用于默认数据库中指定的数据表里的所有数据列 |
USAGE权限的用法:修改与权限无关的帐户项,如:
mysql>GRANT USAGE ON *.* TO account IDENTIFIED BY 'new_password'; #修改密码 mysql>GRANT USAGE ON *.* TO account REQUIRE SSL; #启用SSL连接 mysql>GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 10; #设置资源
拥有WITH GRANT OPTION权限的用户可把自已所拥用的权限转授给其他用户,如:
mysql>GRANT ALL ON db.* TO 'test'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; 这样test用户就有权把该权限授予其他用户。
限制资源使用,如:
mysql>GRANT ALL ON db.* TO account IDENTIFIED BY 'password' WITH MAX_CONNECTIONS_PER_HOUR 10 MAX_QUERIES_PER_HOUR 200 MAX_UPDATES_PER_HOUR 50; 允许account用户每小时最多连接20次服务器,每小时最多发出200条查询命令(其中更新命令最多为50条)
默认都是零值,即没有限制。FLUSH USER_RESOURCES和FLUSH PRIVILEGES可对资源限制计数器清零。
REVOKE语法说明:
mysql>REVOKE privileges (columns) ON what FROM account;
示例:
mysql>REVOKE SELECT ON db.* FROM 'test'@'localhost'; 删除test帐号从本机查询db数据库的权限
REVOKE可删除权限,但不能删除帐号,即使帐号已没有任何权限。所以user数据表里还会有该帐号的记录,要彻底删除帐号,需用DELETE命令删除user数据表的记录,如:
% mysql -u root -p mysql>use mysql mysql>DELETE FROM user where User='test' and Host='localhost'; mysql fulsh privileges;
REVOKE不能删除REQUIRE和资源占用的配置。他们是要用GRANT来删除的,如:
GRANT USAGE ON *.* TO account REQUIRE NONE; #删除account帐号的SSL连接选项 GRANT USAGE ON *.* TO account WITH MAX_CONNECTIONS_PER_HOUR 0 MAX_QUERIES_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0; #删除account帐号的资源限制