普通用户创建或删除GDS/OBS外表语句时报错,提示没有权限或权限不足
问题现象
创建GDS或OBS外表语句时,管理员用户可以执行成功,但普通用户执行时报错“ERROR: permission denied to create foreign table in security mode.”。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
CREATE USER u1 PASSWORD '{password}'; SET current_schema = u; CREATE FOREIGN TABLE customer_ft ( c_customer_sk integer , c_customer_id char(16) , c_current_cdemo_sk integer , c_current_hdemo_sk integer , c_current_addr_sk integer ) SERVER gsmpp_server OPTIONS ( location 'gsfs://192.168.0.90:5000/customer1*.dat', FORMAT 'TEXT' , DELIMITER '|', encoding 'utf8', mode 'Normal') READ ONLY; ERROR: permission denied to create foreign table in security mode |
原因分析
该错误信息说明普通用户没有创建外表的权限。
查询该示例中用户权限:
1 2 3 4 5 |
SELECT rolname,roluseft FROM pg_roles WHERE rolname ='u1' ORDER BY rolname desc; rolname | roluseft ---------+---------- u1 | f (1 row) |
处理方法
可使用ALTER USER或者ALTER ROLE语法指定USEFT参数赋予角色或用户使用外表的权限。
参数USEFT | NOUSEFT决定一个新角色或用户是否能操作外表,包括:新建外表、删除外表、修改外表、读写外表。
- 指定USEFT表示角色或用户可操作外表。
- 缺省为NOUSEFT。表示新角色或用户没有操作外表的权限。
1
|
ALTER USER user_name USEFT; |
修改用户或角色权限等信息的详细内容请参见ALTER USER或者ALTER ROLE。
对普通用户或角色赋予使用外表的权限后即可创建外表。