设置MySQL管理员账号密码
在安装MySQL数据库后,MySQL管理员的账号root密码默认为空,极不安全
启动修改丢失的MySQL单实例root密码方法
停止MySQL
|
|
使用 –skip-grant-tables启动mysql,忽略授权登陆验证
|
|
修改root密码为新密码
|
|
重启服务再登陆
|
|
提示:启动时加 --skip-grant-tables
参数启动登陆修改完密码后一定要重启再对外提供服务,skip一定要放到后面
清理无用的MySQL用户与库
清理无用的库
|
|
语法:dorp user ‘user’@’host/ip’ <= 注意引号,可以使单或双引号
|
|
注意:如果drop删除不了(一般为特殊字符或大写),可以用下面方式删除(以root用户,oldboy主机为例):
|
|
处理完用户必须执行 flush privileges
创建MySQL用户及赋予用户权限
通过help查看grant命令帮助
|
|
通过查看grant的命令帮助,可以很容易的找到创建用户并授权的例子。
比较常见的创建用户的方法是,使用grant命令在创建用户的通同时进行授权。具体例子:
|
|
上述grant命令帮助里还提供了一个先用create命令创建用户,然后再用grant授权的方法,即创建用户和授权分开进行
|
|
通过grant命令创建用户并授权
|
|
列表说明如下
grant | all privileges | on dbname.* | to username@localhost | identified by ‘passwd’ |
---|---|---|---|---|
授权命令 | 对应权限 | 目标:表和库 | 用户名和客户端主机 | 用户密码 |
说明:上述命令是授权localhost主机上通过用户username管理dbname数据库的所有权限,密码为passwd。其中username,dbname,passwd可根据业务的情况修改。
create和grant配合法
创建用户名username及密码passwd,授权主机localhost。
|
|
然后授权localhost主机上通过用户名username管理dbname数据库的所有权限,无需密码。
|
|
操作示例
案例1:创建oldboy用户,对zhangsan库具备所有权限,允许localhost主机登陆管理数据库,密码是oldboy123
实现具体命令:
|
|
演示:
|
|
案例2:创建oldgirl用户,对test库具备所有权限,允许localhost主机登陆管理数据库的所有权限,无需密码
查看当前数据库用户情况,然后执行命令创建用户
|
|
创建用户,指定密码,提示:仅仅是创建用户并未授权
|
|
查看授权后的MySQL用户列表情况
|
|
授权局域网内主机远程链接数据库
根据grant命令语法,知道test@’localhsot’位置为授权方位数据库的主机,localhost可以用域名,IP或IP段来代替,因此,要授权局域网内主机可以通过如下方法实现
一条命令,“百分号” 匹配法
|
|
一条命令,“子网掩码” 配置法
|
|
两条命令实现
|
|
最后记得上述每条grant命令都要刷新权限
|
|
提示:如果是web链接数据库的用户,尽量不要授权all,而是select,insert,update,delete….
通过MySQL客户端链接异地数据库服务
本地 mysql -uroot -p111
连接相当于 mysql -uroot -p111 -hlocalhost
要远程链接10.0.0.7的数据库,命令为 mysql -utest -p111 -h10.0.0.7
,如果要能链接成功,还需要在10.0.0.7 的数据库服务器上通过如下命令授权:
|
|
用户可以授权的权限都有那些?
通过实验获得all privileges包括那些权限,
先看看前面授权过的oldgirl的权限
|
|
取消 oldgirl 的只读权限(SELECT)看看结果
|
|
使用revoke移除授权
|
|
此时我们再查看oldgirl用户权限,ALL PRIVILEGES权限已经被细分了,但是没有SELECT权限了。
因此我们就可以得出结论:ALL PRIVILEGES包括
|
|
在授权时,可以授权用户最小的满足业务需求的权限,而不是一味的授权“ALL PRIVILEGES”
生产环境如何授权用户权限
博客 CMS等产品的数据库授权:
对于web链接用户授权尽量采用最小化原则,很多开源软件都是web界面安装,因此,在安装期间处理select, insert, update, delete4个权限外,还需要 create drop 等比较危险的权限。
常规情况下授权 select, insert, update, delete4个权限即可,有的开源软件,如 discuz cms还需要create drop等比较危险的权限。
生成数据库表后,要收回create、drop权限
生产环境针对主库(写为主读为辅)用户授权
普通的环境:
本机:lnmp,lamp环境数据库授权
|
|
应用服务器和数据库服务器不在一个主机上的授权:
|
|
严格的授权:重视安全,忽略了方便
|
|
生产环境从库(只读)用户的授权:
|
|
说明:这里表示给10.0.0.0/24的用户blog管理blog数据库的所有表( * 表示所有表)只读权限(select),密码为111。
生产场景授权具体命令为
主库授权的命令
|
|
从库授权用户命令
|
|
当然从库除了做SELECT授权外,还可以加read-only等只读参数,严格控制web用户写从库。
重要问题:就是主从库的MySQL库和表是同步的,无法针对同一个用户授权不同的权限。应为,主库授权后会自动同步到从库上,导致从库的授权只读失败。
解决方法:
取消mysql库的同步。
授权主库权限后,从库执行收回增删改权限。
不在授权上控制增删改,而是用read-only参数,控制普通用户更新从库,注意,read-only参数对超级用户无效。
查看MySQL数据库中的用户和主机信息
查询授权用户oldboy的具体的授权权限
|
|