greenplum 6 创建用户问题权限问题异常(创建只查视图用户)
- 解决普通用户默认无限制访问其它数据库问题;
- 解决普通用户可以无限制建表问题;
- 解决普通用户可以用navicat等工具查看系统原表问题;
背景:
我发现创建一个一个普通用户,在没有做特殊处理的情况下这个用户可以随意访问其它数据库,可以通过navicat 等工具随意查看库的表名、函数、视图名等信息(虽然不可编辑,但是也不想让外部无关人员看到无关信息)
参考的官方文档:
https://gpdb.docs.pivotal.io/6-10/ref_guide/sql_commands/CREATE_ROLE.html
https://gpdb.docs.pivotal.io/6-10/ref_guide/sql_commands/CREATE_RESOURCE_QUEUE.html
https://gpdb.docs.pivotal.io/6-10/ref_guide/sql_commands/GRANT.html#topic1
下面开始解决以上问题:
-- 回收数据库访问权限(限制普通用户访问指定数据库)
revoke connect on database gpdb from public;
revoke connect on database gpperfmon from public;
revoke connect on database postgres from public;
-- 或从 pg_hba.conf中限定
# TYPE DATABASE USER ADDRESS METHOD
# host viid tydk 0.0.0.0/0 md5
--系统表权限清空:防止用户登录上去就能查看(限制普通用户通过navicat等工具查看无关信息)
revoke all on pg_class from public;
revoke all on pg_tablespace from public;
revoke all on pg_user from public;
revoke all on pg_roles from public;
-- 创建资源队列(连接数=3,最大内存使用:1024MB,优先级:{MIN|LOW|MEDIUM|HIGH|MAX})
DROP RESOURCE QUEUE test_queue;
create resource queue test_queue with (active_statements=3,MEMORY_LIMIT='1024MB',PRIORITY=MEDIUM);
-- 创建用户
CREATE USER test WITH PASSWORD 'test2020' resource queue test_queue;
--赋予访问权限
-- grant connect on database orcl to test;
-- 设置用户事务只读(限制用户只能有select权限)
alter user test set default_transaction_read_only=on;
-- revoke create on schema public from test;
-- revoke all on database viid from test;
-- revoke all on schema public from test;
-- 创建视图
create view v_t_test_gb as select * from t_test_gb where status='1' order by modifydate desc;
--赋予用户部分表查询权限
GRANT SELECT ON TABLE v_t_test_gb TO test;
-- 查询用户所有权限
SELECT * FROM information_schema.table_privileges WHERE grantee='test';
-- 回收用户所有权限
revoke all on database orclfrom test;
revoke all on all tables in schema public from test;
-- 或者删除授予用户的任何特权
DROP OWNED BY test;
DROP USER test;
客户端访问方式:
psql -h 127.0.0.1 -p 5432 -d orcl -U test -W;
java jdbc 访问方式:
spring.datasource.mpp.name=postgresql
spring.datasource.mpp.jdbc-url=jdbc:postgresql://127.0.0.1:5432/orcl
spring.datasource.mpp.driver-class-name=org.postgresql.Driver
spring.datasource.mpp.username=test
spring.datasource.mpp.password=test2020
<!-- postgresql-42.2.5.jar -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>