将用户限制在 PostgreSQL 中的一个模式?
Restrict user to one schema in PostgreSQL?
是否可以在 PostgreSQL 中创建只能访问单个模式的用户?
这是我尝试过的:
REVOKE ALL ON DATABASE testdb FROM public;
GRANT CONNECT ON DATABASE testdb TO testuser;
当我以 testuser 身份连接时,我确实无法访问实际数据:
> SELECT * FROM some_table;
ERROR: permission denied for relation some_table
但是,我仍然可以列出所有其他模式中的所有表等:
SELECT * FROM pg_tables;
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
--------------------+-------------------------------------------+------------+------------+------------+----------+-------------+-------------
test2 | foo | postgres | | t | f | f | f
test2 | bar | postgres | | t | f | f | f
...
不可能将 PostgreSQL 配置为用户只能看到他或她有权访问的系统目录中的那些对象。
如果您需要这样的设置,您应该为每个用户创建一个数据库。
我可以这样做:
GRANT USAGE ON SCHEMA schema_name TO user_name;
ALTER USER user_name SET search_path = schema_name;
像这样的 ALTER USER
语句是一种永久设置模式搜索路径的方法,就像您使用
设置单个会话的模式搜索路径一样
SET SEARCH_PATH= schema_name_1, schema_name_2;
是否可以在 PostgreSQL 中创建只能访问单个模式的用户?
这是我尝试过的:
REVOKE ALL ON DATABASE testdb FROM public;
GRANT CONNECT ON DATABASE testdb TO testuser;
当我以 testuser 身份连接时,我确实无法访问实际数据:
> SELECT * FROM some_table;
ERROR: permission denied for relation some_table
但是,我仍然可以列出所有其他模式中的所有表等:
SELECT * FROM pg_tables;
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
--------------------+-------------------------------------------+------------+------------+------------+----------+-------------+-------------
test2 | foo | postgres | | t | f | f | f
test2 | bar | postgres | | t | f | f | f
...
不可能将 PostgreSQL 配置为用户只能看到他或她有权访问的系统目录中的那些对象。
如果您需要这样的设置,您应该为每个用户创建一个数据库。
我可以这样做:
GRANT USAGE ON SCHEMA schema_name TO user_name;
ALTER USER user_name SET search_path = schema_name;
像这样的 ALTER USER
语句是一种永久设置模式搜索路径的方法,就像您使用
SET SEARCH_PATH= schema_name_1, schema_name_2;