匿名用户最近刚有个项目切成opengauss,想问个问题
有一个对接系统要从我这边拿数据,还是以视图方式。之前用oracle数据库时候,
1、先在我业务库里写好视图
2、另外新建一个查询用户
3、把视图授权给新建的用户,grant select on xxxx to xxxx;
4、在新建用户下创建同义词
opengauss这套数据库下,有没有可以参考的教程?用户、数据库、模式,多了一层【模式】结构,不清楚怎么弄了…
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
2条回答
默认
最新
采纳答案后不可修改和取消
在2和3中间加一步
grant usage on schema 视图所在schema to 新建的用户
其他步骤保持不变
评论
有用 4您好,我按照上述方法操作后还是不能达到需求,有报错。下面是我的操作步骤:
1、创建用户test1、创建数据库cloudone,创建模式schema1,并进行指定。
create user test1 with password 'test1@123';
create database cloudone owner test1 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8' tablespace pg_default;
\c cloudone;
CREATE SCHEMA "schema1" AUTHORIZATION "test1";
2、在模式schema1创建表aaa1,创建视图v_aaa1。
CREATE VIEW v_aaa1 AS select * from aaa1;
3、创建用户test2、创建数据库cloudtwo,并进行指定。
create user test2 with password 'test2@123';
create database cloudtwo owner test2 encoding 'UTF8' lc_collate 'en_US.UTF-8' lc_ctype 'en_US.UTF-8' tablespace pg_default;
4、用navicate工具,登录用户test1,打开schema1,然后完成对test2用户的授权,包括视图所在模式授权、视图授权
grant usage on schema schema1 to test2;
grant select on v_aaa1 to test2;
5、用navicate工具,退出用户test1,登录用户test2,打开数据库cloudtwo,在cloudtwo数据库下执行同义词
CREATE OR REPLACE SYNONYM v_aaa1 FOR cloudA1.v_aaa1;
在执行5后,有报错,如下:
ERROR: permission denied for schema public
DETAIL: N/A
请问是哪个步骤有错误或者我遗漏什么了么?
采纳答案后不可修改和取消
步骤5报错的原因是,没有指定同义词创建在哪个schema下,那么默认就会创建在search_path中第一个可用的schema下,一般情况下,默认的search_path是user和public,但是由于test2用户不是在期望使用的库中创建的,因此当前库中没有test2这个与用户同名的的schema,所以同义词会创建在public下,而public其实也是个普通的schema,普通用户没有权限在public下创建对象。
所以,如果想使用test2在public下创建同义词,就要grant usage,create on schema public to test2;
但是,在openGauss更正确的兼容ORACLE的姿势应该是
1.建库
2.在新建的这个库中创建用户,此时会自动创建同名schema,后续的大部分的schema相关行为都和ORACLE保持一致,(除了需要额外授予跨schema的usage权限)。
以下是一个简单的示例
--管理员登录,建库、连新库、建用户
gsql -r -d db_test
create database db_test;
\c db_test
create user test1 password 'test@123';
create user test2 password 'test@123';
\q
--用户test1登录,创建对象及授权给test2
gsql -r -d db_test -Utest1 -Wtest@123
create table t1 (a int);
create view v1 as select * from t1;
grant select on v1 to test2;
grant usage on schema test1 to test2;
\q
--用户test2登录,带schema前缀查询确认权限正常,创建本用户同名schema下的同义词即可免schema前缀查询
gsql -r -d db_test -Utest2 -Wtest@123
select * from test1.v1;
create synonym test2.v1 for test1.v1;
select * from v1;
评论
有用 0回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

