Chinaunix

标题: 【讨论中】mysql数据库的通用授权 [打印本页]

作者: uselsee    时间: 2013-02-02 23:35
标题: 【讨论中】mysql数据库的通用授权
本帖最后由 cenalulu 于 2013-02-05 14:00 编辑

我有类似这样名字的多个数据库,db_1,db_2,db_3,我希望一条授权匹配这样的多个数据库,使用下面的语句
grant select,update,insert,delete on  db_%.* to user@'localhost' identified by 'password';
但是这个通配授权会报错,不知道哪位大侠知道怎么写这样的通配授权呢?
作者: chinafenghao    时间: 2013-02-04 09:26
@uselsee
貌似不能这样授权哦。你可以使用select 和concat组合生成授权命令。
作者: seesea2517    时间: 2013-02-04 11:25
印象里我都是傻傻的写多条,lz 聪明。
作者: uselsee    时间: 2013-02-05 12:01
回复 2# chinafenghao


    版主能否把我得需求写一个例子给我,多谢
作者: cenalulu    时间: 2013-02-05 14:00
有个取巧办法。假设楼主数据库有100个db 分别是 mysql,db1-99
可以先:
grant select,update,insert,delete on  *.* to user@'localhost' identified by 'password';
然后:
revoke  select,update,insert,delete on  mysql.* from user@'localhost' ;

作者: seesea2517    时间: 2013-02-05 14:23
回复 5# cenalulu


    我测试的时候好像 revoke 那条会提示不存在这个权限,因为 grant 的时候是 *.*,在字面上没有 mysql.* 这个权限。推测 revoke 只是字面上去处理 grant 的权限,并没有对 * 进行解释。
作者: uselsee    时间: 2013-02-05 17:02
cenalulu 发表于 2013-02-05 14:00
有个取巧办法。假设楼主数据库有100个db 分别是 mysql,db1-99
可以先:
grant select,update,insert,del ...


这位仁兄好想法,我测试一下看看
作者: chinafenghao    时间: 2013-02-06 11:54
@uselsee
mysql存储的是你的权限sql,可没有做解析哦。
select * from mysql.user就能看见。

SELECT CONCAT('grant select,update,insert,delete on  ',a.`SCHEMA_NAME`,'.* to user@"localhost" identified by "password"') FROM information_schema.`SCHEMATA` a WHERE a.`SCHEMA_NAME` LIKE 'db_%';

上面sql是一个example,不一定可以运行成功,你自己调一下吧。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2