您的位置:首页 > 其它

一个真实而感人的故事

2009-05-06 20:14 274 查看


MySQL grant 语法的详细解析

上面的解析已经很详细了,但是还有中情况,一个用户对应多个数据库的情况:

 

 

grant all on `数据库名%`.* to '用户名'@'IP'  identified by '密码'

 

mysql支持通配符
当把带引号的值是,需使用反勾号(‘`’)为数据库、表、列和子程序名称加引号。使用单引号(‘'’)为hostnames、usernames和
密码加引号 .在数据库名一项可以使用%来选择一类数据库,还可以使用“_”

 

 

MySQL用户帐号管理主要用grant(授权)和revoke(撤权)两个SQL指令来管理。这两个指令实质是通过操作user(连接权限和全局
权限)、db(数据库级权限)、tables_priv(数据表级权限)、columns_priv(数据列级权限)四个权限表来分配权限的。host权
限表不受这两个指令影响。下面将会详细介绍用户权限管理的内容。

本文由网页教学网(http://www.webjx.com
)整理发布!转载请注明出处,谢谢!

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 M
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: