视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
mysql学习之权限管理图文代码实例
2020-11-09 09:09:36 责编:小采
文档
 数据库权限的意义:

  为了保证数据库中的业务数据不被非授权的用户非法窃取,需要对数据库的访问者进行各种,而数据库安全性控制措施主要有这三种,第一种用户身份鉴别,手段可以是口令,磁卡,指纹等技术,只有拥有合法身份的人才可以进入数据库。第二种存取权限控制,不同角色,对数据库的存取权限是不同的,必须为每一个角色设置其访问的数据库对象、权限。第三种制定数据库管理的管理制度,制度最终约束人的行为,通过制定相应的规章制度,可以保证在合适的时间、由合适的人对数据进行合适的操作。

mysql对用户权限的检查分为两个阶段

1、是否可以与mysql服务器建立链接

2、是否具有某些操作权限(如:select update 等)

一、与mysql服务器建立链接

mysql服务器如何校验用户是否可以建立链接

1、验证你从哪来 host

2、你是谁 user

3、密码 password

链接mysql的方式:C:\Users\PC003>mysql -h192.168.6.223 -uroot -pjalja

参数解释:-h:从何处要建立链接

     -u:user

     -p:密码

mysql> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *CFAFE434FB0E5D5301E668E1EACD077A54DF |
| root | % | *CFAFE434FB0E5D5301E668E1EACD077A54DF |
+------+-----------+-------------------------------------------+

host=localhost表示可以使用默认主机进行链接(C:\Users\PC003>mysql -uroot -pjalja,C:\Users\PC003>mysql -hlocalhost -uroot -pjalja,C:\Users\PC003>mysql -h127.0.0.1 -uroot -pjalja)
host=%表示该服务器可以与它所在一个局域网(公网)内的所有主机建立链接,该方式在生产环境中不安全

host=192.168.6.224表示该服务器只能与192.168.6.224主机建立链接 C:\Users\PC003>mysql -h192.168.6.223 -uroot -pjalja

如何修改host:

mysql> update user set host='192.168.6.223' where user ='root'

mysql> flush privileges;刷新权限(因为修改后数据是在内存中每次操作用户权限相关操作都要进行刷新)

修改密码:

mysql> update user set password=password('111111') where user='root';
mysql> flush privileges;

二、mysql如何进行权限检查

mysql中有一个mysql库该库下user表检查该用户是否存在,db表检查该用户对哪些库有哪些操作权限,tables_priv表检查该用户对那些表有哪些操作权限。

创建用户并授权:

grant [权限1,权限2] on *.* to user@'host' identfied by 'password';

常用权限:all,create,drop,insert,delete,update,select

例如:授予ls用户所有库所有表的所有权限并可以从该局域网该网段任何主机登陆。

mysql> grant all on *.* to 'ls'@'192.168.6.%' identified by '111111';

使用该用户登陆:C:\Users\PC003>mysql -h192.168.6.223 -uls -p111111;

查看ls用户具体有哪些权限:

mysql> select * from mysql.user where user='ls' \G;
*************************** 1. row ***************************
 Host: 192.168.6.%
 User: ls
 Password: *FD571203974BA9AFE270FE62151AE967ECA5E0AA
 Select_priv: Y
 Insert_priv: Y
 Update_priv: Y
 Delete_priv: Y
 Create_priv: Y
 Drop_priv: Y
 Reload_priv: Y
 Shutdown_priv: Y
 Process_priv: Y
 File_priv: Y
 Grant_priv: N
 References_priv: Y
 Index_priv: Y
 Alter_priv: Y
 Show_db_priv: Y
 Super_priv: Y
 Create_tmp_table_priv: Y
 Lock_tables_priv: Y
 Execute_priv: Y
 Repl_slave_priv: Y
 Repl_client_priv: Y
 Create_view_priv: Y
 Show_view_priv: Y
 Create_routine_priv: Y
 Alter_routine_priv: Y
 Create_user_priv: Y
 Event_priv: Y
 Trigger_priv: Y
Create_tablespace_priv: Y
 ssl_type:
 ssl_cipher:
 x509_issuer:
 x509_subject:
 max_questions: 0
 max_updates: 0
 max_connections: 0
 max_user_connections: 0
 plugin:
 authentication_string: NULL

权限回收:收回ls的所有权限

mysql> revoke all on *.* from ls@'192.168.6.%';

授权某个库的权限:

mysql> grant all on blog.* to ls@'192.168.6.%';授予ls用户拥有blog数据库的所有权限。

这样ls用户在user表中没有权限,这时将进行db级别的权限检查

mysql> select * from mysql.db where user='ls' \G;
*************************** 1. row ***************************
 Host: 192.168.6.%
 Db: blog 
 User: ls
 Select_priv: Y
 Insert_priv: Y
 Update_priv: Y
 Delete_priv: Y
 Create_priv: Y
 Drop_priv: Y
 Grant_priv: N
 References_priv: Y
 Index_priv: Y
 Alter_priv: Y
Create_tmp_table_priv: Y
 Lock_tables_priv: Y
 Create_view_priv: Y
 Show_view_priv: Y
 Create_routine_priv: Y
 Alter_routine_priv: Y
 Execute_priv: Y
 Event_priv: Y
 Trigger_priv: Y

回收ls用户所有权限并赋予某各表权限:授予ls用户blog库中user表crud权限

mysql> revoke all on *.* from ls@'192.168.6.%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> grant insert,update,select,delete on blog.user to ls@'192.168.6.%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

这样ls用户在db级别中没有权限,这时将进行tables_priv级别的权限检查:

mysql> select * from mysql.tables_priv where user='ls' \G;
*************************** 1. row ***************************
 Host: 192.168.6.%
 Db: blog User: ls
 Table_name: user
 Grantor: root@localhost
 Timestamp: 2017-02-09 14:35:38
 Table_priv: Select,Insert,Update,DeleteColumn_priv:1 row in set (0.00 sec)


mysql权限控制流程:

注意:mysql的权限检查可以精确到某列数据。

下载本文
显示全文
专题