2011-09-13 106 views
1

最近的項目更新包括爲應用程序添加大量相對(每6-12個月更新一次)的靜態數據。由於它的大小(appx 1GB,包括索引),它被選爲將其包含在單獨的數據庫中。代碼已經被更新以處理所有的事情,但是現在開發機器上的一次簡單的一次性更新將會是一件非常頭疼的事情,即將應用程序的用戶權限添加到新的數據庫中。在同一臺服務器上的數據庫之間複製用戶權限

有沒有簡單的方法來複制主數據庫中已有的用戶訪問新數據庫?

例如用戶最初是使用標準的「main_db。*上的GRANT ALL」創建爲'XX'標識的user @ localhost;「

我希望找到一種方法,可以輕鬆地將其轉換爲「將靜態數據庫*上的所有內容全部授予用戶@本地主機,由'XX'標識;」而不必在應用程序部署的每臺服務器上手動執行(並且是的,它們都具有不同的「XX」值)。需要。涉及數據庫範圍權限的表是mysql.db。在這裏發佈查詢(通用形式),以防其他人幫助。

回答

2

所有授予的權限都存儲在系統表中,例如, - mysql.tables_priv,mysql.columns_priv,mysql.db ...你可以編寫一個腳本來複制你需要的所有權限。

假設我們有一個用戶 -

CREATE USER 'user1'@'%'; 
GRANT Insert ON TABLE database1.table1 TO 'user1'@'%'; 
GRANT Execute ON PROCEDURE database1.procedure1 TO 'user1'@'%'; 

現在,我們將複製這些權限來訪問數據庫 'DATABASE2' -

-- Copy table's privileges 
INSERT INTO mysql.tables_priv SELECT host, 'database2', user, table_name, grantor, timestamp, table_priv, column_priv FROM mysql.tables_priv 
    WHERE user = 'user1' AND host = '%' AND db = 'database1'; 

-- Copy routine's privileges 
INSERT INTO mysql.procs_priv SELECT host, 'database2', user, routine_name, routine_type, grantor, proc_priv, timestamp FROM mysql.procs_priv 
    WHERE user = 'user1' AND host = '%' AND db = 'database1'; 

-- Do not forget to apply changes ;-) 
FLUSH PRIVILEGES; 

做另一個系統表相同。

+0

關閉。 :)結果我需要使用的表是mysql.db,查詢時間更長,但概念是正確的。 :) – GeminiDomino

+0

是的,mysql.db有更多的字段。 – Devart

相關問題