是否有一种简单的方法来创建用户并将所有权限授予除特定数据库之外的所有数据库?
我试过了
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'@'%';但我得到了以下错误:
Error Code: 1141. There is no such grant defined for user 'demo' on host '%'这有可能吗?
发布于 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语句不会这样做,但您可以手动将特权授予所有数据库,但有请求的数据库除外,如:
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;https://stackoverflow.com/questions/56607236
复制相似问题