首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建用户并撤销他们对MariaDB上特定数据库的访问

创建用户并撤销他们对MariaDB上特定数据库的访问
EN

Stack Overflow用户
提问于 2019-06-15 04:06:35
回答 1查看 2.8K关注 0票数 1

是否有一种简单的方法来创建用户并将所有权限授予除特定数据库之外的所有数据库?

我试过了

代码语言:javascript
复制
CREATE USER 'demo'@'%' IDENTIFIED BY 'QbSv9qUj2EJ8mxm2';
GRANT ALL PRIVILEGES ON *.* TO 'demo'@'%';
REVOKE ALL ON id8694160_sqless.* FROM 'demo'@'%'; -- this is the DB I don't want the user to have access to
SHOW GRANTS FOR 'demo'@'%';

但我得到了以下错误:

代码语言:javascript
复制
Error Code: 1141. There is no such grant defined for user 'demo' on host '%'

这有可能吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-15 08:57:03

根据文档

全局特权是使用*.*为priv_level授予的。全局权限包括管理数据库和管理用户帐户的权限,以及所有表、函数和过程的权限。全局权限存储在mysql.user表.中。 数据库特权是使用db_name.*表示priv_level,或者只使用*来使用默认数据库。数据库特权包括创建表和函数的权限,以及数据库中所有表、函数和过程的权限。数据库权限存储在mysql.db表.中。

这意味着您在GRANT ALL PRIVILEGES ON *.* TO 'demo'@'%';中授予的特权由mysql.user表中的一行表示。从这些全局权限中只撤销一个数据库的特权意味着从mysql.user表中删除全局特权,并在id8694160_sqless表中为每个数据库添加一个数据库特权(id8694160_sqless数据库除外)。

我确信REVOKE语句不会这样做,但您可以手动将特权授予所有数据库,但有请求的数据库除外,如:

代码语言:javascript
复制
INSERT INTO mysql.db
SELECT '%',schema_name,'demo','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'
FROM information_schema.schemata
WHERE NOT schema_name = 'mysql'
AND NOT schema_name = 'information_schema'
AND NOT schema_name = 'performance_schema'
AND NOT schema_name = 'id8694160_sqless';
FLUSH PRIVILEGES;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56607236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档