GRANT TO PUBLIC 在 MariaDB 中
MariaDB 10.11.0,我们的最新预览版本,包含相当多的改进。我们今天要讨论的是 GRANT ... TO PUBLIC
。
背景
MariaDB 有一套相当复杂的权限系统。其中大部分基于 SQL 标准规范;但我们确实有一些特定的 MariaDB 扩展。GRANT ... TO PUBLIC
(MDEV-5215) 是一个标准功能,现已在 MariaDB 10.11.0 中作为预览版提供。它与 ROLES
和 DEFAULT ROLE
相关,但涵盖了不同的使用场景。
ROLES
实际上是用户可以启用和禁用的“权限包”。还可以通过为每个用户设置一个 DEFAULT ROLE
来设置连接时将启用哪个“权限包”。这一切都非常有用,但缺少一个关键功能。对于 DBA 来说,能够只声明一次所有用户都需要拥有某些权限集将非常有用。这就是 GRANT ... TO PUBLIC
的作用所在。
用法
GRANT <privilege> ON <database>.<object> TO PUBLIC;
REVOKE <privilege> ON <database>.<object> FROM PUBLIC;
将权限授予 PUBLIC 与授予常规角色权限一样工作。唯一的区别是这些权限适用于所有具有服务器登录访问权限的用户。即使是在修改 PUBLIC 授予后创建的用户,此规则也适用。
运行 SHOW GRANTS
时,用户也会看到从 PUBLIC 继承的权限。此外,还可以运行 SHOW GRANTS FOR PUBLIC
,它将仅显示 PUBLIC 的授予。
... (connect as root) ...
MariaDB [(none)]> create user developer;
MariaDB [(none)]> create database dev_db;
MariaDB [(none)]> grant all on dev_db.* to public;
MariaDB [(none)]> grant all on mysql.* to developer;
... (connect as developer) ...
MariaDB [(none)]> show grants;
+-------------------------------------------------+
| Grants for developer@% |
+-------------------------------------------------+
| GRANT USAGE ON . TO developer@% |
| GRANT ALL PRIVILEGES ON mysql.* TO developer@% |
| GRANT ALL PRIVILEGES ON dev_db.* TO PUBLIC |
+-------------------------------------------------+
MariaDB [(none)]> show grants for public;
+------------------------------------------------+
| Grants for PUBLIC |
+------------------------------------------------+
| GRANT ALL PRIVILEGES ON `dev_db`.* TO `PUBLIC` |
+------------------------------------------------+
但是目前存在一个错误(MDEV-29752),除非对 mysql
数据库具有 SELECT 权限,否则无法运行 SHOW GRANTS FOR PUBLIC
。预计在功能达到 GA 版本前会修复此问题。
如何试用此功能
试用 MariaDB 10.11 的最快方法是使用以下命令在 docker / podman 中运行它
启动一个 10.11.0 MariaDB 容器
docker run --env MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=True --name mariadb-preview -it quay.io/mariadb-foundation/mariadb-devel:10.11-preview
之后,您可以在另一个终端中使用以下命令连接
docker exec -it mariadb-preview mysql -u root
如果您正在运行 podman,只需将 docker
替换为 podman
。
或者,您可以直接从 mariadb.org/download 下载二进制文件