mysql数据库服务在不做授权的情况下只允许数据库管理员从数据库服务器本机登录。
默认只有数据库管理员从数据库服务器本机登录才有授权权限
mysql -u root -p (本机登录mysql服务器)
mysql -u root -h 192.168.4.5 -p (远程连接mysql服务器)
方式1 在库外重置数据库管理员密码:
[root@localhost 桌面]# mysqladmin -hlocalhost -uroot -p password "123456" #设置新密码123456
Enter password: #输入旧密码
方式2 在不知道密码的情况下修改数据管理员密码:
[root@localhost 桌面]#/etc/init.d/stop 停用mysql服务器
[root@localhost 桌面]#/etc/init.d/mysql start --skip-grant-tables 跳过授权表启用mysql服务器
[root@localhost 桌面]# mysql -u root 免密码进入mysql服务器
mysql> update mysql.user #直接修改mysql密码表
-> set password=password("123456") #密码设置成123456 -> where host="localhost";
Query OK, 1 row affected (0.03 sec) #设置完成后重新启用mysql服务
用户授权:
格式1:grant 权限列表 on 数据库名 to 用户名; #授权用户权限,所有地址都能访问
格式2:grant 权限列表 on 数据库名 to 用户名@"客户端地址"; #授权指定地址客户端用户权限
格式3:grant 权限列表 on 数据库名 to 用户名@"客户端地址" identified by "密码" with grant option; #授权这个用户权限 设置访问密码并且赋予授权的权限
权限列表的表示:
usage 无权限
all 所有权限
insert,update(name,age),delete 多个权限
insert 某个权限
identified by "密码" 设置访问密码 可选项 若不设置没有访问密码
with grant option 让授权用户有授权权限,可选项,若不设置授权用户无授权权限
数据库名的表示方式:
*.* #服务器上的所有库所有表
数据库名.* #某个库
数据库名.表名 某个表
客户端地址的表示方式(可选项,不设置时,匹配所有地址):
% 所有地址
192.168..4.% 某个网段
192.168.4.205 一个IP
pc1.baidu.com 主机名
%.baidu.com 区域
查询授权命令:
mysql> show grants #查看当前用户权限
mysql> select user() #查看当前登录的用户是谁
授权权限grant:
grant all on *.* to root@"192.168.2.100" identified by "12345" with grant option; #授权可以使用管理员root用户从客户端192.168.2.100登录,登录后有所有权限并有授权的权限,登录密码是 123456;
注:授权某个库权限时,库可以事先不存
user表 用户有*.*权限 才记录在此表
db表 记录授权用户对库的权限信息
tables_priv 表 记录授权用户对表的权限信息
columns_priv 记录授权用户对某个字段的权限信息
mysql> select user,host from mysql.user; #查看mysql数据库的所有用户
mysql> select * from mysql.user where user="liang"\G; #查看用户liang的权限
mysql> show grants for root@"192.168.2.200" #查看授权用户从某个地址登陆的权限
权限撤销revoke(只有对数据库做过授权才能撤销):
mysql> revoke 权限列表 on 数据库 from 用户名@“客户端地址”;
mysql> revoke delete on *.* from root@"192.168.2.200"; # 撤销管理员用户从客户端192.168.2.200登录后,对所有库里所有表中记录的删除权限
mysql> revoke insert,update on teadb.* from root@"192.168.2.200"; # 撤销管理员用户从客户端192.168.2.200登录后,对某一个库(teadb)里所有表中记录的添加和更新权限(前提是对此表有此权限)
mysql> revoke all on *.* from root@"192.168.2.200"; #撤销管理员从客户端地址192.168.2.200登录后对数据库的所有权限;
mysql> delete from mysql.user where user="root" and host="192.168.2.200"; #删除user表的用户 所有权限撤销并且此用户在此客户端地址不能登陆
因为在撤销用户授权权限时all不包括撤销此用户授权权限 所以撤销此用户授权权限如下:
mysql> revoke grant option on *.* from root@"192.168.2.200";
注:给其他用户授权时不能给予超过自己拥有的权限