2011-07-06 9 views
6

Chcę utworzyć dwóch użytkowników w mojej bazie danych testowych MySQL, jednej z dostępem tylko do odczytu do tabel odpowiednich do generowania raportów itp. Drugi z dostępem do odczytu i zapisu do tych samych tabel. Jest to testowanie podsystemu, który normalnie łączy się z użytkownikiem tylko do odczytu, ale przełącza się do użytkownika do odczytu i zapisu dla pewnych zadań. Stworzyłem użytkownika do odczytu i zapisu z odpowiednimi uprawnieniami, a teraz potrzebuję wersji tylko do odczytu tego samego użytkownika.Kopiowanie MySQLa użytkownika

Wolałbym nie tworzyć wersji tylko do odczytu od zera, ponieważ musiałem ustawić wiele przywilejów, co było dość pracochłonne. Czy istnieje sposób, w jaki mogę utworzyć nowego użytkownika na podstawie istniejącego użytkownika, a następnie usunąć uprawnienia do INSERT/UPDATE/DELETE od nowego użytkownika? Coś takiego jak CREATE USER 'user2' LIKE 'user1' lub coś podobnego? Nie mogłem go znaleźć w dokumentach MySQL, jeśli jest to możliwe.

Odpowiedz

4

Znalazłem dwie opcje.

Pierwszy, jeśli jesteś użytkownikiem systemu Windows, możesz użyć administratora MySql. http://dev.mysql.com/doc/administrator/en/mysql-administrator-user-administration-user-accounts.html

2-ty można użyć mysquserclone polecenie z MySQL Media: http://wb.mysql.com/utilities/man/mysqluserclone.html

powodzenia.

+0

Poszedłem pobrać Administrator, ale zgodnie z MySQL.com przestał on rozwijać. Czy Workbench obsługuje tę funkcję? – GordonM

+0

Oba łącza są martwe. – halloei

7

Jak wstawić do innej tabeli, zaktualizować kolumny? Coś takiego:

CREATE TABLE user_tmp LIKE user; 
INSERT INTO user_tmp SELECT * FROM user WHERE host ='localhost' AND USER ='root'; 
UPDATE user_tmp SET user = 'readonlyuser', Insert_priv = 'N', Update_priv = 'N', 
    Delete_priv = 'N', /* TODO: ADAPT TO YOUR SUITS */ LIMIT 1; 
INSERT INTO user select * FROM user_tmp; 
DROP TABLE user_tmp; 
+0

Dziękujemy! Szukałem sposobu na dodawanie wsadów u niektórych użytkowników localhost, co ułatwiło kopiowanie% użytkowników z ich uprawnieniami i wszystkim. +1 –

+1

Ładne rozwiązanie, ale należy pamiętać, że nie należy aktualizować tych tabel. Od http://dev.mysql.com/doc/refman/5.7/en/grant-tables.html: «Bezpośrednia modyfikacja tabel przydziału za pomocą instrukcji takich jak INSERT, UPDATE lub DELETE jest odradzana i wykonywana we własnym zakresie ryzyko. Serwer może zignorować wiersze, które uległy zniekształceniu w wyniku takich modyfikacji. » W każdym razie potrzebujesz UPRAWNIEŃ FLUSH po tym: « Podczas uruchamiania iw czasie działania, gdy wykonywana jest funkcja FLUSH PRIVILEGES, serwer sprawdza wiersze tabeli użytkownika. » –

+0

Pomyśl również o klonowaniu tabel z określonymi uprawnieniami (tables_priv, columns_priv, procs_priv, proxies_priv) –