列级安全
在某些情况下,并非所有的人都能看到表中所有的数据。postgres中可以指定某些用户只能看到某些列
1.--表,插入一条数据
postgres=# create table t_user(n_id int,c_name text);
CREATE TABLE
postgres=# insert into t_user values(1,'张三');
INSERT 0 1
2.--创建用户zhangsan
postgres=# create role zhangsan login;
CREATE ROLE
3.--赋予账号连接和使用权限
postgres=# grant connect on database postgres to zhangsan;
GRANT
postgres=# grant usage on schema public to zhangsan;
GRANT
4.赋予select权限给zhangsan,只能访问n_id
postgres=# grant select (n_id) on t_user to zhangsan;
GRANT
5.--查询数据,可以读取到数据
postgres=# c postgres zhangsan
You are now connected to database "postgres" as user "zhangsan".
postgres=> select n_id from t_user;
n_id
------
1
(1 row)
--如果使用select *会报错,因为*标识所有的列,只能访问有权限访问的列
postgres=> select * from t_user;
错误: permission denied for table t_user
postgres=> select c_name from t_user;
错误: permission denied for table t_user