2010-01-08 36 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客戶端。