文档首页 > > 开发指南> 查询外部数据> 查询OBS上的数据> 创建外部服务器

创建外部服务器

分享
更新时间: 2019/11/12 GMT+08:00

创建外部服务器,用于定义OBS服务器的信息,供外表调用。创建外部服务器的详细语法,请参见CREATE SERVER

(可选)新建用户及数据库并授予外表权限

如果您将使用普通用户在自定义数据库中创建外部服务器和外表,由于普通用户没有外表权限无法创建,所以,您必须参照以下步骤新建用户和数据库,并授予该用户外表权限。

以下示例,是新建一个普通用户dbuser并创建一个数据库mydatabase,然后使用管理员用户授予dbuser外表权限。

  1. 使用数据库管理员通过DWS提供的数据库客户端连接默认数据库postgres。

    例如,使用gsql客户端的用户执行下面命令连接数据库:

    gsql -d postgres -h 192.168.2.30 -U dbadmin -p 8000 -r

    根据界面提示输入密码。

  2. 新建一个普通用户,并用它创建一个数据库。

    新建一个具有创建数据库权限的用户dbuser:

    CREATE USER dbuser WITH CREATEDB PASSWORD "Bigdata@123";
    切换为新建的用户:
    SET ROLE dbuser PASSWORD "Bigdata@123";
    执行以下命令创建数据库:
    CREATE DATABASE mydatabase;

    查询数据库:

    SELECT * FROM pg_database;

    返回结果中有mydatabase 的信息表示创建成功:

    datname   | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | dattablespace | datcompatibility |                       datacl
    
    ------------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+---------------+------------------+--------------------------------------
    --------------
     template1  |     10 |        0 | C          | C        | t             | t            |           -1 |         14146 |         1351 |          1663 | ORA              | {=c/omm,omm=CTc/omm}
     template0  |     10 |        0 | C          | C        | t             | f            |           -1 |         14146 |         1350 |          1663 | ORA              | {=c/omm,omm=CTc/omm}
     postgres   |     10 |        0 | C          | C        | f             | t            |           -1 |         14146 |         1352 |          1663 | ORA              | {=Tc/omm,omm=CTc/omm,chaojun=C/omm,hu
    obinru=C/omm}
     mydatabase |  17000 |        0 | C          | C        | f             | t            |           -1 |         14146 |         1351 |          1663 | ORA              |
    (4 rows)

  3. 使用管理员用户给普通用户赋予创建外部服务器的权限和使用外表的权限。

    使用数据库管理员用户通过DWS提供的数据库客户端连接新建的数据库。

    例如,使用gsql客户端的用户可以直接使用如下语句切换为管理员用户去连接新建的数据库:

    \c mydatabase dbadmin;

    根据提示输入管理员用户密码。

    注意,必须先使用管理员用户连接到将要创建外部服务器和使用外表的数据库,再对普通用户进行授权。

    默认只有系统管理员才可以创建外部服务器,普通用户需要授权才可以创建,执行以下命令授权:
    GRANT ALL ON FOREIGN DATA WRAPPER dfs_fdw TO dbuser;

    其中FOREIGN DATA WRAPPER的名字只能是hdfs_fdw,dbuser为创建SERVER的用户名。

    执行以下命令赋予用户使用外表的权限。

    ALTER USER dbuser USEFT;

    查看用户:

    SELECT r.rolname, r.rolsuper, r.rolinherit,
      r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,
      r.rolconnlimit, r.rolvalidbegin, r.rolvaliduntil,
      ARRAY(SELECT b.rolname
            FROM pg_catalog.pg_auth_members m
            JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
            WHERE m.member = r.oid) as memberof
    , r.rolreplication
    , r.rolauditadmin
    , r.rolsystemadmin
    , r.roluseft
    FROM pg_catalog.pg_roles r
    ORDER BY 1;

    返回结果中dbuser的信息中包含了UseFT权限,表示授权成功:

    rolname  | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolconnlimit | rolvalidbegin | rolvaliduntil | memberof | rolreplication | rolauditadmin | rolsystemadmin | roluseft
    -----------+----------+------------+---------------+-------------+-------------+--------------+---------------+---------------+----------+----------------+---------------+----------------+----------
     dbuser    | f        | t          | f             | t           | t           |           -1 |               |               | {}       | f              | f             | f              | t
     lily      | f        | t          | f             | f           | t           |           -1 |               |               | {}       | f              | f             | f              | f
     omm       | t        | t          | t             | t           | t           |           -1 |               |               | {}       | t              | t             | t              | t  

创建外部服务器

  1. 使用即将创建外部服务器的用户去连接其对应的数据库。

    在本示例中,将使用(可选)新建用户及数据库并授予外表权限中创建的普通用户dbuser连接其创建的数据库mydatabase 。用户需要通过DWS提供的数据库客户端连接数据库。

    例如,使用gsql客户端的用户可以通过以下两种方法中的一种进行连接:

    • 如果已经登录了gsql客户端,可以执行以下命令切换数据库和用户:
      \c mydatabase dbuser;

      根据提示输入密码。

    • 如果尚未登录gsql客户端,或者已经登录了gsql客户端执行\q退出gsql后,执行以下命令重新进行连接:
      gsql -d mydatabase -h 192.168.2.30 -U dbuser -p 8000 -r

      根据提示输入密码。

  2. 创建外部服务器。

    创建外部服务器的详细语法,请参见CREATE SERVER

    例如,执行以下命令创建外部服务器'obs_server' :

    CREATE SERVER obs_server FOREIGN DATA WRAPPER dfs_fdw 
    OPTIONS ( 
      address 'obs.cn-north-1.myhuaweicloud.com' , 
      ACCESS_KEY 'access_key_value_to_be_replaced', 
      SECRET_ACCESS_KEY 'secret_access_key_value_to_be_replaced', 
      type 'obs' 
    );

    以下为必选参数的说明:

    • 外部服务器名称

      允许用户自定义名字。

      在本例中,我们指定为“obs_server”

    • FOREIGN DATA WRAPPER

      只能指定为dfs_fdw,它在数据库中已经存在。

    • OPTIONS参数
      • address

        指定OBS服务的IP地址或域名。

        address的获取方法如下:

        1. 先通过OBS上的数据准备中的2获取OBS路径。
        2. 在OBS上查看到的OBS路径,有以下两种形式,其中就包含了OBS服务的IP地址或域名:
          • https://存储服务器IP地址或域名/桶名/文件夹目录层级/对象名
          • https://桶名.域名/文件夹目录层级/对象名
      • 访问密钥(AK和SK)(必选)
        DWS需要通过访问密钥(AK和SK)访问OBS,因此,必须先获取访问密钥。
        • “access_key”(必选):表示用户的AK信息。
        • “secret_access_key”(必选):表示用户的SK信息。

        获取访问密钥,请登录管理控制台,然后将鼠标移到右上角的用户名,单击“我的凭证”,再单击“管理访问密钥”,可以查看已有的访问密钥,也可以单击“新增访问密钥”进行创建。

      • type

        取值为'obs',表示dfs_fdw连接的是OBS。

  3. 查看外部服务器:

    SELECT * FROM pg_foreign_server WHERE srvname='obs_server';

    返回结果如下所示,表示已经创建成功:

      srvname   | srvowner | srvfdw | srvtype | srvversion | srvacl |                                                                                      srvoptions
    
    ------------+----------+--------+---------+------------+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    -----------
     obs_server |    24661 |  13686 |         |            |        | {address=xxx.xxx.x.xxx,access_key=xxxxxxxxxxxxxxxxxxxx,type=obs,secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
    (1 row)

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区