那么Mysql的权限是如何实现的呢? MYSQL到底都有哪些权限呢?
部分内容来源CSDN 如未注明 请及时联系我
以下内容是我个人对于mysql的学习和笔记 如有错误之处, 还请大神及时纠正。
作为一名DBA来说权限这一块是需要非常熟练的,作为普通的程序员来说只需要基础的简单的就可以了,当谈到这类问题的时候也能说出个一二来。
在稍微大一点的公司里面都是进行着明显的权限管理。特别是操作数据库这样重要的东西,万一哪天你心情不好删个库啥的,就麻烦了(虽然有备份),所以在公司里面一般一个项目 都会创建一个专门的用户指定其权限只能控制某一个数据库进行操作。
我们在安装Mysql时会自动安装一个名为mysql的数据库。这个数据库下面存储的是权限表。我们可以使用:show databases; use mysql ;命令来查看所有的数据库列表。有很多咱们就不一一列举了就挑几个基本的;
mysql数据库中的3个权限表:user 、db、 host
user表字段的涵义
Host: 主机名,双主键之一,值为%时表示匹配所有主机
%:匹配所有主机
localhost localhost不会被解析成IP地址,直接通过UNIXsocket链接
127.0.0.1 会通过TCP/IP协议连接,并且只能访问本机
∷1 ∷1兼容ipv6的形式,等同于127.0.0.1
User : 用户名,双主键之一
Password:密码名
注意user表中可不止以上这点字段哦 只是挑几个基本的
接下来我们可以从 增 ,删 ,改 ,查 这几个方面简单的来学习
增:
有两种方法来操纵第一种是直接操纵user表(个人建议不推荐)因为容易出错哈哈
insert into user (host,user,password)values('localhost','hehe','123456');
正确的定义方法在下面(规范的来说要用大写,个人感觉小写有利于记忆,等熟练了再改为大写)
创建用户
语法: create user ‘用户名称’ identified by '密码’
注意identified by会将纯文本密码加密作为散列值存储
create user 'tt' identified by '123456';
删除用户
语法 drop user '用户名’
注意 mysql5之前删除用户时必须先使用revoke 删除用户权限,然后删除用户,mysql5之后drop 命令可以删除用户的同时删除用户的相关权限
修改用户名
语法rename user ‘原有用户名’ to '新用户名’
rename user 'tt' to 'xiaobu'
修改密码
语法 set password for [用户名] =password(‘新密码’);
set password for 'xiaobu' = password('147258')
这里有很多种方法 详细了解可参考 忘记用户密码的解决办法[何石的博客]
如果此时登录的话, 查看数据库你会发现并不会查出你之前的数据库
除了这两个什么都没有 因为还没有对该用户进行授权
授权
完整语法 : grant [权限] on [数据库] . [数据表名] to [用户名]@[登录主机] identified by [密码] with grant option;
子句with grant option: 子句 with grant option 表示该用户可以为其他用户分配权限
-------[权限]
ALL:所有权限
ALTER: 修改表和索引。
CREATE: 创建数据库和表。
DELETE: 删除表中已有的记录。
DROP: 抛弃(删除)数据库和表。
INDEX: 创建或抛弃索引。
INSERT: 向表中插入新行。
REFERENCE: 未用。
SELECT: 检索表中的记录。
UPDATE: 修改现存表记录。
FILE: 读或写服务器上的文件。
这里只列出了几个常用的权限 跟多权限可以参考MySQL权限详解及更多信息 [陈天刚]
-------@[登录主机]
%表示没有限制,在任何主机都可以登录。比如:”xiaobu”@”192.168.0.%”,表示xiaobu这个用户只能在192.168.0IP段登录
grant select,drop on shop.goods to 'xiaobu'@127.0.0.1 identified by '147258';
刷新权限
flush privileges ;
回收权限
语法: revoke 权限 on 数库名.表名 from 用户名
查看权限
语法:show grants for [用户名]
对于权限这一块还是很好记得 我有一个小秘诀
1.授什么权?
2.作用于哪个数据库哪个表?
3.指定给谁,他有没有权限分给其他用户
4.结合语法
在设计简单权限的时候想到以上几点就可以轻松搞定了
参考
mysql 用户管理和权限设置 feng