设为首页 加入收藏

TOP

MySQL优化之――权限管理(三)
2015-07-24 11:53:49 来源: 作者: 【 】 浏览:9
Tags:MySQL 优化 权限 管理

允许使用DROP TABLE

EXECUTE

允许用户运行已存储的子程序

FILE

允许使用SELECT...INTO OUTFILE和LOAD DATA INFILE

INDEX

允许使用CREATE INDEX和DROP INDEX

INSERT

允许使用INSERT

LOCK TABLES

允许对您拥有SELECT权限的表使用LOCK TABLES

PROCESS

允许使用SHOW FULL PROCESSLIST

REFERENCES

未被实施

RELOAD

允许使用FLUSH

REPLICATION CLIENT

允许用户询问从属服务器或主服务器的地址

REPLICATION SLAVE

用于复制型从属服务器(从主服务器中读取二进制日志事件)

SELECT

允许使用SELECT

SHOW DATABASES

SHOW DATABASES显示所有数据库

SHOW VIEW

允许使用SHOW CREATE VIEW

SHUTDOWN

允许使用mysqladmin shutdown

SUPER

允许使用CHANGE MASTER, KILL, PURGE MASTER LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。

UPDATE

允许使用UPDATE

USAGE

“无权限”的同义词

GRANT OPTION

允许授予权限

当从旧版本的MySQL升级时,要使用EXECUTE, CREATE VIEW, SHOW VIEW, CREATE USER, CREATE ROUTINE和ALTER ROUTINE权限


授权

授权就是为某个用户授予权限

授予的权限可以分为多个层级:

· 全局层级

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

· 数据库层级

数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ONdb_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表中。

当后续目标是一个表、一个已存储的函数或一个已存储的过程时,object_type子句应被指定为TABLE、FUNCTION或PROCEDURE。当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权表

使用GRANT语句创建一个新用户grantUser,密码为“grantpwd”

用户对所有的数据有查询、插入权限,并授予GRANT权限

?

GRANT SELECT ,INSERT ON *.*TO 'grantUser'@'localhost' identified BY '123456' WITH GRANT OPTION ;

?

\

查询显示grantUser被创建成功,并赋予了SELECT、INSERT、GRANT权限,其相应字段值为Y

被授予GRANT权限的用户可以登录MYSQL并创建其他用户帐户,在这里是grantUser的用户


收回权限

收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。

使用REVOKE收回权限之后,用户帐户的记录将从db、host、tables_priv、columns_priv表中删除,但是用户帐号记录依然

在user表中保存。

语法

?

REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...
    ON [object_type] {tbl_name | * | *.* | db_name.*}
    FROM user [, user] ...

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

?

使用REVOKE语句,必须拥有mysql数据库的全局CREATE权限或UPDATE权限

使用REVOKE语句取消用户grantUser的INSERT权限

?

REVOKE INSERT ON *.* FROM 'grantUser'@'localhost';

?

\

可以看到grantUser用户的INSERT权限已经被收回了

注意:当从旧版本的MYSQL升级时,如果要使用EXECUTE、CREATE VIEW、SHOW VIEW、CREATE USER、CREATE ROUTINE、ALTER ROUTINE

权限,必须先升级授权表


查看权限

SHOW GRANT语句可以显示用户的权限信息

语法

?

show grants FOR 'user'@'host';

?

使用SHOW GRANT语句查询用户grantUser的权限信息

?

show grants FOR 'grantUser'@'localhost';

?

\

返回结果显示了user表中的帐户信息;接下来以为GRANT SELECT ON关键字开头,表示用户被授予了SELECT权限;

*.*表示SELECT权限作用于所有数据库的所有数据表;

IDENTIFIED BY 后面的为用户加密后的密码

在这里,只是定义了个别的用户权限,GRANT可以显示更加详细的权限信息,包括全局级的和非全局级的权限

如果表层级或者列层级的权限被授予用户的话,他们也能在结果中显示出来。


查看MYSQL里面匿名用户

如果有匿名用户,那么客户端就可以不用密码登录MYSQL数据库,这样就会存在安全隐患

检查匿名用户的方法

?

SELECT * FROM mysql.user WHERE `User`='';

?

\

如果查找到user字段值为空的那条记录,说明存在匿名用户,需要把这条记录删除

如果用匿名用户登录MYSQL就可以看到用户名是空的

\

删除语句

 
 
DELETE FROM mysql.user WHERE `User`=''; SELECT * FROM mysql.user WHERE `User`='';

总结

本文简单的阐述了MYSQL的用户管理和权限方面的内容,希望对大家有帮助

如果大家想更深入学习MYSQL访问控制方面的知识

可以参考这篇文章:MySQL权限的架构体系

核心就是两个图

1、客户端连接请求认证阶段

\

?

2、客户端操作请求认证阶段

\

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Mysql中创建序列的方法 下一篇mysql技术内幕之InnoDBInsert(插..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)