我用这个脚本创建了一个数据库、角色和模式:
-- -----------------------------------------------------------------------------
-- set variables ---------------------------------------------------------------
-- -----------------------------------------------------------------------------
\set dbname keycloak
\set schemaname :dbname
\set rolename :dbname
-- -----------------------------------------------------------------------------
-- create ROLE and Database ----------------------------------------------------
-- -----------------------------------------------------------------------------
CREATE ROLE :rolename WITH LOGIN ;
CREATE DATABASE :dbname WITH OWNER :rolename ;
-- -----------------------------------------------------------------------------
-- connect to DB, create SCHEMA & set privileges -------------------------------
-- -----------------------------------------------------------------------------
\c :dbname
REVOKE ALL ON SCHEMA public FROM PUBLIC ;
CREATE SCHEMA :schemaname AUTHORIZATION :rolename ;
ALTER ROLE :rolename SET search_path=:schemaname ;
GRANT ALL ON ALL TABLES IN SCHEMA :schemaname TO :rolename ;
REVOKE ALL ON DATABASE :dbname FROM PUBLIC ;
这一切似乎都适用于keycloak
ROLE 可以在keycloak
数据库上执行的操作。
现在我想将 SELECT 授予keycloak_reader
该 SCHEMA keycloak 内所有表上的角色。此外,该角色应该授予其他角色(应该继承那些 SELECT 能力 [理想情况下包括 search_path])。
我试过
GRANT CONNECT ON DATABASE keycloak TO keycloak_reader ;
\c keycloak
GRANT SELECT ON ALL TABLES IN SCHEMA keycloak TO keycloak_reader ;
ALTER ROLE keycloak SET search_path=keyckloak ;
我可以连接,但无法选择任何内容(权限被拒绝)。既不作为keycloak_reader
,也不作为组成员的任何角色keycloak_reader
。
我究竟做错了什么?