普通用户对于某个模式下的对象访问除了访问对象要授权外,模式也需要授权。
[teledb@localhost bin]$ ./telesql -p 11111 -U teledb -d teledb
Password for user teledb:
telesql (TeleDB V6)
Type "help" for help.
-- 创建shema
teledb=# create schema test;
CREATE SCHEMA
-- 创建表
teledb=# create table test.t1(id int);
CREATE TABLE
-- 创建用户user1
teledb=# create role user1 with login password 'User@184';
CREATE ROLE
-- 授权表访问权限给用户user1
teledb=# grant select on test.t1 to user1;
GRANT
切换到普通用户user1,尝试访问test.t1表,由于没有授权test模式,仍然无法访问
teledb=# \c - user1
Password for user user1:
You are now connected to database "teledb" as user "user1".
teledb=> select * from test.t1;
ERROR: permission denied for schema test
LINE 1: select * from test.t1;
^
切换到teledb用户,将test模式的访问权限授权给user1,重新用user1访问t1表
teledb=> \c - teledb
Password for user teledb:
You are now connected to database "teledb" as user "teledb".
-- 授权schema
teledb=# grant usage on schema test to user1;
GRANT
teledb=# \c - user1
Password for user user1:
You are now connected to database "teledb" as user "user1".
teledb=> select * from test.t1;
id
----
(0 rows)