diff --git a/ceod/db/MySQLService.py b/ceod/db/MySQLService.py index 043a906..e6a194d 100644 --- a/ceod/db/MySQLService.py +++ b/ceod/db/MySQLService.py @@ -46,17 +46,21 @@ class MySQLService: password = gen_password() search_for_user = f"SELECT user FROM mysql.user WHERE user='{username}'" search_for_db = f"SHOW DATABASES LIKE '{username}'" - create_user = f""" - CREATE USER '{username}'@'%' IDENTIFIED BY %(password)s; - """ + # CREATE USER can't be used in a query with multiple statements + create_user_commands = [ + f"CREATE USER '{username}'@'localhost' IDENTIFIED BY %(password)s", + f"CREATE USER '{username}'@'%' IDENTIFIED BY %(password)s", + ] create_database = f""" CREATE DATABASE {username}; + GRANT ALL PRIVILEGES ON {username}.* TO '{username}'@'localhost'; GRANT ALL PRIVILEGES ON {username}.* TO '{username}'@'%'; """ with self.mysql_connection() as con, con.cursor() as cursor: if response_is_empty(search_for_user, con): - cursor.execute(create_user, {'password': password}) + for cmd in create_user_commands: + cursor.execute(cmd, {'password': password}) if response_is_empty(search_for_db, con): cursor.execute(create_database) else: @@ -67,7 +71,8 @@ class MySQLService: password = gen_password() search_for_user = f"SELECT user FROM mysql.user WHERE user='{username}'" reset_password = f""" - ALTER USER '{username}'@'%' IDENTIFIED BY %(password)s + ALTER USER '{username}'@'localhost' IDENTIFIED BY %(password)s; + ALTER USER '{username}'@'%' IDENTIFIED BY %(password)s; """ with self.mysql_connection() as con, con.cursor() as cursor: @@ -80,6 +85,7 @@ class MySQLService: def delete_db(self, username: str): drop_db = f"DROP DATABASE IF EXISTS {username}" drop_user = f""" + DROP USER IF EXISTS '{username}'@'localhost'; DROP USER IF EXISTS '{username}'@'%'; """