MySQL中授权(grant)和撤销授权(revoke)

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

[sql] view plaincopyprint?

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

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

[sql] view plaincopyprint?

  1. grant select on testdb.* to [email protected]‘%‘
  2. grant insert on testdb.* to [email protected]‘%‘
  3. grant update on testdb.* to [email protected]‘%‘
  4. grant delete on testdb.* to [email protected]‘%‘

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

[sql] view plaincopyprint?

  1. grant select, insert, update, delete on testdb.* to [email protected]‘%‘

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

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

[sql] view plaincopyprint?

  1. grant create on testdb.* to [email protected]‘192.168.0.%‘;
  2. grant alter  on testdb.* to [email protected]‘192.168.0.%‘;
  3. grant drop   on testdb.* to [email protected]‘192.168.0.%‘;

grant 操作 MySQL 外键权限:

[sql] view plaincopyprint?

  1. grant references on testdb.* to [email protected]‘192.168.0.%‘;

grant
操作 MySQL 临时表权限:

[sql] view plaincopyprint?

  1. grant create temporary tables on testdb.* to [email protected]‘192.168.0.%‘;

grant
操作 MySQL 索引权限:

[sql] view plaincopyprint?

  1. grant index on testdb.* to [email protected]‘192.168.0.%‘;

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

[sql] view plaincopyprint?

  1. grant create view on testdb.* to [email protected]‘192.168.0.%‘;
  2. grant show   view on testdb.* to [email protected]‘192.168.0.%‘;

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

[sql] view plaincopyprint?

  1. grant create routine on testdb.* to [email protected]‘192.168.0.%‘; -- now, can show procedure status
  2. grant alter  routine on testdb.* to [email protected]‘192.168.0.%‘; -- now, you can drop a procedure
  3. grant execute        on testdb.* to [email protected]‘192.168.0.%‘;

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

[sql] view plaincopyprint?

  1. grant all privileges on testdb to [email protected]‘localhost‘

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

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

[sql] view plaincopyprint?

  1. grant all on *.* to [email protected]‘localhost‘

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

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

[sql] view plaincopyprint?

  1. grant select on *.* to [email protected]; -- dba 可以查询 MySQL 中所有数据库中的表。
  2. grant all    on *.* to [email protected]; -- dba 可以管理 MySQL 中的所有数据库

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

[sql] view plaincopyprint?

  1. grant select on testdb.* to [email protected]; -- dba 可以查询 testdb 中的表。

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

[sql] view plaincopyprint?

  1. grant select, insert, update, delete on testdb.orders to [email protected];

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

[sql] view plaincopyprint?

  1. grant select(user_id,username) on smp.users to [email protected]‘%‘ identified by ‘123345‘;
  2. grant select on smp.mo_sms to [email protected]‘%‘ identified by ‘123345‘;

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

[sql] view plaincopyprint?

  1. grant select(id, se, rank) on testdb.apache_log to [email protected];

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

[sql] view plaincopyprint?

  1. grant execute on procedure testdb.pr_add to ‘dba‘@‘localhost‘
  2. grant execute on function testdb.fn_add to ‘dba‘@‘localhost‘

六、查看 MySQL 用户权限

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

[sql] view plaincopyprint?

  1. show grants;

查看其他 MySQL 用户权限:

[sql] view plaincopyprint?

  1. show grants for [email protected];

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

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

[sql] view plaincopyprint?

  1. grant  all on *.* to   [email protected];
  2. revoke all on *.* from [email protected];

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

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

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

[sql] view plaincopyprint?

  1. grant select on testdb.* to [email protected] with grant option;

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

补充:

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表指定列级权限。这里指定的权限适用于一个表的特定列。

http://blog.csdn.net/andy_yf/article/details/7487519

时间: 2024-07-29 13:16:08

MySQL中授权(grant)和撤销授权(revoke)的相关文章

MySQL中授权(grant)和撤销授权(revoke)命令之用法

MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器 授权->确定用户是否拥有足够的权限执行查询请求等. 如果认证不成功的话,哪么授权肯定是无法进行的. revoke 跟 grant 的语法差不多,只需要把关键字 "to" 换成 "from" 表 GRANT和REVOKE管理的权限 权限 描述 ALL PRIVILEGES 影响除WITH GRANT OPTION之外的所有权限 ALTER 影响ALTER TABLE命令的使用

mysql中授权(grant)和撤销授权(revoke)命令用法

MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器 授权->确定用户是否拥有足够的权限执行查询请求等. 如果认证不成功的话,哪么授权肯定是无法进行的. revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 表 GRANT和REVOKE管理的权限 权限 描述 ALL PRIVILEGES 影响除WITH GRANT OPTION之外的所有权限 ALTER 影响ALTER TABLE命令的使用 ALTER ROUTINE 影响创建存储

修改MySQL中权限,为远程授权

在进入mysql之后,输入相应的语句: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; 其中'myuser'.'mypassword' 需要替换成实际的用户名和密码. 例如GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'admin' WITH GRANT OPTION; 可能会报错,如下: ERROR

MySql中添加用户,新建数据库,用户授权,删除用户,修改密码

MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 创建用户: mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234")); 这样就创建了一个名为:test 密码为:

Mysql授权GRANT ALL PRIVILEGES

1. 改表法. 可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改成"%" Sql代码 1. mysql -u root -pvmwaremysql>use mysql; 2. mysql>update user set hos

Mysql添加用户,给用户授权

创建用户 ? 1 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username – 你将创建的用户名 host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,  如 果想让该用户可以从任意远程主机登陆,可以使用通配符% password –  该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登 陆服务器 例子: ? 1 2 3 4 5 CREATE USER 'javacui'@

在SQL Server中创建用户角色及授权

参考文献 http://database.51cto.com/art/201009/224075.htm 正文 要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权: 获得准许连接 SQL Server 服务器的权利: 获得访问特定数据库中数据的权利(select, update, delete, create table ...). 假设,我们准备建立一个 dba 数据库帐户,用来管理数据库 mydb. 1. 首先在 SQL Server 服务器级别,创建登陆帐户(cr

[转].net中的认证(authentication)与授权(authorization)

本文转自:http://www.cnblogs.com/yjmyzz/archive/2010/08/29/1812038.html 注:这篇文章主要给新手看的,老手们可能会觉得没啥营养,就请绕过吧. "认证"与"授权"是几乎所有系统中都会涉及的概念,通俗点讲: 认证(authentication) 就是 "判断用户有没有登录?",好比windows系统,没登录就无法使用(不管你是用Administrator或Guest用户,总之要先正确登录后,

MySQL数据库用户、角色、授权

登录MySQL > mysql -h192.168.56.1 -P33060 -uroot -p Enter password: **** 1. 添加用户 insert into mysql.user(host,user,password) values('%', 'xiaoming', password('xiaoming123')); 现在可以使用帐号(xiaoming,xiaoming123)登录MySQL了.但是只有默认权限,仅能操作两个数据库,information_schema和te