前言
在企业信息化的过程当中,数据库中库和表都会大量存在,须要分配给管理者核实的权限进行操做
合理地分配权限,可使数据库管理井井有理,各个管理者只须要关注本身负责的内容,也可避免误操做对系统形成损失
1、用户与受权
数据库是信息系统中很是重要的一个环节,合理高效地对它进行管理是很重要的工做
一般是由总管理员建立不一样的管理帐户,而后分配不一样的操做权限,把这些帐户交给相应的管理人员使用
1.用户管理
1.1 新建用户
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
用户名:将要建立的用户名
来源地址:
指定新建立的用户可在哪些主机上登陆,可以使用 IP 地址、网段、主机名的形式
本地用户可用 localhost
若是想让该用户能够从任意远程主机登陆,可用通配符 %
密码:
MySQL 5.7 版本启用了密码加强插件,新密码必须符合密码负载型要求,用户的登陆密码不能为空
密码一般是须要通过加密处理再写入数据库,在不使用 password 关键字时,可使用明文密码,直接输入"密码",插入到数据库时由 MySQL 自动加密
若是使用 password 关键字,能够直接插入密文,MySQL 再也不进行加密处理
若使用加密密码,须要先使用select password(‘密码’); 获取密文,再在语句中添加 password ‘密文’
若省略“identified by”部分,则用户的密码将为空(不建议使用)
create user 'wangyi'@'localhost' identified by '123123';
select password('123123');
create user 'lisi'@'localhost' identified by password
1.2 查看用户信息
建立后的用户保存在 mysql 数据库的 user 表里mysql
USE mysql;
SELECT User,authentication_string,Host from user;
1.3 重命名用户
RENAME USER 'wangyi'@'localhost' TO 'wangsan'@'localhost';
select user,authentication_string,host from user;
1.4 删除用户
DROP USER 'wanger'@'localhost';
select user,authentication_string,host from user;
1.5 给用户设置密码
1.5.1 修改当前用户登陆密码
set password = password('zxc123');
quit
mysql -u root -p
1.5.2 修改其余用户密码
set password for 'wangsan'@'localhost' = PASSWORD('zxc123');
use mysql;
select user,authentication_string,host from user;
1.6 忘记 root 密码的解决办法
使用 MySQL 时,若是忘记了其余用户的密码,可使用 root 用户从新设置
可是若是忘记 root 的密码,就须要采用特殊的方法进行操做
#修改 /etc/my.cnf 配置文件,可不使用密码直接登陆到 mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables
#添加,使登陆mysql不使用受权表
systemctl restart mysqld
mysql
#可直接登陆
#使用 update 修改 root 密码,刷新数据库
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('123123') where user='root';
FLUSH PRIVILEGES;
quit
#再去删除以前在 /etc/my.cnf 里新添加的内容,并重启服务
mysql -uroot -p123123
2.受权控制
在 MySQL 中,权限设置很是重要,分配权限能够清晰地划分责任
管理人员只须要关注本身的任务便可,最重要的是保证系统数据的安全
2.1 授予权限
权限控制主要是处于安全因素,所以须要遵循如下几个经验原则:
只授予能知足须要的最小权限,防止用户误操做和干坏事
建立用户的时候限制用户的登陆主机,通常是限制成指定 IP 或内网 IP 段
初始化数据库时删除没有密码的用户,由于安装完数据库时会自动建立一些用户,这些用户默认没有密码
为每一个用户设置知足密码复杂度的密码
按期清理不须要的用户,如回收权限或删除用户
命令格式及用法以下:
GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会建立新的用户;当指定的用户名存在时,GRANT 语句用于修改用户信息。
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
#权限列表:用于列出受权使用的各类数据库操做,以逗号进行分隔,如“select,insert,update”;使用“all”表示全部权限,可受权执行任何操做
#数据库名.表名:用于指定受权操做的数据库和表的名称,其中可使用通配符“*”。*例如,使用“xcf.*”表示受权操做的对象为 xcf 数据库中的全部表
#'用户名@来源地址':用于指定用户名称和容许访问的客户机地址,即谁能链接、能从哪里链接;来源地址能够是域名、IP 地址,还可使用“%”通配符,表示某个区域或网段内的全部地址,如“%.xcf.com”、“192.168.126.%”等
#IDENTIFIED BY:用于设置用户链接数据库时所使用的密码字符串;在新建用户时,若省略“IDENTIFIED BY”部分, 则用户的密码将为空
实例:容许用户wangsan在本地查询 class 数据库中全部表的数据记录,但禁止查询其余数据库中的表的记录
GRANT select on class.* to 'wangsan'@'localhost' identified by '123123';
quit;
mysql -uwangsan -p123123
show databases;
use information_schema;
show tables;
select * from INNODB_SYS_TABLESTATS;
容许用户wangsan在本地远程链接 mysql ,并拥有全部权限
quit
mysql -u root -p123123
GRANT ALL PRIVILEGES ON *.* TO 'wangwu'@'localhost' IDENTIFIED BY '123456';
flush privileges;
quit
mysql -uwangsan -p123123
show databases;
use class;
show tables;
select * from test01
2.2 查看权限
SHOW GRANTS FOR 用户名@来源地址;
例:
show grants for 'wangsan'@'localhost';
2.3 撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;
例:
quit
mysql -uroot -p123123
show grants for 'wangsan'@'localhost';
revoke select on "class".* from 'wangsan'@'localhost';
show grants for 'wangsan'@'localhost';
flush privileges;
#撤销权限后,该用户只保留登陆权限