MySQL的Grant命令

本文详细介绍MySQL用户权限管理的方法,包括创建用户、授权、更改密码、撤销权限和删除用户等操作。此外,还提供了如何查看用户权限及一些注意事项。

与mysql 有关的博文还有

MySQL数据库管理用户权限

 

Mysql 远程登录及常用命令

一, 创建用户: 

命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 

说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器. 

例子: CREATE USER 'dog'@'localhost' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'192.168.1.101_' IDENDIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY '123456'; 
CREATE USER 'pig'@'%' IDENTIFIED BY ''; 
CREATE USER 'pig'@'%'; 

二,授权: 

命令:GRANT privileges ON databasename.tablename TO 'username'@'host' 

说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*. 

例子: GRANT SELECT, INSERT ON test.user TO 'pig'@'%'; 
GRANT ALL ON *.* TO 'pig'@'%'; 

注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令: 
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION; 

三.设置与更改用户密码 

命令:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword"); 

例子: SET PASSWORD FOR 'pig'@'%' = PASSWORD("123456"); 

四.撤销用户权限 

命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host'; 

说明: privilege, databasename, tablename - 同授权部分. 

例子: REVOKE SELECT ON *.* FROM 'pig'@'%'; 

注意: 假如你在给用户'pig'@'%'授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO 'pig'@'%', 则在使用REVOKE SELECT ON *.* FROM 'pig'@'%';命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON *.* TO 'pig'@'%';则REVOKE SELECT ON test.user FROM 'pig'@'%';命令也不能撤销该用户对test数据库中user表的Select 权限. 

具体信息可以用命令SHOW GRANTS FOR 'pig'@'%'; 查看. 

五.删除用户 

命令: DROP USER 'username'@'host'; 

附表:在MySQL中的操作权限 

ALTERAllows use of ALTER TABLE.
ALTER ROUTINE Alters or drops stored routines.
CREATEAllows use of CREATE TABLE.
CREATE ROUTINE Creates stored routines.
CREATE TEMPORARY TABLE Allows use of CREATE TEMPORARY TABLE.
CREATE USER Allows use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES.
CREATE VIEW Allows use of CREATE VIEW.
DELETE Allows use of DELETE.
DROPAllows use of DROP TABLE.
EXECUTE Allows the user to run stored routines.
FILE Allows use of SELECT... INTO OUTFILE and LOAD DATA INFILE.
INDEX Allows use of CREATE INDEX and DROP INDEX.
INSERT Allows use of INSERT.
LOCK TABLES Allows use of LOCK TABLES on tables for which the user also has SELECT privileges.
PROCESS Allows use of SHOW FULL PROCESSLIST.
RELOAD Allows use of FLUSH.
REPLICATIONAllows the user to ask where slave or master
CLIENTservers are.
REPLICATION SLAVE Needed for replication slaves.
SELECTAllows use of SELECT.
SHOW DATABASES Allows use of SHOW DATABASES.
SHOW VIEW Allows use of SHOW CREATE VIEW.
SHUTDOWN Allows use of mysqladmin shutdown.
SUPER Allows use of CHANGE MASTER, KILL, PURGE MASTER LOGS, and SET GLOBAL SQL statements. Allows mysqladmin debug command. Allows one extra connection to be made if maximum connections are reached.
UPDATE Allows use of UPDATE.
USAGE Allows connection without any specific privileges.

   http://www.jb51.net/article/31850.htm

 

来源:http://yingxiong.javaeye.com/blog/451208

 

本文实例,运行于 MySQL 5.0 及以上版本。

MySQL 赋予用户权限命令的简单格式可概括为:

grant  权限  on  数据库对象  to  用户

 

 

 

一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。

grant select on  testdb. * to  common_user@ ' % '
grant insert on  testdb. * to  common_user@ ' % '
grant update on  testdb. * to  common_user@ ' % '
grant delete on  testdb. * to  common_user@ ' % '

或者,用一条 MySQL 命令来替代:

grant select insert update delete on  testdb. * to  common_user@ ' % '

 

 

 

二、grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。

grant 创建、修改、删除 MySQL 数据表结构权限。

grant create on  testdb. * to  developer@ ' 192.168.0.% ' ;
grant alter on  testdb. * to  developer@ ' 192.168.0.% ' ;
grant drop  on  testdb. * to  developer@ ' 192.168.0.% ' ;

 

grant 操作 MySQL 外键权限。

grant references on  testdb. * to  developer@ ' 192.168.0.% ' ;

 

grant 操作 MySQL 临时表权限。

grant create temporary  tables  on  testdb. * to  developer@ ' 192.168.0.% ' ;

 

grant 操作 MySQL 索引权限。

grant index on  testdb. * to  developer@ ' 192.168.0.% ' ;

 

grant 操作 MySQL 视图、查看视图源代码 权限。

grant create view on  testdb. * to  developer@ ' 192.168.0.% ' ;
grant  show  view on  testdb. * to  developer@ ' 192.168.0.% ' ;

 

grant 操作 MySQL 存储过程、函数 权限。

grant create  routine  on  testdb. * to  developer@ ' 192.168.0.% ' --  now, can show procedure status
grant alter  routine  on  testdb. * to  developer@ ' 192.168.0.% ' --  now, you can drop a procedure
grant execute on  testdb. * to  developer@ ' 192.168.0.% ' ;

 

 

 

三、grant 普通 DBA 管理某个 MySQL 数据库的权限。

grant all privileges on  testdb  to  dba@ ' localhost '

其中,关键字 “privileges” 可以省略。

 

 


四、grant 高级 DBA 管理 MySQL 中所有数据库的权限。

grant all on * . * to  dba@ ' localhost '

 

 

 

五、MySQL grant 权限,分别可以作用在多个层次上。

1. grant 作用在整个 MySQL 服务器上:

grant select on * . * to  dba @localhost --  dba 可以查询 MySQL 中所有数据库中的表。
grant all on * . * to  dba @localhost --  dba 可以管理 MySQL 中的所有数据库

 

2. grant 作用在单个数据库上:

grant select on  testdb. * to  dba @localhost --  dba 可以查询 testdb 中的表。

 

3. grant 作用在单个数据表上:

grant select insert update delete on  testdb.orders  to  dba @localhost ;

 

这里在给一个用户授权多张表时,可以多次执行以上语句。例如:

grant select ( user_id ,username)  on  smp.users  to  mo_user@ ' % '  identified  by ' 123345 ' ;
grant select on  smp.mo_sms  to  mo_user@ ' % '  identified  by ' 123345 ' ;


4. grant 作用在表中的列上:

grant select (id, se, rank)  on  testdb.apache_log  to  dba @localhost ;

 

5. grant 作用在存储过程、函数上:

grant execute on procedure  testdb.pr_add  to ' dba ' @ ' localhost '
grant execute on function  testdb.fn_add  to ' dba ' @ ' localhost '

 

 

 

六、查看 MySQL 用户权限

查看当前用户(自己)权限:

show grants;

 

查看其他 MySQL 用户权限:

show grants  for  dba @localhost ;

 

 

 

七、撤销已经赋予给 MySQL 用户权限的权限。

revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:

grant all on * . * to  dba @localhost ;
revoke all on * . * from  dba @localhost ;

 

 

 

八、MySQL grant、revoke 用户权限注意事项

1. grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

2. 如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“

grant select on  testdb. * to  dba @localhost with grant option ;

这个特性一般用不到。实际中,数据库权限最好由 DBA 来统一管理。

 

 

 

*************************************************************************************************

 

遇到 SELECT command denied to user '用户名'@'主机名' for table '表名' 这种错误,解决方法是需要把吧后面的表名授权,即是要你授权核心数据库也要。

我遇到的是SELECT command denied to user 'my'@'%' for table 'proc',是调用存储过程的时候出现,原以为只要把指定的数据库授权就行了,什么存储过程、函数等都不用再管了,谁知道也要把数据库mysql的proc表授权

 

*************************************************************************************************

参考:http://zhidao.baidu.com/question/19633785.html

 

mysql授权表共有5个表:user、db、host、tables_priv和columns_priv。

授权表的内容有如下用途:
user表
user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。

db表
db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表

host表
host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。

tables_priv表
tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列

columns_priv表
columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列



本文转自茄子_2008博客园博客,原文链接:http://www.cnblogs.com/xd502djj/p/3548283.html,如需转载请自行联系原作者。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值