mysql 权限设置

MySQL如何分配置权限能实现以下功能:
1.实现从远程登录上来的用户只能看到数据库中的指定表
数据库中的所有表应该都存在,但指定用户只能看到其中一些表,请高手指点,最好能给出实例!

背景

在了解动态权限之前,我们先回顾下 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个回答  推荐于2016-09-14
在mysql命令行中,用grant语句创建用户

grant 权限 on 数据库名.数据库表 to username@'%' identified by 'userpwd'.

你的情况 可以
grant all on dbname.table0 to 'username'@'%' identified by 'pwd';
grant all on dbname.table1 to 'username'@'%' identified by 'pwd';
……
……

有些数据库中可以这样
grant all on dbname,table0,dbname.table1 to 'username'@'%' identified by 'pwd';
或者
grant all on dbname,table0 dbname.table1 to 'username'@'%' identified by 'pwd';

但是mysql中似乎不行,至少我用的5.0.41中,我一直没搞懂该怎么做才能一条语句grant很多指定的table到一个账号中,只好分开做了。本回答被提问者采纳
第2个回答  2009-05-04
这个现在很容易,纯傻瓜式操作,
你打开导航猫,就是管理MYSQL的那个工具,
然后有个管理选项,可以对每个表分配用户权限。
就这么简单。
第3个回答  2009-05-13
授予用户权限语句格式如下:

GRANT 权限列表[(字段列表)] [,类型 [(字段列表)]…]
ON 数据库名称.表名称
TO 用户名@域名或IP地址
相似回答