当前应用如下 :
a 机器(mysql有很多的库,其中哦一个库oddsdb
目前java应用要求只能库oddsdb被 本地和b机器访问, 但a机器的其他库还是能被其他机器正常访问)
如何做才能限制oddssdb访问,其它库还是需要能够连接的。(什么命令)

解决方案 »

  1.   

    试一下。
    grant all on oddsdb.* to username@b;
      

  2.   

    可能没有讲清楚 局网都需要连接服务器a 的 一个oddsmatrix库。但是另外一个库oddsdb不需要,所以要加限制。
    现在的意思是 这个服务器a的 mysql的除了库oddsdb的所有数据库能被用户bet访问,但服务器a的库oddsdb只能被一台机器10.0.0.1访问。   现在是对一个用户进行权限限制。  需要组合myql下 的user db host里面设置deny
      

  3.   

    观察
    mysql库下
     在 db  表  的db 字段有1个值test\_% 表示 以test开头的库推测能否表示除了一个库之外的所有库?  (在这个表里)
    或者 grant 命令能偶做到如果”里面能否表示除了一个库之外的所有库  “ 这个表示方法找到
    那就方便了   可以用2条记录 或者2个grant命令完成上面的任务
      

  4.   

    和上个贴子中回答你的一样。
    revoke ALL PRIVILEGES ON *.* FROM to bet@'%';
    insert db values ('%','%','bet','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    insert db values ('%','oddsdb','bet','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N');
    insert db values ('10.0.0.1','oddsdb','bet','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N');
    FLUSH PRIVILEGES;
      

  5.   

    revoke ALL PRIVILEGES ON *.* FROM to bet@'%'; 
    是否为grant??   一开始就revoke
      

  6.   

    mysql> grant all on *.* to b@'%' identified by 'b' with grant option;
    Query OK, 0 rows affected (0.00 sec)mysql> revoke ALL PRIVILEGES ON *.* FROM to b@'%';
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'to b@'%'' at line 1
    mysql> Aborted
    [root@bruce ~]# 
      

  7.   

    revoke ALL PRIVILEGES ON *.* FROM bet@'%';
      

  8.   

    1 没有这个帐号
    mysql> revoke ALL PRIVILEGES ON *.* FROM bet@'%';
    ERROR 1141 (42000): There is no such grant defined for user 'bet' on host '%'
    mysql> 2 换其他帐号执行还是不可以。
    所以我只能手工在db
    插入 ('%','%','bet','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
     ('%','oddsdb','bet','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N');
     ('10.0.0.1','oddsdb','bet',Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'N'); ----这里数据有修改,你看对不对 ?在局网机器另外2台机器测试, 最终方法发现还是失败
      

  9.   

    你的 bet 账号是什么?不是你自己说你的用户名是 bet 吗?
      

  10.   

    linux下输入法 很不方便 导致输入错了
    后来我新建立用户b
    grant all on *.* to b@'%' identified by 'b' with grant option; 
    用上面的方法还是不行 测试很多此  mysql重启很多ci  每次修改就重启
      

  11.   

    revoke ALL PRIVILEGES ON *.* FROM  b@'%';
    insert db values ('%','%','b','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    insert db values ('%','oddsdb','b','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N');
    insert db values ('10.0.0.1','oddsdb','b','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N');
    FLUSH PRIVILEGES;不需要重启。FLUSH PRIVILEGES; 的作用就是不重启的情况直接加载权限表。不过你的 b 用户得先退出再登录。
      

  12.   

    Database changed
    mysql> insert db values ('%','%','b','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
    ERROR 1136 (21S01): Column count doesn't match value count at row 1错误 
    请 看这行 
    insert db values ('10.0.0.1','oddsdb','b','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N'); 
    是否该修改
    10.0.0.1','oddsdb','b',Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'N'); 
    在10.0.0.1这个ip地址 b用户要求访问那个数据库 , 其他的ip是不可以的
      

  13.   

    desc db;一下,不同版本 db 表中字段数不一样。这个在MYSQL的错误提示中已经很清楚的说明了。 Column count doesn't match value count at row 1
      

  14.   

    FLUSH PRIVILEGES; 
    这个命令干 什么   ,是否一定要用 ?   是否执行完命令后要重启mysql。
      

  15.   

    不好意思  , 感谢楼上 ,以前搞 oralce 所以这方面积累不是特别多。
    最后一个问题 
    我想走另外的方法 探讨是否能行
     
    我不执行 revoke ALL PRIVILEGES ON *.* FROM  b@'%'; 
    而执行在db里插入数据是否可以? 如果不可以,清略为说点原因?
      

  16.   

    不可以,必须先把 b@%的权限先从user表收回来,然后对 db 表操作。否则 user 表中的信息会优先作用。当然如果之前你没有给 b@% grant 过权限,自然不用revoke。上面提供给你的方法,已经测试过没有问题。
      

  17.   

    1,CREATE USER语法  CREATE USER user identified by '123456'2,DROP USER语法 drop user user@localhost;3,SET PASSWORD语法 set password for user=password('123456');4,GRANT和REVOKE语法 grant all privileges on db.* to user@localhost identified by  '123456';REVOKE ALL PRIVILEGES, GRANT OPTION FROM user@'%';revoke all privileges on db.*  from  user@'192.168.1.1';