我有以下初始化脚本:
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
CREATE USER IF NOT EXISTS 'developer'@'%' IDENTIFIED BY 'devpassword1';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON *.* TO 'developer'@'%';
CREATE USER IF NOT EXISTS 'maintainer'@'%' IDENTIFIED BY 'maintainerpw1';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON *.* TO 'maintainer'@'%';
FLUSH PRIVILEGES;
我使用docker-compose.yml
文件中的卷挂载将其挂载到运行mariadb
的docker容器中
services:
mariadb:
image: mariadb:10.7.3
container_name: sql-db
volumes:
- ./mariadb/init-scripts:/docker-entrypoint-initdb.d
要求
我希望授予developer
和maintainer
大部分的R/W授权,但他们可能不会创建新的用户。这应该是可能的,只有通过admin
用户。
试验
我试着将CREATE USER
添加到maintainer
/developer
用户中,它工作正常,这是我不希望有的。
这可以通过执行以下操作实现:
第一次
并且在这两种情况下,CREATE USER dummy1@'%'
实际上都创建了用户。是否可以对mariadb用户授权进行微调,以允许他们创建数据库而不创建用户?
1条答案
按热度按时间a6b3iqyw1#
创建users需要对
mysql.global_priv
具有insert
权限。要避免此权限的限制很难,除非授予否定赠款(不久的将来将随MDEV-14443一起提供)。这是因为创建任意数据库需要具有*.*
权限(除非您希望将数据库的名称空间限制为非mysql
前缀grant all on u_*.* to maintainer
)。您可以创建一个类似于
mysql.create_db
的过程,然后尽管使用容器,您可能只能够为每个DB创建一个数据库示例,而忽略了多个数据库在一起的复杂性。