Skip to content

Commit 9a40854

Browse files
Create database DBA role
1 parent 37173ba commit 9a40854

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

common/common/mysql_shell/__init__.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
_ROLE_DML = "charmed_dml"
2323
_ROLE_READ = "charmed_read"
24+
_ROLE_MAX_LENGTH = 32
2425

2526
logger = logging.getLogger(__name__)
2627

@@ -145,8 +146,19 @@ def _get_mysql_roles(self, name_pattern: str) -> typing.Set[str]:
145146

146147
def create_application_database(self, *, database: str) -> str:
147148
"""Create database for related database_provides application."""
149+
role_name = f"charmed_dba_{database}"
150+
if len(role_name) >= _ROLE_MAX_LENGTH:
151+
logger.exception("Failed to create application database")
152+
raise ValueError("Role name longer than 32 characters")
153+
154+
statements = [
155+
f"CREATE DATABASE IF NOT EXISTS `{database}`",
156+
f"CREATE ROLE IF NOT EXISTS `{role_name}`",
157+
f"GRANT SELECT, INSERT, DELETE, UPDATE, EXECUTE ON `{database}`.* TO {role_name}",
158+
f"GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE VIEW, DROP, INDEX, LOCK TABLES, REFERENCES, TRIGGER ON `{database}`.* TO {role_name}",
159+
]
160+
148161
mysql_roles = self._get_mysql_roles("charmed_%")
149-
statements = [f"CREATE DATABASE IF NOT EXISTS `{database}`"]
150162
if _ROLE_READ in mysql_roles:
151163
statements.append(
152164
f"GRANT SELECT ON `{database}`.* TO {_ROLE_READ}",

0 commit comments

Comments
 (0)