MySQL数据库权限管理
数据库登陆操作:
修改MySQL数据库端口
修改端口rpm安装:
vim /etc/my.cnf
文件内容最后添加port=指定端口。
然后重启服务
连接方式:
%:允许所有主机远程登陆包括localhost。也可以指定某个ip,允许某个ip登陆。也可以是一个网段。
localhost:只允许本地用户登录
% 所有主机远程登录
192.168.246.% 192.168.246.0网段的所有主机
192.168.246.252 指定主机
localhost 只允许本地用户登录
远程连接语法:
mysql -u 用户名 -p 密码 -h 数据库ip地址 -P 端口号:如果没有改端口号就不用-P指定端口
修改连接方式
将原来的localhost修改为%或者ip地址
mysql> use mysql
#进入到mysql库中
mysql> update user set host = '192.168.246.%' where user = '用户名';
#修改user表中的内容
mysql> flush privileges ;
#更新授权列表以使配置生效
登录数据库
# mysql -u用户名 -p"用户密码" -h数据库ip地址 -P 3306 -e 'show databases;'
-h 指定主机名 【默认为localhost】
-大P MySQL服务器端口 【默认3306】
-u 指定用户名 【默认root】
-p 指定登录密码 【默认为空密码】
-e 接SQL语句,可以写多条拿;隔开
============
# mysql -h192.168.246.253 -P 3306 -uroot -pqf123 -D mysql -e 'select * from user;'
此处 -D mysql为指定登录的数据库
创建用户
方法一:create user 语句创建并设置连接方式
mysql> create user 用户名@'连接方式' identified by '用户密码';
## 创建用户,并设置用户登录方式和密码
mysql> create user tom@'localhost' identified by 'qf@123';#创建用户为tom,并设置密码。
mysql> FLUSH PRIVILEGES; #更新授权表
创建用户完成后一定要更新授权表以使设置生效。
方法二:使用命令创建用户并授权:grant
语法格式:
grant 权限列表 on 库名.表名 to '用户名'@'客户端主机' IDENTIFIED BY 'Qf@123';
=数据库.表名:
*.* 所有库下的所有表web.* web库下的所有表
web.stu_info web库下的stu_info表
#注意:root用授权时候grant授权权限不要给予
删除用户
方法一:DROP USER语句删除
DROP USER 'user3'@'localhost';
mysql> drop user ' 用户名' @ '连接方式 '
#直接该删除用户
方法二:DELETE语句删除
DELETE FROM mysql.user WHERE user='tom' AND host='localhost';
mysql> delete from mysql.user where user='用户名' and host='连接方式'
#在储存用户数据的表中删除用户数据
更新授权表: FLUSH PRIVILEGES;
4.数据库权限简介
权限简介| 权限 | 权限级别 | 权限说明
| :--------------------- | :--------------------- | :------------------------------------
| CREATE | 数据库、表或索引 | 创建数据库、表或索引权限
| DROP | 数据库或表 | 删除数据库或表权限
| GRANT OPTION | 数据库、表或保存的程序 | 赋予权限选项 #小心给予
| ALTER | 表 | 更改表,比如添加字段、索引等
| DELETE | 表 | 删除数据权限
| INDEX | 表 | 索引权限
| INSERT | 表 | 插入权限
| SELECT | 表 | 查询权限
| UPDATE | 表 | 更新权限
| LOCK TABLES | 服务器管理 | 锁表权限
| CREATE USER | 服务器管理 | 创建用户权限
| REPLICATION SLAVE | 服务器管理 | 复制权限
| SHOW DATABASES | 服务器管理 | 查看数据库权限
用户权限
授权
GRANT (crant) ---授权。
mysql> grant all on *.* to 'tom'@’localhost’;权限 库名.表名 账户名 @连接方式
mysql> FLUSH PRIVILEGES; #刷新授权表
查看权限
查看权限
1.看自己的权限:
mysql> show grants\G
#查看当前登录用户的权限
*************************** 1. row ***************************
Grants for root@%: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION2.看别人的权限:
mysql> show grants for tom@'localhost'\G
#查看用户tom的权限 用户名@连接方式
*************************** 1. row ***************************
Grants for tom@localhost: GRANT SELECT, INSERT ON *.* TO 'tom'@'localhost'
移除权限
语法:REVOKE 权限 ON 数据库.数据表 FROM '用户'@'IP地址';
mysql> revoke 权限名称 on 数据库.数据表 from '用户'@'连接方式'
- 被回收的权限必须存在,否则会出错
- 整个数据库,使用 ON datebase.*;
- 特定的表:使用 ON datebase.table;mysql> revoke select,delete on *.* from jack@'%'; #回收指定权限
mysql> revoke all privileges on *.* from jack@'%'; #回收所有权限
mysql> flush privileges;
#更新授权列表
权限控制机制
四张表:user db tables_priv columns_priv
1.用户认证
查看mysql.user表
2.权限认证
以select权限为例:
1.先看 user表里的select_priv权限Y:不会接着查看其他的表 拥有查看所有库所有表的权限N:接着看db表
2.db表: #某个用户对一个数据库的权限。Y:不会接着查看其他的表 拥有查看所有库所有表的权限N:接着看tables_priv表
3.tables_priv表:#针对表的权限table_priv:如果这个字段的值里包括select 拥有查看这张表所有字段的权限,不会再接着往下看了table_priv:如果这个字段的值里不包括select,接着查看下张表还需要有column_priv字段权限
4.columns_priv:针对数据列的权限表column_priv:有select,则只对某一列有select权限没有则对所有库所有表没有任何权限注:其他权限设置一样。# 授权级别排列- mysql.user #全局授权
- mysql.db #数据库级别授权
- 其他 #表级,列级授权