[转帖]mysql 的权限体系介绍_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2333 | 回复: 0   主题: [转帖]mysql 的权限体系介绍        下一篇 
xiaojiang
注册用户
等级:少尉
经验:345
发帖:77
精华:0
注册:2011-8-31
状态:离线
发送短消息息给xiaojiang 加好友    发送短消息息给xiaojiang 发消息
发表于: IP:您无权察看 2014-11-6 9:41:30 | [全部帖] [楼主帖] 楼主

Mysql 的权限体系大致分为5个层级:
全局层级

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。

数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。

表层级
表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。

列层级
列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。

子程序层级
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。

这些权限信息存储在下面的系统表中:

mysql.user
mysql.db
mysql.host
mysql.table_priv
mysql.column_priv


当用户连接进来,mysqld会通过上面的这些表对用户权限进行验证!

注意:

当后续目标是一个表、一个已存储的函数或一个已存储的过程时,object_type子句应被指定为TABLE、FUNCTION或PROCEDURE。当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权表。请
我们可以用 CREATE USER 或 GRANT 创建用户,后者还同时分配相关权限。而 REVOKE 则用于删除用户权限,DROP USER 删除账户。

MySQL 赋予用户权限命令语法为:

grant 权限 on 数据库对象 to 用户;
grant 权限 on 数据库对象 to 用户 identified by “密码”;
grant 权限 on 数据库对象 to 用户@”ip” identified by “密码”

GRANT 语法:

GRANT privileges (columns)
ON what
TO user IDENTIFIED BY “password”
WITH GRANT OPTION;


privileges 列表:

* ALTER: 修改表和索引。
* CREATE: 创建数据库和表。
* DELETE: 删除表中已有的记录。
* DROP: 抛弃(删除)数据库和表。
* INDEX: 创建或抛弃索引。
* INSERT: 向表中插入新行。
* REFERENCE:未使用。
* SELECT: 检索表中的记录。
* UPDATE: 修改现存表记录。
* FILE: 读或写服务器上的文件。
* PROCESS: 查看服务器中执行的线程信息或杀死线程。
* RELOAD: 重载授权表或清空日志、主机缓存或表缓存。
* SHUTDOWN: 关闭服务器。
* ALL: 所有权限,ALL PRIVILEGES同义词。
* USAGE: 特殊的 “无权限” 权限。

user 账户包括 “username” 和 “host” 两部分 即是username@host,后者表示该用户被允许从何地接入。user@’%’表示用户user可以从任何地址访问本地的数据库,默认可以省略。还可以是 “user@10.250.7.%“、”user1@%.abc.com” 等。数据库格式为 db.table,可以是 “test.*” 或 “*.*”,前者表示 test 数据库的所有表,后者表示所有数据库的所有表。
子句 “WITH GRANT OPTION” 表示该用户可以为其他用户分配权限。使用grant 命令创建用户或者进行授权之后,需要使用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,或者重新启动mysql服务器,来使新设置生效。当然后者并不是一种好想法!

比如:

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

 grant select, insert, update, delete on test.* to yangql402@’%’;


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

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

 grant create on test.* to yangql402@’10.250.7.225′;
grant alter  on test.* to yangql402@’10.250.7.225′;
grant drop   on test.* to yangql402@’10.250.7.225′;


grant 操作 MySQL 外键权限,官方文档上说未使用!

grant references on test.* to yangql402@’10.250.7.225′;


grant 操作 MySQL 临时表权限。

grant create temporary tables on test.* to yangql402@’10.250.7.225′;


grant 操作 MySQL 索引权限。

grant index on test.* to yangql402@’10.250.7.225′;


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

grant create view on test.* to yangql402@’10.250.7.225′;
grant show   view on test.* to yangql402@’10.250.7.225′;


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

grant create routine on test.* to yangql402@’10.250.7.225′;
grant alter routine on test.* to yangql402@’10.250.7.225′;
grant execute        on test.* to yangql402@’10.250.7.225′;


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

grant all privileges on test to dba@’localhost’


其中,关键字 “privileges” 可以省略。
四 grant 高级 DBA 管理 MySQL 中所有数据库的权限。

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


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

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

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


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

 grant select on test.* to dba@localhost; — dba 可以查询 test 中的表。


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

 grant select, insert, update, delete on test.yql8 to dba@localhost;


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

 grant select(id, se, rank) on test.yql8 to dba@localhost;


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

 grant execute on procedure test.yql8 to ‘dba’@'localhost’;
grant execute on function test.yql8 to ‘dba’@'localhost’;


六 查看用户权限

查看当前用户自己的权限:

 show grants;


查看其他 MySQL 用户权限:

 show grants for dba@localhost;


七 撤销用户权限

使用revoke 命令来注销用户的权限,具体语法:

要撤销所有权限,需使用以下语法。此语法用于取消对于已命名的用户的所有全局层级、数据库层级、表层级和列层级的权限。

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] …


也可以指定具体的权限比如:

REVOKE SELECT FROM yangql402@”10.250.7.249“;


注意:

1 使用GRANT或REVOKE,操作者必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。
2 使用REVOKE撤销全部权限,操作者必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。

八 删除用户:

DROP USER user;


其中user 账户包括 “username” 和 “host” 两部分 即是username@host;如果创建的时候为yangql@”10.250.7.225“,则删除的时候必须使用

drop user yangql@”10.250.7.225“,否则会报错!
mysql> drop user yangql402;
ERROR 1396 (HY000): Operation DROP USER failed for ‘yangql402′@’10.250.7.225′
mysql> drop user yangql402@’10.250.7.225′;
Query OK, 0 rows affected (0.01 sec)


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论