sql >> Databasteknik >  >> RDS >> Mysql

Kopiera användarrättigheter mellan databaser på samma server

Alla beviljade privilegier lagras i systemtabeller, t.ex. - mysql.tables_priv, mysql.columns_priv, mysql.db... Du kan skriva ett skript för att kopiera alla privilegier du behöver.

Anta att vi har användare -

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

Nu kommer vi att kopiera dessa privilegier för att ha tillgång till databasen '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;

Gör samma sak för andra systemtabeller.




  1. Hur kan jag välja 10:e, 20:e, 30:e ... raden av resultatet av en annan urvalsfråga

  2. Trimma mer transaktionsloggfett

  3. Literal matchar inte formatsträngen för Oracle SQL to_date i en strängkolumn

  4. ORA-01795:maximalt antal uttryck i en lista är 1000, hur man delar upp strängen