阻止用户使用连字符创建表和/或数据库

时间:2010-01-08 20:04:11

标签: mysql

在MySQL中是否有办法阻止某人使用连字符创建表和/或数据库? (除了剥离用户的权限。)

例如,如果我们有想要这样做的用户IamADummy,

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

OR

CREATE DATABASE `Bad-Idea`;

是否有设置会阻止用户这样做?

谢谢!

4 个答案:

答案 0 :(得分:5)

唯一的restrictions on table identifiers如下:

  • 没有标识符可以包含ASCII NUL(0x00)或值为255的字节。
  • 数据库,表和列名称不应以空格字符结尾。
  • 数据库和表名称不能包含“/”,“\”,“。”或文件名中不允许的字符。

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

答案 1 :(得分:3)

我不是专家,但看起来不像:

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

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

答案 2 :(得分:1)

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

一些头脑风暴要点:

  • Triggers仅适用于表级

  • 我认为在创建数据库/表之前没有任何可以执行存储过程的钩子 - 如果我错了,请纠正我,当然

  • 据我所知,没有办法使用权限来阻止使用某种命名模式创建表/数据库。

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

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

答案 3 :(得分:1)

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

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

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

相关问题