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帐号的资源限制