MySQL 用户管理
用户权限控制,每一个DBA都要会。
例如:我们需要给予开发人员什么权限?给予领导什么权限?给予自己的超管用户什么权限?
Mysql连接方式
Mysql连接方式分为两种: tcp/ip 连接、socket连接。
tcp/ip: 此种方式要指定-h(--host)填写Mysql服务端IP参数远程连接,为了保障安全一般root会禁止进行网络连接。
连接命令:/usr/local/mysql/bin/mysql -h192.168.9.11 -P3306 -uroot -p123456
socket: 此种方式不指定-h参数,本地连接,一般仅做为root用户登陆使用,socket也是一种通讯方式,只不过是以文件方式承现。
连接命令:/usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/tmp/mysql.sock
Mysql用户密码管理
对Mysql连接方式有个基本了解后,我们开始进行用户、密码、权限方面的讲解,并将老师在生产中因权限配置不当遇到的故障问题介绍给大家,首先我们来看下用户的创建。
1.连接Mysql:
我们此处是使用维护的本地socket方式进行管理
/usr/local/mysql/bin/mysql -uroot -p123456 -S /data/mysql/tmp/mysql.sock
2.创建普通用户:
此处创建用户需要有对mysql数据库的操作权限,因为创建命令其实就是在mysql数据库中的权限表进行添加用户与权限的对应记录,如user表。
create user username@'localhost' identified by 'password'
注意!
✔ username:登陆使用的用户名
✔ password:登陆使用的密码
✔ localhost:此处是Mysql连接时验证的一个额外机制,代表限制远端使用该用户进行连接时,客户端的IP地址范围,此值可以有如下三个选择:
✔
1)%:代表可以允许客户端以任意IP访问
2)192.168.18.%:代表可以允许客户端以192.168.18网段的IP地址进行访问,一般生产中使用此方式,仅仅配置某个应用服务器网段的IP地址允许访问
3)localhost:代表只能通过Mysql服务器端进行连接,一般我们创建维护账号时才选择此方式,如root
3.用户密码的管理:
在工作维护期间,一定会是将开发人员的账号进行定期更新的,这时我们可以使用以下方式进行用户密码的修改。
修改当前用户密码:set PASSWORD=PASSWORD('new-password')
修改其他用户密码:set password for root@localhost = password('new-password');
将用户的密码时间配置为永不过期:alter user root@’localhost’ password expire never;
4.删除某个用户:
Mysql中删除用户没有像Oracle那样有用户归属的对象,删除用户只是将该用户删除,对有此存储过程,触发器的定义或会受到影响,后续讲解时我们会带到存储过程的安全定义级别。
drop user username@'localhost'
5.为某个用户进行权限赋值与回收:
权限赋值可以根据多个级别,可以对整个服务端的管理权限,对全部数据库的操作权限,对单个库,多表,单表的操作权限,我们来看下如何进行配置,如我们配置给某个库内全部的读与更新权限。
赋值:grant select,update on test.* to username@'IP段';
回收:revoke select,update on test.* from username@'IP段';
with grant option:可以将权限赋于其他用户,该选项一般在生产中不做使用,权限将由DBA进行管控,不存在开发人员互相开通权限情况
6.查看登陆用户及权限信息:
查看当前登陆用户:select user();
查看某个用户权限:show grants for root@'localhost'
Mysql权限 表
Mysql的权限其实就是存储在mysql数据库中一些权限表中的数据信息,在此处我们有必要了解一下Mysql中权限表信息,权限的寻找顺序及作用域。
1.user表:权限生效于全部数据库
1)验证信息:user host password/authentication_string2)权限信息:1.库表权限:数据库操作类的权限,select,update.....2.全局权限:数据库管理类的权限,grant shutdown....3.系统权限:查询次、更新次、连接次、并发连接次
2.db表:权限生效于某个数据库1)验证信息:user,host,db2)权限信息:create/update/alter
3.tables_priv表:权限生效于某个表1)验证信息:user,host,db,table_name2)权限信息:select insert
4.columns_priv表:权限生产于某个列
5.proces_priv表:权限可以生效于全部数据库/某个数据库
mysql会先查找user表的全局权限。
若无权限再查看db/host表的数据库权限。若无权限再查看tables_priv表权限。若无权限再查看column_priv字段权限。若无权限返回错误信息。