mysql权限
最简单的mysql权限
相信很多人都说过一句玩笑话,删库跑路哈哈哈~说到删库跑路,那么你是否了解过,如何给mysql设置权限来防止这样的事情发生呢
- 如果你使用的是root权限的账号,你需要给不同的账号来分配权限时,可以使用如下的sql语句来创建对应的账号和权限:
grant SELECT on practice.* TO 'dev'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
这里的practice是指数据库的名称,.*表示该数据库下所有的表,dev表示连接数据库使用的账号名,%表示dev账号可以用所有IP访问,如果@后面是指定IP,则dev账号只能在指定IP上访问. 123表示dev账号对应的密码
- 查看dev对应的权限
show grants for 'dev'@'%';
-
登录dev账号查看权限是否生效
进入dev账号,当我想要删除practice数据库下的test表时,提示我们无法删除,说明权限已经生效.还想删库跑路吗,哈哈
深入研究下 MySQL 权限
用户标识是什么
上面在创建dev账号的过程中,我们能看到,mysql的权限不是单纯赋予给某个用户dev的,而是赋予给"用户+IP"的.比如我们上面创建的dev账号用什么密码登陆,在哪个IP上能登陆,这样才算一个完整的用户标识.
用户权限所涉及的表
mysql中的几张表可以记一下,面试时也是加分项.在我们连接的数据库中都会有这么几张表
这个叫mysql的数据库里面有这么几张表
user,db,table_priv,column_priv,这些表有什么用呢?和权限有什么关系呢?
User 的一行记录代表一个用户标识
db 的一行记录代表对数据库的权限
table_priv 的一行记录代表对表的权限
column_priv 的一行记录代表对某一列的权限
那么接下来我们一起来看看这几张表具体是怎么个意思
新建一个表 account
DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `id` int(11) NOT NULL, `name` varchar(50) DEFAULT NULL, `balance` int(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_balance` (`balance`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
插入几条数据
INSERT INTO `account` VALUES ('1', 'lilei', '900'); INSERT INTO `account` VALUES ('2', 'hanmei', '100'); INSERT INTO `account` VALUES ('3', 'lucy', '250'); INSERT INTO `account` VALUES ('5', 'tom', '0');
创建完成后,当我们使用root账号时可以看到表中所有的字段
那么,如果我不想让dev访问balance列呢
我们先删除下dev下的允许查询所有的权限
REVOKE SELECT on practice.* from 'dev'@'%'
再执行下面这条sql
grant select(id,name) on practice.account to 'dev'@'%';
这时候可以分别看下mysql数据库下的 table_priv,column_priv 的数据
使用dev登陆查询发现查询?不好意思,不允许了
而只查询id和name时是可以的
哈哈,是不是感觉很简单,我们下期再接着盘!
喜欢就点赞收藏吧,你的点赞就是我的动力,在成为架构师的路上我们一起努力~