Если пользователи только предоставили разрешения на своих собственных базах данных, вы можете проверить information_schema.SCHEMA_PRIVILEGES
до разрешения создания, сколько база у них уже есть. Однако для этого вам нужно будет запретить пользователям CREATE DATABASE
и вместо этого создавать базы данных в коде приложения через другого пользователя с привилегированной базой данных, а затем предоставлять доступ к ним для вновь созданных баз данных.
SELECT
GRANTEE,
COUNT(DISTINCT TABLE_SCHEMA) AS NUM_DBS
FROM information_schema.SCHEMA_PRIVILEGES
GROUP BY GRANTEE
Если NUM_DBS
больше, чем ваш предел, не создать новую базу данных для них.
Обратите внимание, что если вы предоставления разрешений пользователям для других, чем те, которые они «владеют» базы данных, вам необходимо учитывать, что в вашем запросе, за исключением тех, через что-то вроде
WHERE TABLE_SCHEMA NOT IN ('other','dbs','you','grant','access','on')
Каков уровень доступа этих пользователей? Можете ли вы обрабатывать создание базы данных с помощью логики приложения, но предоставить пользователю меньше разрешений? – mellamokb