2010-01-08 39 views
4

MySQL中有没有办法阻止某人使用连字符创建表格和/或数据库? (除了来自用户的条带化的权限。)防止用户使用连字符创建表格和/或数据库

例如,如果我们有用户IamADummy谁愿意做这个,

CREATE TABLE `I-am-a-bad-table-name`; 

OR

CREATE DATABASE `Bad-Idea`; 

是否有一个设置,将停止用户这样做?

谢谢!

+0

+1因尝试不必告诉IamADummy他是个假人。 – fupsduck 2010-01-08 21:05:04

回答

5

唯一restrictions on table identifiers如下:

  • 没有标识符可以包含ASCII NUL(0×00)或一个字节与255
  • 数据库,表的值,和列名不应以空间结束字符。
  • 数据库和表名不能包含“/”,“\”,“。”或文件名中不允许的字符。

为了有任何其他的限制,你必须在运行它之前检查系统中的查询并适当调整它。

+0

+1优秀的一点。 – 2010-01-08 20:31:13

+0

+1验证/完善不是RDBMS的工作...... – 2010-01-08 20:40:47

+0

是的 - 这就是我的想法。谢谢! – Anjisan 2010-01-08 21:46:18

3

我不是专家,但它并不像它:

http://www.learn-mysql-tutorial.com/Identifiers.cfm

礼貌地告诉IAMADummy使用下划线,如果他继续使用hypens(减号)“剥去用户的权限”或者每小时运行一次脚本,从连字符表中删除所有权限。当IAMADummy打电话时,告诉他一个新功能。

+0

lol功能 – 2010-01-08 21:01:20

+0

+1功能 - 当然,如果我可以添加+2我会的。尼斯:) – Anjisan 2010-01-08 21:46:49

1

我不这么认为。连字符是数据库或表名的有效部分,正如mySQL手册中的schema object names一章指出的那样。

一些头脑风暴点:

  • Triggers在表级别只

  • 我不认为有可以创建一个数据库/表之前,执行存储过程的任何挂钩工作 - 正确我如果我错了,当然

  • 据我所见,有没有办法使用权限来阻止创建具有特定命名模式的表/数据库。

唯一想到的是破坏数据库目录在文件系统级别的创建,如果它包含连字符。当然可以在Linux系统上以某种方式完成,但这是一个可怕的想法。

你必须教IAMADummy不要在表名中使用连字符,或者创建一个围绕mysql的包装器,分析用户写入的查询,并在传递到数据库之前阻止有问题的命令的执行。

1

如果您使用PHP,您可以使用php函数来削减输入。

如果您正在使用MySQL“直接升级”,也许您或您认识的某个人可以组合一个小程序,充当用户和MySQL之间的代理。重命名MySQL程序并调用代理(假设windows),无论MySQL程序最初是如何命名的。

该代理应该采取登录信息和查询并将其传递给MySQL客户端。