mysql全局层级授权方法_mysql 的权限体系介绍

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可以从任何地址访问本地的数据库,默认可以省略。还可以是 “该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。.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] …

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

注意:

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)

 
 

 

 

公司简介

 

自1996年以来,公司一直专注于域名注册、虚拟主机、服务器托管、网站建设、电子商务等互联网服务,不断践行"提供企业级解决方案,奉献个性化服务支持"的理念。作为戴尔"授权解决方案提供商",同时提供与公司服务相关联的硬件产品解决方案。
备案号: 豫ICP备05004936号-1

联系方式

地址:河南省郑州市经五路2号

电话:0371-63520088

QQ:76257322

网站:800188.com

电邮:该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。