MySQL的Grant命令

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

与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中的操作权限 

ALTER Allows use of ALTER TABLE.
ALTER ROUTINE Alters or drops stored routines.
CREATE Allows 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.
DROP Allows 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.
REPLICATION Allows the user to ask where slave or master
CLIENT servers are.
REPLICATION SLAVE Needed for replication slaves.
SELECT Allows 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,如需转载请自行联系原作者。


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 关系型数据库 MySQL
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
40 0
|
3月前
|
关系型数据库 MySQL 数据库
Python tk dos命令备份mysql数据库
Python tk dos命令备份mysql数据库
24 0
|
1月前
|
SQL 关系型数据库 MySQL
|
13天前
|
关系型数据库 MySQL
如何解决cmd命令窗口无法运行mysql命令的问题
如何解决cmd命令窗口无法运行mysql命令的问题
8 0
|
1月前
|
存储 关系型数据库 MySQL
|
1月前
|
关系型数据库 MySQL Linux
MySQL启动与登录命令详解
【2月更文挑战第27天】
49 1
MySQL启动与登录命令详解
|
1月前
|
SQL 存储 关系型数据库
|
2月前
|
存储 关系型数据库 MySQL
MySQL技能完整学习列表6、查询优化——1、EXPLAIN命令的使用——2、索引优化
MySQL技能完整学习列表6、查询优化——1、EXPLAIN命令的使用——2、索引优化
22 0
|
3月前
|
关系型数据库 MySQL 数据库
MySQL命令笔记+Python案例
MySQL命令笔记+Python案例
47 0
|
3月前
|
存储 关系型数据库 MySQL
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
29 0