Mysql创建新用户并赋予权限

Mysql创建新用户并赋予权限,第1张

create user '用户名'@'localhost'identified by'密码'

grant all on 权限 to 用户名@'localhost' identified by "密码"

show grants for '用户名'@'localhost'

select user,host from mysql.user

背景

在了解动态权限之前,我们先回顾下 MySQL 的权限列表。

权限列表大体分为服务级别和表级别,列级别以及大而广的角色(也是MySQL 8.0 新增)存储程序等权限。我们看到有一个特殊的 SUPER 权限,可以做好多个 *** 作。比如 SET 变量,在从机重新指定相关主机信息以及清理二进制日志等。那这里可以看到,SUPER 有点太过强大,导致了仅仅想实现子权限变得十分困难,比如用户只能 SET 变量,其他的都不想要。那么 MySQL 8.0 之前没法实现,权限的细分不够明确,容易让非法用户钻空子。

那么 MySQL 8.0 把权限细分为静态权限和动态权限,下面我画了两张详细的区分图,图 1 为静态权限,图 2 为动态权限。

图 1- MySQL 静态权限的权限管理图

图 2-动态权限图

那我们看到其实动态权限就是对 SUPER 权限的细分。 SUPER 权限在未来将会被废弃掉。

我们来看个简单的例子,

比如, 用户 'ytt2@localhost', 有 SUPER 权限。

mysql>show grants for ytt2@'localhost'+---------------------------------------------------------------------------------+| Grants for ytt2@localhost                                                       |+---------------------------------------------------------------------------------+| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER, SUPER ON *.* TO ytt2@localhost |+---------------------------------------------------------------------------------+1 row in set (0.00 sec)

但是现在我只想这个用户有 SUPER 的子集,设置变量的权限。那么单独给这个用户赋予两个能设置系统变量的动态权限,完了把 SUPER 给拿掉。

mysql>grant session_variables_admin,system_variables_admin on *.* to ytt2@'localhost'Query OK, 0 rows affected (0.03 sec)mysql>revoke super on *.* from ytt2@'localhost'Query OK, 0 rows affected, 1 warning (0.02 sec)

我们看到这个 WARNINGS 提示 SUPER 已经废弃了。

mysql>show warnings

+---------+------+----------------------------------------------+

| Level   | Code | Message                                      |

+---------+------+----------------------------------------------+

| Warning | 1287 | The SUPER privilege identifier is deprecated |

+---------+------+----------------------------------------------+

1 row in set (0.00 sec)`

mysql>show grants for ytt2@'localhost'

+-----------------------------------------------------------------------------------+

| Grants for ytt2@localhost                                                         |

+-----------------------------------------------------------------------------------+

| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER ON *.* TO ytt2@localhost          |

| GRANT SESSION_VARIABLES_ADMIN,SYSTEM_VARIABLES_ADMIN ON *.* TO ytt2@localhost |

+-----------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

当然图 2 上还有其它的动态权限,这里就不做特别说明了。

1、创建新用户

通过root用户登录之后创建

>>grant all privileges on *.* to testuser@localhost identified by "123456" //创建新用户,用户名为testuser,密码为123456 ;

>>grant all privileges on *.* to testuser@localhost identified by "123456" //设置用户testuser,可以在本地访问mysql

>>grant all privileges on *.* to testuser@"%" identified by "123456"  //设置用户testuser,可以在远程访问mysql

>>flush privileges //mysql 新设置用户或更改密码后需用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效

2、设置用户访问数据库权限

>>grant all privileges on test_db.* to testuser@localhost identified by "123456" //设置用户testuser,只能访问数据库test_db,其他数据库均不能访问 ;

>>grant all privileges on *.* to testuser@localhost identified by "123456" //设置用户testuser,可以访问mysql上的所有数据库 ;

>>grant all privileges on test_db.user_infor to testuser@localhost identified by "123456" //设置用户testuser,只能访问数据库test_db的表user_infor,数据库中的其他表均不能访问 ;

3、设置用户 *** 作权限

>>grant all privileges on *.* to testuser@localhost identified by "123456" WITH GRANT OPTION //设置用户testuser,拥有所有的 *** 作权限,也就是管理员 ;

>>grant select on *.* to testuser@localhost identified by "123456" WITH GRANT OPTION //设置用户testuser,只拥有【查询】 *** 作权限 ;

>>grant select,insert on *.* to testuser@localhost identified by "123456" //设置用户testuser,只拥有【查询\插入】 *** 作权限 ;

>>grant select,insert,update,delete on *.* to testuser@localhost identified by "123456" //设置用户testuser,只拥有【查询\插入】 *** 作权限 ;

>>REVOKE select,insert ON what FROM testuser//取消用户testuser的【查询\插入】 *** 作权限 ;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6134188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存